업데이트 : 좋아, 그것은 내가 새로운이다 import org.apache.hadoop.mapreduce
대 이전 인 InputFormat
API의 최신 버전 (import org.apache.hadoop.mapred
를 사용하고 있기 때문에 아래에 작동하지 않는이 이유를 밝혀). 내가 가진 문제는 기존 코드를 새로운 코드로 이식하는 것이다. 누구든지 이전 API를 사용하여 다중 회선 InputFormat
을 작성한 경험이 있습니까?사용자 정의 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)를 확장 않습니다이다.
하이브는 org.apache.hadoop.hive.ql.io.HiveInputFormat
을 대신 확장해야합니까? 그렇다면 InputFormat 및 RecordReader에 대한 기존 클래스 코드를 다시 작성해야합니까, 아니면 효과적으로 확장 한 클래스를 변경할 수 있습니까?