2017-01-04 5 views
0

나는 Drill.In을 사용하여 성공적으로 HIVE 및 HBase 테이블을 쿼리합니다. 내 usecase. Hive 구조를 만들고 해당 데이터를 Hive 및 Drill을 사용하여 쿼리하는 HDFS 디렉터리에 HDFS 디렉터리로 데이터를 보내고 있습니다. 이 디렉토리에 우리가 정지 작성하는 경우 드릴 것을 조회 할 수드릴은 열려있는 HDFS 디렉토리에서 질의 할 수 있습니까?

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

, 다음 드릴이 같은 오류를주고, 그 하이브 테이블을 쿼리 할 수 ​​없습니다 (디렉토리가 열리고 HDFS에 데이터를 기록 수단) 하이브 테이블. 두 경우 모두 하이브가 제대로 작동합니다. 원인을 찾을 수 없습니다.

아무나 말해 주시겠습니까? Drill은 열어 본 HDFS 파일이나 디렉토리를 쿼리 할 수 ​​있습니까?

+0

아무도 아이디어를 공유하지 마십시오 ................. – user6608138

+0

드릴을 사용하여 스트리밍 HDFS 디렉토리를 쿼리하는 방법. – user6608138

답변

0

기술적으로 모든 파일 시스템 (ext2, ext3 또는 hdfs)은 읽기/쓰기와 일관성이 있어야합니다. 디렉토리에 데이터를 쓸 때 파일 시스템은 한 프로세스에 의해 쓰기 모드로 설정되고 다른 프로세스에 대한 읽기 액세스 권한을 부여 할 수 없습니다. 데이터를 읽도록 강요하더라도 읽기 과정에서 일치하지 않는 데이터가 발생합니다. 이것은 파일/디렉토리가 쓰기 모드 일 때 읽기 액세스 권한을 얻지 못할 수있는 이유입니다. 제 생각에는 hdfs에서 다른 프로세스가 같은 파일에 쓰고있을 때 읽기 쿼리를 실행할 수 없습니다.

+0

오류에서 hdfs가 아파치 드릴에 대한 메모리 블록에 대한 액세스를 제공하지 않는다는 것이 매우 분명합니다. 스톰이 데이터 쓰기를 중지 할 때도 동일한 쿼리를 시도하십시오. – testtech

+0

그래서 내 usecase에서 한 번에 둘 다 사용할 수 없습니다. – user6608138

+0

나는 아파치 훈련 전문가가 아니지만 내 이해에 따라 열린 파일에 아파치 드릴을 사용하지 못할 수도 있습니다 ... – testtech