drill可以查询打开的hdfs目录吗?

yeotifhr  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(346)

我使用drill成功地查询了hive和hbase表。在我的用例中,我从storm获取数据到hdfs目录,对于该目录,我正在创建配置单元结构,并使用配置单元和drill查询该数据。每当storm将数据写入该目录(意味着打开目录并将数据写入hdfs)时,drill就无法查询该配置单元表,它给出的错误为,

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]}

如果我们停止编写,那么drill可以查询配置单元表。在这两种情况下,配置单元都正常工作。我无法找到原因。
有谁能告诉我,drill是否可以查询打开的hdfs文件或目录?我试了很多次,但没有得到任何东西。

uz75evzq

uz75evzq1#

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

相关问题