복붙노트

[HADOOP] 하이브를 사용한 사용자 정의 InputFormat

HADOOP

하이브를 사용한 사용자 정의 InputFormat

업데이트 : 알았어, 내가 아래 InputFormat API (가져 오기 org.apache.hadoop.mapred 오래된 버전 대 org.apache.hadoop 가져 오기 새 버전을 사용하고 있기 때문에 작동하지 않는 이유가 밝혀졌습니다. mapreduce는 새로운 것이다). 내가 가진 문제는 기존 코드를 새로운 코드로 이식하는 것입니다. 누구든지 이전 API를 사용하여 여러 줄의 InputFormat을 작성한 경험이 있습니까?

Hadoop / Hive를 사용하여 Omniture의 데이터 로그 파일을 처리하려고합니다. 파일 형식은 탭으로 구분되며 대부분은 매우 단순하지만 백 슬래시 (\\ n 및 \\ t)로 이스케이프 된 필드 내에 여러 개의 새로운 행 및 탭을 가질 수 있습니다. 결과적으로 하이브가 탭에서 분할을 시도 할 때 여러 개의 줄 바꿈을 처리하고 해당 탭을 공백으로 변환하는 자체 InputFormat을 만드는 것으로 선택했습니다. 난 그냥 하이브에있는 테이블에 일부 샘플 데이터를로드 시도하고 다음과 같은 오류가 발생했습니다 :

CREATE TABLE (...)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 'OmnitureDataFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat';

FAILED: Error in semantic analysis: line 1:14 Input Format must implement InputFormat omniture_hit_data

이상하게도 내 입력 형식은 org.apache.hadoop.mapreduce.lib.input.TextInputFormat (https://gist.github.com/4a380409cd1497602906)을 확장합니다.

Hive가 대신 org.apache.hadoop.hive.ql.io.HiveInputFormat을 확장해야합니까? 그렇다면 InputFormat 및 RecordReader에 대한 기존 클래스 코드를 다시 작성해야합니까, 아니면 효과적으로 확장하는 클래스를 변경할 수 있습니까?

해결법

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

    1.LineReader 및 TextInputFormat 코드를 살펴본 후이 사실을 알 수 있습니다. EscapedLineReader뿐만 아니라 이것을 처리 할 새로운 InputFormat을 생성했습니다.

    LineReader 및 TextInputFormat 코드를 살펴본 후이 사실을 알 수 있습니다. EscapedLineReader뿐만 아니라 이것을 처리 할 새로운 InputFormat을 생성했습니다.

    https://github.com/msukmanowsky/OmnitureDataFileInputFormat

  2. from https://stackoverflow.com/questions/7692994/custom-inputformat-with-hive by cc-by-sa and MIT license