2014-10-14 5 views
1

sqoop을 사용하여 Oracle에서 하이브로 데이터를 가져 오려고합니다.
아래 명령을 한 번 사용 했으므로 기존 데이터를 새 데이터로 덮어 쓰려고합니다 (Daily Action).
이 명령을 다시 실행했습니다.하이브 외부 테이블

sqoop import --connect jdbc:oracle:thin:@UK01WRS6014:2184:WWSYOIT1 
--username HIVE --password hive --table OIDS.ALLOCATION_SESSION_DIMN 
--hive-overwrite --hive-database OI_DB --hive-table ALLOCATION_SESSION_DIMN 

하지만 오류 파일이 이미 존재하는 무엇입니까 :

14/10/14 07:43:59 ERROR security.UserGroupInformation: 
PriviledgedActionException as:axchat 
(auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: 
Output directory 
hdfs://uslibeiadg004.aceina.com:8020/user/axchat/OIDS.ALLOCATION_SESSION_DIMN 
already exists 

내가 있었다 하이브에 모든 외부 테이블을 만든 테이블. mapreduce와 마찬가지로 동일한 명령을 실행할 때마다 해당 파일을 삭제해야합니까?

도움을 주시면 감사하겠습니다.

답변

1

EXTERNAL 테이블에서 삭제할 때 하이브 (Hive) 저장소의 개체 만 삭제합니다. 해당 테이블이 겹쳐있는 파일은 삭제하지 않습니다. 비 외부 테이블은 하이브에 속해 있으며, 삭제되면 메타 스토어 - HDFS 데이터가 제거됩니다.

따라서 HDFS 데이터를 명시 적으로 삭제하거나 하이브에 내부 테이블로 정의 할 수 있습니다.

+0

필자는 하이브에 외부 테이블 구조를 만든 다음 - 하이브 - 덮어 쓰기를 사용하여 이러한 외부 테이블에 데이터를 가져 오기 때문에. 왜 FileAlreadyExists 오류가 나는지 모릅니다. 그것은 그것을 덮어 쓴 이후로 오류를 제공해서는 안됩니다. 나 맞아 ? – aiman

+1

하이브를 덮어 쓰지 만 hdfs를 덮어 쓰지 않았습니다. – davek

+0

@devek - 해당 외부 테이블을 삭제하고 관리되는 테이블을 다시 만들고 n 가져 오기 데이터를로드하면 잘로드됩니다. 다시 --hive-overwrite를 사용하여 데이터를 가져 오면 FileAlreadyExists 오류가 발생하지 않아야합니다. 내가 맞습니까? – aiman

관련 문제