2011-04-21 3 views
6

하이브 포맷으로 저장된 돼지 쿼리를 실행하는 방법을 알고 싶습니다. 압축 된 데이터를 저장하도록 하이브를 구성했습니다 (이 자습서 http://wiki.apache.org/hadoop/Hive/CompressedStorage 사용).하이브에 저장된 데이터에 대해 돼지 쿼리 실행

이전에는 하이브의 구분 기호 (^ A)를 사용하여 정상 돼지 부하 기능을 사용했습니다. 그러나 이제 Hive는 데이터를 압축하여 시퀀스 파일에 저장합니다. 어느 하중 기능을 사용할 것인가?

하이브가 생성 한 압축 된 시퀀스 파일을 읽는 데 사용할로드 기능은 여기에 언급 된 것과 같이 가까이 통합 할 필요가 없습니다 (Using Hive with Pig).

모든 답변 주셔서 감사합니다.

답변

5

다음은 내가 알아 낸 것입니다. 데이터를 RCFile로 저장하면 HiveColumnarLoader를 사용하는 것이 좋습니다. 이를 사용하여 테이블을로드하려면 먼저 일부 항아리를 등록해야합니다

register /srv/pigs/piggybank.jar 
register /usr/lib/hive/lib/hive-exec-0.5.0.jar 
register /usr/lib/hive/lib/hive-common-0.5.0.jar 

a = LOAD '/user/hive/warehouse/table' USING org.apache.pig.piggybank.storage.HiveColumnarLoader('ts int, user_id int, url string'); 

이 순서의 데이터는 (앞의 예에서와 같이) 돼지 저금통을 사용할 필요가 파일을로드합니다.

register /srv/pigs/piggybank.jar 
DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader(); 
a = LOAD '/user/hive/warehouse/table' USING SequenceFileLoader AS (int, int); 

이 돼지 0.7이 BytesWritable 유형을 읽고 돼지 형식으로 캐스팅 할 수 없습니다 때문에 작동하지 않습니다 그리고 당신은이 예외 얻을 :으로 piggybank에서 SequenceFile 로더는 압축 된 파일을 처리해야

2011-07-01 10:30:08,589 WARN org.apache.pig.piggybank.storage.SequenceFileLoader: Unable to translate key class org.apache.hadoop.io.BytesWritable to a Pig datatype 
2011-07-01 10:30:08,625 WARN org.apache.hadoop.mapred.Child: Error running child 
org.apache.pig.backend.BackendException: ERROR 0: Unable to translate class org.apache.hadoop.io.BytesWritable to a Pig datatype 
    at org.apache.pig.piggybank.storage.SequenceFileLoader.setKeyType(SequenceFileLoader.java:78) 
    at org.apache.pig.piggybank.storage.SequenceFileLoader.getNext(SequenceFileLoader.java:132) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.nextKeyValue(PigRecordReader.java:142) 
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:448) 
    at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67) 
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143) 
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:639) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:315) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1063) 
    at org.apache.hadoop.mapred.Child.main(Child.java:211) 

을 piggybank를 컴파일하는 방법은 다음과 같습니다. Unable to build piggybank -> /home/build/ivy/lib does not exist

관련 문제