Alexey Sanko created AIRFLOW-295:
------------------------------------

             Summary: Beeline called into HiveCliHook.run() read unclosed file 
and skip last statement
                 Key: AIRFLOW-295
                 URL: https://issues.apache.org/jira/browse/AIRFLOW-295
             Project: Apache Airflow
          Issue Type: Bug
            Reporter: Alexey Sanko


If hql into HiveOperator which use beeline connection contains a lot of 
statements and doesn't contain additional space line at the end beeline skip 
last statement.
As I understand beeline directly read unclosed file (which cannot be closed of 
NamedTemporaryFile class usage) and get unexpected EOF.
{code}
hive = HiveOperator(
    dag = hive_dag,
    start_date = datetime(2016, 1, 1),
    task_id='asanko_cli_remote_test',
    hql = """
use asanko;
drop table if exists test_airflow_dual;
create table asanko.test_airflow_dual as select * from asanko.dual where x <> 
'{{ ds }}';
desc asanko.test_airflow_dual;
""",
    hive_cli_conn_id='asanko_hive_cli_beeline',
    schema='asanko',
    default_args=args,
    run_as_owner=True)
{code}
Log:
{code}
[2016-06-29 03:01:51,346] {models.py:1041} INFO - Executing 
<Task(HiveOperator): asanko_cli_remote_test> on 2016-01-01 00:00:00
[2016-06-29 03:01:51,354] {hive_operator.py:63} INFO - Executing: 
use asanko;
drop table if exists test_airflow_dual;
create table asanko.test_airflow_dual as select * from asanko.dual where x <> 
'2016-01-01';
desc asanko.test_airflow_dual;
[2016-06-29 03:01:51,357] {base_hook.py:53} INFO - Using connection to: 
asanko_hive
[2016-06-29 03:01:51,358] {hive_hooks.py:105} INFO - beeline -f 
/tmp/airflow_hiveop_EDQ7kE/tmpuSq2NR -u 
jdbc:hive2://asanko_hive:10000/default;auth=none -n asanko -p pwd
[2016-06-29 03:01:52,119] {hive_hooks.py:116} INFO - scan complete in 3ms
[2016-06-29 03:01:52,120] {hive_hooks.py:116} INFO - Connecting to 
jdbc:hive2://asanko_hive:10000/default;auth=none
[2016-06-29 03:01:52,375] {hive_hooks.py:116} INFO - Connected to: Apache Hive 
(version 0.12.0-cdh5.1.3)
[2016-06-29 03:01:52,376] {hive_hooks.py:116} INFO - Driver: Hive JDBC (version 
0.12.0-cdh5.1.3)
[2016-06-29 03:01:52,376] {hive_hooks.py:116} INFO - Transaction isolation: 
TRANSACTION_REPEATABLE_READ
[2016-06-29 03:01:52,385] {hive_hooks.py:116} INFO - Beeline version 
0.12.0-cdh5.1.3 by Apache Hive
[2016-06-29 03:01:52,386] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> USE asanko;
[2016-06-29 03:01:52,428] {hive_hooks.py:116} INFO - No rows affected (0.041 
seconds)
[2016-06-29 03:01:52,441] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive>
[2016-06-29 03:01:52,441] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> use asanko;
[2016-06-29 03:01:52,451] {hive_hooks.py:116} INFO - No rows affected (0.01 
seconds)
[2016-06-29 03:01:52,452] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> drop table if exists test_airflow_dual;
[2016-06-29 03:01:52,463] {hive_hooks.py:116} INFO - No rows affected (0.009 
seconds)
[2016-06-29 03:01:52,465] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> create table asanko.test_airflow_dual as select * 
from asanko.dual where x <> '2016-01-01';
[2016-06-29 03:01:55,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:00,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:05,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:10,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:15,010] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:20,003] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:25,011] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:30,010] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:35,007] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:40,007] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:45,007] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:02:46,575] {hive_hooks.py:116} INFO - No rows affected (54.109 
seconds)
[2016-06-29 03:02:46,578] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> desc asanko.test_airflow_dual;Closing: 
org.apache.hive.jdbc.HiveConnection
{code}

