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

标签 hive hdfs

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

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

文件中的数据已成功加载到 hive 中。

但是,在同一台机器上使用 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

关于hive - pyhs2/hive 没有文件匹配路径文件和文件存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27364165/

相关文章:

配置单元中的日期差异,差异应在 hh :mm:ss 中

configuration - Hadoop/Hive 集群。只有一个节点利用率

hadoop - 使用 HADOOP 进行卫星图像处理

hadoop - 如何使用不同的名称将文件 "file1.txt"从本地复制到 hadoop?

hadoop - 什么是 "Hadoop"- Hadoop 的定义?

hadoop - 将配置单元表标记为已复制/较小

hadoop - MAX 中的 NULL,HIVE 中的 MIN 函数

python - 如何访问本地计算机所在的不同服务器上的hadoop文件系统上的文件?

hadoop - 从 Hadoop Streaming 读取 HDFS 上的 Snappy 压缩数据

hadoop - HDFS 文件夹到键值配置单元表