pyhs2 / hive没有匹配路径文件和文件的文件存在

时间:2014-12-08 18:09:49

标签: hive hdfs

使用hive或beeline客户端,执行此语句没有问题:

hive -e "LOAD DATA LOCAL INPATH '/tmp/tmpBKe_Mc' INTO TABLE unit_test_hs2"

文件中的数据已成功加载到配置单元中。

但是,在同一台机器上使用pyhs2时,找不到该文件:

import pyhs2
conn_str = {'authMechanism':'NOSASL', 'host':'azus',}
conn = pyhs2.connect(conn_str)
with conn.cursor() as cur:
    cur.execute("LOAD DATA LOCAL INPATH '/tmp/tmpBKe_Mc' INTO TABLE unit_test_hs2")

抛出异常:

Traceback (most recent call last):
  File "data_access/hs2.py", line 38, in write
    cur.execute("LOAD DATA LOCAL INPATH '%s' INTO TABLE %s" % (csv_file.name, table_name))
  File "/edge/1/anaconda/lib/python2.7/site-packages/pyhs2/cursor.py", line 63, in execute
    raise Pyhs2Exception(res.status.errorCode, res.status.errorMessage)
pyhs2.error.Pyhs2Exception: "Error while compiling statement: FAILED: SemanticException Line 1:23 Invalid path ''/tmp/tmpBKe_Mc'': No files matching path file:/tmp/tmpBKe_Mc"

我已经看到有关此问题的类似问题,通常的答案是查询在不存储本地文件'/ tmp / tmpBKe_Mc'的其他服务器上运行。但是,如果是这种情况,为什么直接从CLI运行命令工作但使用pyhs2不起作用?

(次要问题:如何显示哪个服务器正在尝试处理查询?我已经尝试过cur.execute(“set”),它会返回所有配置参数但是在为“host”进行grepping时,返回的参数不会似乎包含一个真正的主机名。)

谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为pyhs2试图在群集上找到文件

解决方案是将源保存在相关的hdfs位置而不是/ tmp