我正在使用AvroStorage:
STORE alias INTO '$OUTPUT'
USING org.apache.pig.piggybank.storage.avro.AvroStorage('{
"index" : 1,
"schema_uri": "file://path/schema.avsc"}');
因此,明确地从本地文件系统中获取schema.avsc,而不是HDFS。
它在伪分布式集群中工作,但在模式文件的java.io.FileNotFoundException的普通集群上失败 看起来这种情况发生在后端。
我认为这是因为AvroStorage在节点上的后端调用(与我运行pig脚本的节点不同)无法在本地文件系统中找到该文件。 为什么不能使用前端调用的模式文件? 这是否意味着我仅限于schema_uri的HDFS位置或使用在AvroStorage参数中嵌入架构字符串?
答案 0 :(得分:2)
原来,这是来自皮卡的AvroStorage的限制: http://www.mail-archive.com/user%40pig.apache.org/msg09000.html
目前我正在使用此解决方法:
%declare WORK_DIR `pwd`
%declare SCHEMA_LITERAL `cat $WORK_DIR/schema.avsc`
...
STORE inputs INTO 'output'
USING com.magnetic.org.apache.pig.piggybank.storage.avro.AvroStorage('{
"index" : 1,
"schema": $SCHEMA_LITERAL}');