[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.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.테이블을 만들 때 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로 저장되었습니다.
from https://stackoverflow.com/questions/44443697/difference-between-stored-as-inputformat-outputformat-and-stored-as-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 실행중인 응용 프로그램에서 사용되는 컨테이너 및 VC 수를 가져 오는 YARN 셸 명령 (0) | 2019.07.28 |
---|---|
[HADOOP] PHP의 Hive / Thrift를 통한 데이터베이스 쿼리가 작동하지 않습니다. (0) | 2019.07.28 |
[HADOOP] 실행시 hadoop 페이지 랭크 오류 (0) | 2019.07.28 |
[HADOOP] Hadoop 2.5.0에서 실행중인 데이터 노드 데몬 (0) | 2019.07.28 |
[HADOOP] GROUP BY를 사용하여 단일 열 필드 연결 (0) | 2019.07.28 |