복붙노트

[HADOOP] 시퀀스 파일로 저장된 것을 사용하여 생성 된 하이브 테이블에 시퀀스 파일 데이터로드 실패

HADOOP

시퀀스 파일로 저장된 것을 사용하여 생성 된 하이브 테이블에 시퀀스 파일 데이터로드 실패

아래 sqoop import 명령을 사용하여 MySQL에서 HDFS로 컨텐츠를 시퀀스 파일로 가져 오기

sqoop import --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" 
    --username retail_dba --password cloudera 
    --table orders 
    --target-dir /user/cloudera/sqoop_import_seq/orders 
    --as-sequencefile 
    --lines-terminated-by '\n' --fields-terminated-by ','

그런 다음 아래 명령을 사용하여 하이브 테이블을 만듭니다.

create table orders_seq(order_id int,order_date string,order_customer_id int,order_status string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '|' 
STORED AS SEQUENCEFILE

그러나 첫 번째 명령에서 얻은 시퀀스 데이터를 아래 명령을 사용하여 하이브 테이블에로드하려고했을 때

LOAD DATA INPATH '/user/cloudera/sqoop_import_seq/orders' INTO TABLE orders_seq;

아래 오류가 발생했습니다.

Loading data to table practice.orders_seq
Failed with exception java.lang.RuntimeException: java.io.IOException: WritableName can't load class: orders
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask

내가 어디로 잘못 가고 있니?

해결법

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

    1.우선, 해당 형식의 데이터가 필요합니까?

    우선, 해당 형식의 데이터가 필요합니까?

    해당 형식의 데이터가 있어야한다고 가정 해 봅시다. 데이터로드 명령이 필요하지 않습니다. sqoop가 데이터 가져 오기를 마치면 데이터를 sqoop하는 동일한 디렉토리를 가리키는 Hive 테이블을 작성하면됩니다.

    스크립트에서 한 쪽 참고 :

    create table orders_seq(order_id int,order_date string,order_customer_id int,order_status string)  
    ROW FORMAT DELIMITED  
    FIELDS TERMINATED BY '|'  
    STORED AS SEQUENCEFILE
    

    sqoop 명령은 다음과 같이 말합니다 : --fields-terminated-by ','그러나 테이블을 만들 때 사용중인 필드 : FIELDS TERMINATED BY '|'

    내 경험상 가장 좋은 방법은 데이터를 avro로 스 as 핑하는 것입니다. 그러면 자동으로 avro-schema가 생성됩니다. 그런 다음 이전에 생성 한 스키마 (AvroSerde)와 sqooping 프로세스에서 얻은 데이터를 저장 한 위치를 사용하여 Hive 테이블을 만들어야합니다.

  2. from https://stackoverflow.com/questions/42050548/loading-sequence-file-data-into-hive-table-created-using-stored-as-sequence-file by cc-by-sa and MIT license