指向本地文件的AvroStorage schema_uri不起作用

时间:2013-12-24 18:23:45

标签: hadoop apache-pig avro

我正在使用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参数中嵌入架构字符串?

1 个答案:

答案 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}');