복붙노트

[HADOOP] Hive에 저장된 데이터에 대해 돼지 쿼리 실행

HADOOP

Hive에 저장된 데이터에 대해 돼지 쿼리 실행

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

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

여기에 언급 된 것과 같이 밀접한 통합이 필요하지 않습니다. Hive를 돼지와 함께 사용하면 Hive가 생성 한 압축 된 시퀀스 파일을 읽는 데 사용할로드 기능 만 있습니다.

모든 해답을 가져 주셔서 감사합니다.

해결법

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

    1.여기에 내가 알아 낸 것이있다. 데이터를 RCFile로 저장하면 HiveColumnarLoader를 사용하는 것이 좋습니다. 이것을 사용하여 테이블을로드하려면 먼저 몇 개의 jar를 등록해야합니다.

    여기에 내가 알아 낸 것이있다. 데이터를 RCFile로 저장하면 HiveColumnarLoader를 사용하는 것이 좋습니다. 이것을 사용하여 테이블을로드하려면 먼저 몇 개의 jar를 등록해야합니다.

    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');
    

    Sequence 파일에서 데이터를로드하려면 PiggyBank를 사용해야합니다 (앞의 예와 같이). Piggybank의 SequenceFile 로더는 압축 파일을 처리해야합니다.

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

    이것은 BytesWritable 타입을 읽을 수없고 그것을 Pig 타입으로 변환 할 수 없기 때문에 Pig 0.7에서 작동하지 않으며이 예외가 발생합니다 :

    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를 컴파일하는 방법은 다음과 같습니다 : piggybank를 빌드 할 수 없습니다 -> / home / build / ivy / lib가 존재하지 않습니다

  2. from https://stackoverflow.com/questions/5741120/running-pig-query-over-data-stored-in-hive by cc-by-sa and MIT license