通过hive将数据从hdfs索引到elasticsearch

pdkcd3nj  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(499)

我正在使用ElasticSearchforHadoop插件,以便通过hive读取和索引elasticsearch中的文档。
我遵循了本页中的文档:https://www.elastic.co/guide/en/elasticsearch/hadoop/current/hive.html
为了使用hadoop在elasticsearch中索引文档,您需要在配置单元中创建一个配置正确的表。我在向配置单元表中插入数据时遇到了一个问题。
这是我用来创建的表格脚本:

CREATE EXTERNAL TABLE es_names_w
(
 firstname string,
 lastname string
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'hive_test/names', 'es.index.auto.create' = 'true')

然后我尝试插入数据:

INSERT OVERWRITE TABLE es_names_w
SELECT firstname,lastname
FROM tmp_names_source;

我从配置单元中得到的错误是:“作业提交失败,出现异常‘org.apache.hadoom.ipc.remoteexoption(java.lang.runtimeexoption:org.xml.sax.saxparseexception;systemid:file:///hdfs\u data/mapred/jt/jobtracker/job\u 201506091622\u 0064.xml;编号:607;列umnnumber:51; 字符引用“&#…”
但是,只有当我创建的配置单元表有多个列时,才会发生此错误。
例如,此代码起作用:

CREATE EXTERNAL TABLE es_names_w
(
 firstname string
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'hive_test/names', 'es.index.auto.create' = 'true')

INSERT OVERWRITE TABLE es_names_w
    SELECT firstname
    FROM tmp_names_source;

一切都很顺利,hive在elasticsearch索引中创建了一个新类型,并且数据已在elasticsearch中索引
我真的不知道为什么我的第一次尝试没有成功
谢谢你的帮助

krcsximq

krcsximq1#

和塞德一起试试,会成功的。例如。

CREATE EXTERNAL TABLE elasticsearch_es (  
 name STRING, id INT, country STRING )  
 ROW FORMAT SERDE 'org.elasticsearch.hadoop.hive.EsSerDe'  
 STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'  
 TBLPROPERTIES ('es.resource'='elasticsearch/demo');

另外,确保在es中创建索引和键入时,创建的Map与es中配置单元列的Map完全相同。

zvms9eto

zvms9eto2#

尝试

es.index.auto.create' = 'false'
j2cgzkjk

j2cgzkjk3#

你能把这个添加到tbl es.mapping.id'='键'中吗。钥匙可以是你的名字。

相关问题