【问题标题】:Running Pig query over data stored in Hive对存储在 Hive 中的数据运行 Pig 查询
【发布时间】:2011-04-21 07:50:22
【问题描述】:

我想知道如何运行以 Hive 格式存储的 Pig 查询。我已将 Hive 配置为存储压缩数据(使用本教程 http://wiki.apache.org/hadoop/Hive/CompressedStorage)。

在此之前,我只是使用带有 Hive 分隔符 (^A) 的普通 Pig 加载函数。但是现在 Hive 将数据存储在经过压缩的序列文件中。使用哪个加载函数?

注意不需要像这里提到的那样紧密集成:Using Hive with Pig,只是使用什么加载函数来读取 Hive 生成​​的压缩序列文件。

感谢大家的回答。

【问题讨论】:

    标签: hadoop apache-pig hive


    【解决方案1】:

    这是我发现的: 如果您将数据存储为 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');
    

    要从序列文件中加载数据,您必须使用 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);
    

    这不适用于 Pig 0.7,因为它无法读取 BytesWritable 类型并将其转换为 Pig 类型,并且您会收到以下异常:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 2016-05-02
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多