在 PIg 脚本中对 Avro 文件使用 UDF
Using UDF on Avro file in PIg script
我正在使用 Pig 将 HDFS 上的 avro 文件导入到 HBase,但我必须将用户定义函数 (UDF) 应用到行 ID。我正在使用来自 Apache DataFU
的 SHA 函数
register datafu-pig-incubating-1.3.0.jar
define SHA datafu.pig.hash.SHA();
set hbase.zookeeper.quorum 'localhost';
set mapreduce.fileoutputcommitter.marksuccessfuljobs 'false';
avro = LOAD '/user/myuser/avro/' USING AvroStorage();
partitioned = FOREACH avro GENERATE SHA(ROW_ID) as key,VALUE_1,VALUE_2;
STORE partitioned INTO 'hbase://MYTABLE' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('cf:value_1 cf:value_2');
我尝试了 DataFU 网站上的示例脚本,它们成功完成,如果我从脚本中删除 SHA() 调用,它就会完成,那我还缺少什么?
算了,都是我自己的错。 SHA() 调用需要一个字符串参数,ROW_ID 被定义为一个 long,我为 ROW_ID 添加了一个转换到 chararray 并且它现在可以工作
如果我 运行 将脚本作为 oozie 工作流程的一部分,那么日志中没有错误,但是如果我将它逐行输入到 grunt shell 中,我会收到一条错误消息在 "partitioned = " 行后
对于遇到 UDF 问题的任何人,我建议首先在 shell
中逐行输入脚本
我正在使用 Pig 将 HDFS 上的 avro 文件导入到 HBase,但我必须将用户定义函数 (UDF) 应用到行 ID。我正在使用来自 Apache DataFU
的 SHA 函数register datafu-pig-incubating-1.3.0.jar
define SHA datafu.pig.hash.SHA();
set hbase.zookeeper.quorum 'localhost';
set mapreduce.fileoutputcommitter.marksuccessfuljobs 'false';
avro = LOAD '/user/myuser/avro/' USING AvroStorage();
partitioned = FOREACH avro GENERATE SHA(ROW_ID) as key,VALUE_1,VALUE_2;
STORE partitioned INTO 'hbase://MYTABLE' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('cf:value_1 cf:value_2');
我尝试了 DataFU 网站上的示例脚本,它们成功完成,如果我从脚本中删除 SHA() 调用,它就会完成,那我还缺少什么?
算了,都是我自己的错。 SHA() 调用需要一个字符串参数,ROW_ID 被定义为一个 long,我为 ROW_ID 添加了一个转换到 chararray 并且它现在可以工作
如果我 运行 将脚本作为 oozie 工作流程的一部分,那么日志中没有错误,但是如果我将它逐行输入到 grunt shell 中,我会收到一条错误消息在 "partitioned = " 行后
对于遇到 UDF 问题的任何人,我建议首先在 shell
中逐行输入脚本