복붙노트

[HADOOP] 하이브 테이블 Sqoop을 수출에 문제는 타임 스탬프에 의해 분할

HADOOP

하이브 테이블 Sqoop을 수출에 문제는 타임 스탬프에 의해 분할

나는 타임 스탬프에 의해 분할 된 것 하이브 테이블을 내보낼 수 Sqoop을 드릴 수 없습니다.

나는 타임 스탬프에 의해 분할 된 것 하이브 테이블을 가지고있다. 이 생성하는 HDFS 경로는 내가 Sqoop을 가진 일으키는 문제라고 생각합니다 공백이 포함되어 있습니다.

FS -ls / MY_TABLE / 일 2013년 1월 28일 16시 31분 / 사용자 / 하이브 / 창고 = 2013년 1월 28일 00퍼센트 3A00 % 3A00

Sqoop을 수출에서의 오류 :

13/01/28 17시 18분 23초 오류 security.UserGroupInformation : PriviledgedActionException로 : 브랜든 (인증 : SIMPLE) 원인 : java.io.FileNotFoundException : 파일이 존재하지 않습니다 : / 사용자 / 하이브 / 창고 / MY_TABLE / 일 = 2012- 10-29 00퍼센트 3A00 % 3A00     org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsUpdateTimes에서 (FSNamesystem.java:1239)     org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt에서 (FSNamesystem.java:1192)     org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations에서 (FSNamesystem.java:1165)     org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations에서 (FSNamesystem.java:1147)     org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations에서 (NameNodeRpcServer.java:383)     org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations에서 (ClientNamenodeProtocolServerSideTranslatorPB.java:170)     에서 org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos $ ClientNamenodeProtocol $ 2.callBlockingMethod (ClientNamenodeProtocolProtos.java:44064)     org.apache.hadoop.ipc.ProtobufRpcEngine $ 서버 $ ProtoBufRpcInvoker.call에서 (ProtobufRpcEngine.java:453)     org.apache.hadoop.ipc.RPC $ Server.call (RPC.java:898)에서     org.apache.hadoop.ipc.Server $ 처리기 $의 1.run에서 (Server.java:1693)     org.apache.hadoop.ipc.Server $ 처리기 $의 1.run에서 (Server.java:1689)     java.security.AccessController.doPrivileged에서 (기본 방법)     javax.security.auth.Subject.doAs에서 (Subject.java:396)     org.apache.hadoop.security.UserGroupInformation.doAs에서 (UserGroupInformation.java:1332)     org.apache.hadoop.ipc.Server $ Handler.run에서 (Server.java:1687)

당신이 할 경우 FS -ls / 사용자 / 하이브 / 창고 / MY_TABLE / 일 = 2013년 1월 28일 00% 3A00 % 3A00 LS : / 사용자 / 하이브 / 창고 / MY_TABLE / 일 = 2013년 1월 28일 ': 해당 파일이나 디렉토리 LS : 00 % 3A00 % 3A00 ': 해당 파일이나 디렉토리

당신이 따옴표를 추가하면 그것은 작동 : 브랜든 자극 - 네임 노드 새로운 @ : ~ $의 때 fs -ls / 사용자 / 하이브 / 창고 / MY_TABLE / 일 = "2013년 1월 28일 00퍼센트 3A00 % 3A00" 발견 114 개 항목 -rw-R - r-- 사용이 브랜든의 슈퍼 그룹 4845 2013년 1월 28일 / MY_TABLE / 일 16시 반 / 사용자 / 하이브 / 창고 = 2013년 1월 28일 % 2천% 253A00 % 253A00 / 000000_0 ...

해결법

  1. ==============================

    1.그래서 당신은 무엇을 할 수 있습니다 :

    그래서 당신은 무엇을 할 수 있습니다 :

    하이브에서 모든 데이터를 선택하고 HDFS의 디렉토리에 기록

    (INSERT OVERWRITE DIRECTORY 사용 '..path를 ..'FROM a.column_n 테이블을 선택 a.column_1)

    와 Sqoop을 명령에 --export-DIR ..dir를 사용하여 디렉토리 위치를 지정합니다 ..

    이 도움이되기를 바랍니다.

  2. ==============================

    2.당신은 "/ 사용자 / 하이브 / 창고 / MY_TABLE / 일 = 2013년 1월 28일 *"로 시도 할 수 있습니다.

    당신은 "/ 사용자 / 하이브 / 창고 / MY_TABLE / 일 = 2013년 1월 28일 *"로 시도 할 수 있습니다.

  3. ==============================

    3.콜론 파일 이름 (:)이 Sqoop을 그것 (콜론로 변환되어 다시 경로를 읽으려고 할 때 나누었다는 Hex.But로 변환하여 작동이 JIRA에서 언급으로 HDFS 경로로 지원되지 않습니다 :) 따라서는 수 질수 그 path.I을 찾을 디렉토리 이름에서 시간 부분을 제거하고 again.Hope이 귀하의 질문에 대답하려고하는 것이 좋습니다.

    콜론 파일 이름 (:)이 Sqoop을 그것 (콜론로 변환되어 다시 경로를 읽으려고 할 때 나누었다는 Hex.But로 변환하여 작동이 JIRA에서 언급으로 HDFS 경로로 지원되지 않습니다 :) 따라서는 수 질수 그 path.I을 찾을 디렉토리 이름에서 시간 부분을 제거하고 again.Hope이 귀하의 질문에 대답하려고하는 것이 좋습니다.

  4. from https://stackoverflow.com/questions/14567746/issue-with-sqoop-export-with-hive-table-partitioned-by-timestamp by cc-by-sa and MIT license