복붙노트

[HADOOP] 하이브에서 'InputFormat, OutputFormat'및 'Saveed as'의 차이점

HADOOP

하이브에서 'InputFormat, OutputFormat'및 'Saveed as'의 차이점

show create table을 실행하고 테이블이 ORC 인 경우 결과 create table 문을 실행할 때 문제가 발생합니다.

show create table을 사용하면 다음과 같은 결과를 얻을 수 있습니다.

STORED AS INPUTFORMAT
  ‘org.apache.hadoop.hive.ql.io.orc.OrcInputFormat’
OUTPUTFORMAT
  ‘org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat’

그러나 이러한 절들로 테이블을 생성하면 선택할 때 캐스팅 오류가 발생합니다. 오류 :

이 문제를 해결하려면 CREATE TABLE 문을 STORED AS ORC로 변경하십시오. 그러나 그 대답이 비슷한 질문에서 말했듯이 : Hive에서 'InputFormat, OutputFormat'및 'Stored as'의 차이점은 무엇입니까? . 나는 이유를 알 수 없다.

해결법

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

    1.STORED AS는 다음 세 가지를 의미합니다.

    STORED AS는 다음 세 가지를 의미합니다.

    마지막 2 개만 정의 했으므로 SERDE는 hive.default.serde로 정의해야합니다.

    hive.default.serde

    set hive.default.serde;
    
    hive.default.serde=org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
    

    STORED AS ORC

    create table mytable (i int) 
    stored as orc;
    
    show create table mytable;
    

    SERDE는 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'입니다.

    CREATE TABLE `mytable`(
      `i` int)
    ROW FORMAT SERDE 
      'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
    LOCATION
      'file:/home/cloudera/local_db/mytable'
    TBLPROPERTIES (
      'COLUMN_STATS_ACCURATE'='{\"BASIC_STATS\":\"true\"}', 
      'numFiles'='0', 
      'numRows'='0', 
      'rawDataSize'='0', 
      'totalSize'='0', 
      'transient_lastDdlTime'='1496982059')
    

    INPUTFORMAT ... OUTPUTFORMAT ...으로 저장 됨

    create table mytable2 (i int) 
    STORED AS 
    INPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
    ;
    
    show create table mytable2
    ;
    

    SERDE는 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'입니다.

    CREATE TABLE `mytable2`(
      `i` int)
    ROW FORMAT SERDE 
      'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
    LOCATION
      'file:/home/cloudera/local_db/mytable2'
    TBLPROPERTIES (
      'COLUMN_STATS_ACCURATE'='{\"BASIC_STATS\":\"true\"}', 
      'numFiles'='0', 
      'numRows'='0', 
      'rawDataSize'='0', 
      'totalSize'='0', 
      'transient_lastDdlTime'='1496982426')
    
  2. ==============================

    2.테이블을 만들 때 STORED AS에 INPUTFORMAT, OUTPUTFORMAT, SERDE를 지정합니다. Hive를 사용하면 레코드 형식을 파일 형식과 구분할 수 있습니다. INPUTFORMAT, OUTPUTFORMAT, SERDE에 대한 사용자 정의 클래스를 제공 할 수 있습니다. 세부 사항보기 : http://www.dummies.com/programming/big-data/hadoop/defining-table-record-formats-in-hive/

    테이블을 만들 때 STORED AS에 INPUTFORMAT, OUTPUTFORMAT, SERDE를 지정합니다. Hive를 사용하면 레코드 형식을 파일 형식과 구분할 수 있습니다. INPUTFORMAT, OUTPUTFORMAT, SERDE에 대한 사용자 정의 클래스를 제공 할 수 있습니다. 세부 사항보기 : http://www.dummies.com/programming/big-data/hadoop/defining-table-record-formats-in-hive/

    또는 단순히 STORED AS ORC 또는 STORED AS TEXTFILE과 같이 작성할 수 있습니다.     STORED AS ORC 문은 이미 INPUTFORMAT, OUTPUTFORMAT 및 SERDE에 대해주의를 기울입니다. 따라서 INPUTFORMAT, OUTPUTFORMAT, SERDE에 대해 긴 정규화 된 Java 클래스 이름을 쓰지 않아도됩니다. 대신 ORC로 저장되었습니다.

  3. from https://stackoverflow.com/questions/44443697/difference-between-stored-as-inputformat-outputformat-and-stored-as-in-hive by cc-by-sa and MIT license