使用 hive 或 hive 客户端,我可以很容易地执行以下语句:

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”),它返回所有配置参数,但是当grepping“host”时,返回的参数似乎不包含真实的主机名。)

谢谢!

最佳答案

发生这种情况是因为pyhs2试图在群集上查找文件

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

10-07 19:15
查看更多