指向本地文件的 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
猪:无法将 java.lang.String 转换为 org.apache.avro.util.Utf8 与 STORE 中的 AvroStorage