Drill可以查询打开的HDFS目录吗?

时间:2017-01-04 04:43:12

标签: hive apache-drill

我通过使用Drill成功查询HIVE和HBase表。在我的用例中,我从Storm获取数据到HDFS目录,对于该目录我正在创建Hive结构并使用Hive和Drill查询该数据。每当风暴正在写数据进入该目录(意味着打开目录并将数据写入hdfs)然后钻取不能查询该hive表,它给出了错误,

Failed with exception java.io.IOException:java.io.IOException: Cannot obtain block length for LocatedBlock{BP-517438351-192.168.1.136-1475035616867:blk_1073793923_53182; getBlockSize()=0; corrupt=false; offset=0; locs=[127.0.0.1:50010]; storageIDs=[DS-be58a5f4-58d9-4c3c-8138-ce18ffa10ef8]; storageTypes=[DISK]}

如果我们停止写入,那么钻取能够查询该hive表。在这两种情况下,hive都正常工作。我无法找到原因。

任何人都可以告诉我,Drill可以查询打开的HDFS文件或目录吗?我尝试了很多但没有得到任何相关信息。

1 个答案:

答案 0 :(得分:0)

从技术上讲,任何文件系统(ext2,ext3或hdfs)都应该与读/写一致。将数据写入目录时,文件系统由一个进程设置为写入模式,并且不能为另一个进程提供读取权限。即使您强制读取数据,读取过程也会获得不一致的数据。 这就是原因,任何文件/目录在处于写入模式时都可能无法获得读取权限。在我看来,在hdfs中,当另一个进程写入同一文件时,您可能无法执行读取查询。