我正在这样使用AvroStorage:

STORE alias INTO '$OUTPUT'
    USING org.apache.pig.piggybank.storage.avro.AvroStorage('{
    "index" : 1,
    "schema_uri": "file://path/schema.avsc"}');

因此,很明显要从本地文件系统而不是HDFS中获取schema.avsc。

它可在伪分布式集群中工作,但在具有模式文件java.io.FileNotFoundException的普通集群中无法运行
看起来这是在后端发生的。

我认为这是因为与我从中运行Pig脚本的节点不同,节点上AvroStorage的后端调用无法在本地文件系统中找到该文件。
为什么它不能使用前端调用中的模式文件?
这是否意味着我仅限于schema_uri的HDFS位置或将模式字符串嵌入到AvroStorage参数中?

最佳答案

事实证明,这是piggybank对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}');

关于hadoop - 指向本地文件的AvroStorage schema_uri不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20765260/

10-11 03:53