But if we manually add empty row last statement successfully run:
{code}
hive = HiveOperator(
    dag = hive_dag,
    start_date = datetime(2016, 1, 1),
    task_id='asanko_cli_remote_test',
    hql = """
use asanko;
drop table if exists test_airflow_dual;
create table asanko.test_airflow_dual as select * from asanko.dual where x <> 
'{{ ds }}';
desc asanko.test_airflow_dual;

""",
    hive_cli_conn_id='asanko_hive_cli_beeline',
    schema='asanko',
    default_args=args,
    run_as_owner=True)
{code}
Log:
{code}
[2016-06-29 03:04:01,378] {models.py:1041} INFO - Executing 
<Task(HiveOperator): asanko_cli_remote_test> on 2016-01-01 00:00:00
[2016-06-29 03:04:01,386] {hive_operator.py:63} INFO - Executing: 
use asanko;
drop table if exists test_airflow_dual;
create table asanko.test_airflow_dual as select * from asanko.dual where x <> 
'2016-01-01';
desc asanko.test_airflow_dual;

[2016-06-29 03:04:01,388] {base_hook.py:53} INFO - Using connection to: 
asanko_hive
[2016-06-29 03:04:01,390] {hive_hooks.py:105} INFO - beeline -f 
/tmp/airflow_hiveop_vmWhkH/tmpDq9Lyp -u 
jdbc:hive2://asanko_hive:10000/default;auth=none -n asanko -p pwd
[2016-06-29 03:04:02,216] {hive_hooks.py:116} INFO - scan complete in 2ms
[2016-06-29 03:04:02,217] {hive_hooks.py:116} INFO - Connecting to 
jdbc:hive2://asanko_hive:10000/default;auth=none
[2016-06-29 03:04:02,708] {hive_hooks.py:116} INFO - Connected to: Apache Hive 
(version 0.12.0-cdh5.1.3)
[2016-06-29 03:04:02,708] {hive_hooks.py:116} INFO - Driver: Hive JDBC (version 
0.12.0-cdh5.1.3)
[2016-06-29 03:04:02,709] {hive_hooks.py:116} INFO - Transaction isolation: 
TRANSACTION_REPEATABLE_READ
[2016-06-29 03:04:02,735] {hive_hooks.py:116} INFO - Beeline version 
0.12.0-cdh5.1.3 by Apache Hive
[2016-06-29 03:04:02,735] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> USE asanko;
[2016-06-29 03:04:02,786] {hive_hooks.py:116} INFO - No rows affected (0.05 
seconds)
[2016-06-29 03:04:02,800] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive>
[2016-06-29 03:04:02,800] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> use asanko;
[2016-06-29 03:04:02,810] {hive_hooks.py:116} INFO - No rows affected (0.008 
seconds)
[2016-06-29 03:04:02,812] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> drop table if exists test_airflow_dual;
[2016-06-29 03:04:02,899] {hive_hooks.py:116} INFO - No rows affected (0.087 
seconds)
[2016-06-29 03:04:02,902] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> create table asanko.test_airflow_dual as select * 
from asanko.dual where x <> '2016-01-01';
[2016-06-29 03:04:05,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:10,007] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:15,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:20,008] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:25,010] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:30,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:35,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:40,005] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:45,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:50,006] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:04:55,007] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:05:00,004] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:05:05,007] {jobs.py:142} DEBUG - [heart] Boom.
[2016-06-29 03:05:06,221] {hive_hooks.py:116} INFO - No rows affected (63.319 
seconds)
[2016-06-29 03:05:06,225] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> desc asanko.test_airflow_dual;
[2016-06-29 03:05:06,390] {hive_hooks.py:116} INFO - 
+-----------------------+-----------------------+-----------------------+
[2016-06-29 03:05:06,390] {hive_hooks.py:116} INFO - |       col_name        |  
     data_type       |        comment        |
[2016-06-29 03:05:06,390] {hive_hooks.py:116} INFO - 
+-----------------------+-----------------------+-----------------------+
[2016-06-29 03:05:06,391] {hive_hooks.py:116} INFO - | x                     | 
string                | None                  |
[2016-06-29 03:05:06,391] {hive_hooks.py:116} INFO - 
+-----------------------+-----------------------+-----------------------+
[2016-06-29 03:05:06,391] {hive_hooks.py:116} INFO - 1 row selected (0.166 
seconds)
[2016-06-29 03:05:06,394] {hive_hooks.py:116} INFO - 0: 
jdbc:hive2://asanko_hive> Closing: org.apache.hive.jdbc.HiveConnection
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to