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

Posted

技术标签:

【中文标题】指向本地文件的 AvroStorage schema_uri 不起作用【英文标题】:AvroStorage schema_uri pointing to local file doesn't work 【发布时间】:2013-12-24 18:23:44 【问题描述】:

我正在像这样使用 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 看起来这发生在后端。

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

【问题讨论】:

【参考方案1】:

原来是 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');

【讨论】:

以上是关于指向本地文件的 AvroStorage schema_uri 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Pig:使用 AvroStorage 加载会引发“无法从 loadFunc 获取架构”异常

Pig AvroStorage + 记录中不支持的类型:类 org.apache.pig.data.DataByteArray

在猪中使用 AvroStorage()

猪:无法将 java.lang.String 转换为 org.apache.avro.util.Utf8 与 STORE 中的 AvroStorage

如何从 Json schem 文件创建 DataFrame Schema

@font-face 指向本地文件的 url