从ES加载数据并使用pig将其作为avro存储在HDFS中

时间:2017-04-27 09:45:34

标签: apache-pig apache-pig-grunt

我在ElasticSearch上有一些我需要在HDFS上发送的数据。我尝试使用猪(这是我第一次使用它),但我有一些问题需要为我的数据定义正确的模式。

首先,我尝试使用带有'es.output.json=true'的选项org.elasticsearch.hadoop.pig.EsStorage加载JSON,我可以正确加载/转储数据,并使用{{1}将它们作为JSON保存到HDFS }。稍后,在HIVE上定义外部表,我可以查询这些数据。这是正常工作的完整示例(我从代码中删除了所有SSL属性):

STORE A INTO 'hdfs://path/to/store';

如何将我的数据存储为AVRO到HDFS?我想我需要使用REGISTER /path/to/commons-httpclient-3.1.jar; REGISTER /path/to/elasticsearch-hadoop-5.3.0.jar; A = LOAD 'my-index/log' USING org.elasticsearch.hadoop.pig.EsStorage( 'es.nodes=https://addr1:port,https://addr2:port2,https://addr3:port3', 'es.query=?q=*', 'es.output.json=true'); STORE A INTO 'hdfs://path/to/store'; ,但是我还应该定义一个加载数据的模式,或者JSON就足够了?我尝试使用AvroStorage命令定义架构并设置LOAD...USING...AS而不是es.mapping.date.rich=false(我的数据非常复杂,包含地图和类似地图的地图),但它没有&#39}。工作。我不确定问题是在语法上还是在方法本身中。很高兴有一个正确的方向提示。

更新

这是我尝试使用es.output.json=true的示例。我的问题是,如果一个字段为空,则所有字段的顺序都是错误的。

es.mapping.date.rich=false

1 个答案:

答案 0 :(得分:0)

对于未来的读者,我决定使用spark,因为它比pig快得多。要在hdfs上保存avro个文件,请使用databrick库。