Apache Pig的一些基础概念及用法总结(1)

时间:2022-03-10 11:58:59

19 条评论

添加你的评论
  1. chali

    程序如下:
    register LzoPigStorage.jar
    A = load ‘data.txt’ using PigStorage(‘;’);
    store A into ‘data222′ using com.twitter.elephantbird.pig.store.LzoPigStorage();
    出现错误如下:
    ERROR org.apache.pig.tools.grunt.Grunt – ERROR 2998: Unhandled internal error. com/twitter/elephantbird/mapreduce/input/LzoTextInputFormat

    请问我该如何解决?求指导

    回复
    • learnhard

      我建议你先从elephant-bird学起吧,这个问题我一眼看不出是什么原因,深究起来估计也不是几个回复就可以搞定的,等你在Hadoop环境中(包括Pig)配置好了LZO,可以用Java程序通过elephant-bird读取LZO压缩的数据了,问题就解决得差不多了,想靠问我来解决所有这些问题是不现实的。至少我所在的team当时解决各种各样的问题都是用Google以及自己试验解决的,整个架构整合起来花的时间不算少的。我只能建议你多Google了

      回复
  2. juneey

    hbase-0.90.4-cdh3u3;hadoop-0.20.2-cdh3u3;zookeeper-3.3.4-cdh3u3;pig-0.10.0;hive-0.8.0-bin
    这是我的配置,怎么Pig不能操作HBase数据,提示错误为:ERROR org.apache.hadoop.hbase.mapreduce.TableOutputFormat – org.apache.hadoop.hbase.NotServingRegionException: org.apache.hadoop.hbase.NotServingRegionException: Region is not online: -ROOT-,,0

    该怎样解决???

    回复
  3. juneey

    请问,能不能把Pig操作HBase数据那部分说的再详细点,包括应该怎么配置。

    回复
  4. learnhard

    to tewilove:
    问题1:还是那个回答,我没有load过HBase的数据,所以无法回答你。

    问题2:我的方法比较笨,两步走——如果你的每一行都是“((a,1),(b,1),(c,3))”这样的字符串(最前端包含两个左括号,最右端包含两个右括号),那么,我是先把每一行拆成N行类似于“c,3”这样的字符串,最后得到类似于这样的N行:
    a,1
    b,2
    a,1
    b,1
    c,3
    c,2
    STORE到磁盘上之后,再用写第二个Pig脚本来统计。由于被拆成了N行最简单的形式,所以统计起来就非常容易了。
    拆成N行我是用了正则替换的方法:
    A = LOAD ‘data.txt’ AS (col: chararray);
    A1 = FOREACH A GENERATE REPLACE(col, ‘\\(\\(‘, ‘\\(‘) AS col;
    A2 = FOREACH A1 GENERATE REPLACE(col, ‘\\)\\)’, ‘\\)’) AS col;

    B = FOREACH A2 GENERATE REPLACE(col, ‘\\),\\(‘, ‘\\)\n\\(‘) AS col;
    C = FOREACH B GENERATE REPLACE(col, ‘\\(‘, ”) AS col;
    D = FOREACH C GENERATE REPLACE(col, ‘\\)’, ”) AS col;
    STORE D INTO ‘/home/abc/temp’;

    第二个job:
    A = LOAD ‘/home/abc/temp’ AS (col1: chararray, col2: int) USING PigStorage(‘,’);
    B = GROUP A BY col1;
    C = FOREACH B GENERATE FLATTEN(group), COUNT(A);
    DUMP C;

    回复
    • tewilove

      谢谢,我试试看。第一个的错误原因是分隔符是空格,逗号会算进变量名。第二个简化点说就是怎么把一个chararray按规则展开成bag,似乎可以写UDF看看。

      回复
  5. tewilove

    数据格式为((a1,b1),(a2,b2),…),数量不确定,位于一个HBase的column内,这样的schema怎么定义呢。

    回复
  6. june_1201

    楼主,总结的不错,非常受益!
    学习精神和分享精神值得钦佩!