我在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
答案 0 :(得分:0)
对于未来的读者,我决定使用spark
,因为它比pig
快得多。要在hdfs上保存avro
个文件,请使用databrick
库。