2016-09-26 1 views
0

우리는수 없습니다 "error_error는 ..."예외

  1. 는 HDFS 위치 user/hive/warehouse/orders/ MySQL에서 테이블을 수입, 아래의 단계를 따라했습니다 테이블 스키마

    mysql> describe orders; 
    +-------------------+-------------+------+-----+---------+-------+ 
    | Field    | Type  | Null | Key | Default | Extra | 
    +-------------------+-------------+------+-----+---------+-------+ 
    | order_id   | int(11)  | YES |  | NULL |  | 
    | order_date  | varchar(30) | YES |  | NULL |  | 
    | order_customer_id | int(11)  | YES |  | NULL |  | 
    | order_items  | varchar(30) | YES |  | NULL |  | 
    +-------------------+-------------+------+-----+---------+-------+ 
    
  2. (1)과 동일한 데이터를 사용하여 하이브에 외부 테이블을 만들었습니다.

    CREATE EXTERNAL TABLE orders 
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 
    STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
    OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' 
    LOCATION 'hdfs:///user/hive/warehouse/retail_stage.db/orders' 
    TBLPROPERTIES ('avro.schema.url'='hdfs://host_name//tmp/sqoop-cloudera/compile/bb8e849c53ab9ceb0ddec7441115125d/orders.avsc'); 
    

    Sqoop을 명령 :

    sqoop import \ 
        --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \ 
        --username=root \ 
        --password=cloudera \ 
        --table orders \ 
        --target-dir /user/hive/warehouse/retail_stage.db/orders \ 
        --as-avrodatafile \ 
        --split-by order_id 
    
  3. 오류를 반환 많은 조합을 시도했지만 실패, 형식의 주문을 설명하십시오.

    hive> describe orders; 
    OK 
    error_error_error_error_error_error_error string     from deserializer 
    cannot_determine_schema string     from deserializer 
    check     string     from deserializer 
    schema     string     from deserializer 
    url      string     from deserializer 
    and      string     from deserializer 
    literal     string     from deserializer 
    Time taken: 1.15 seconds, Fetched: 7 row(s) 
    

같은 일이 --as-avrodatafile의 경우 오류를 던지고로 --as-textfile, 어디에서 일했다.

일부 스택 오버플로를 참조했지만 해결할 수 없었습니다. 어떤 생각?

답변

0

TBLPROPERTIES의 avro 스키마 파일에 대한 참조를 확인해야한다고 생각합니다.

다음 해결이 가능합니까?

HDFS DFS - 고양이 HDFS : //host_name//tmp/sqoop-cloudera/compile/bb8e849c53ab9ceb0ddec7441115125d/orders.avsc

나는 정확한 시나리오를 작성하고 하이브 테이블에서 선택 할 수 있었다.

hive> CREATE EXTERNAL TABLE sqoop_test 
    > COMMENT "A table backed by Avro data with the Avro schema stored in HDFS" 
    > ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'  
    > STORED AS 
    > INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'  
> OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' 
> LOCATION '/user/cloudera/categories/'  
> TBLPROPERTIES 
> ('avro.schema.url'='hdfs:///user/cloudera/categories.avsc') 
> ; 

OK 시간 촬영 : 1.471 초

hive> select * from sqoop_test; 
OK 
1 2 Football 
2 2 Soccer 
3 2 Baseball & Softball 
관련 문제