Hadoop集群中增加与ElasticSearch连接的操作

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Hadoop集群中增加与ElasticSearch连接的操作

在没有引入elasticsearch-hadoop-xxx.jar相应的Jar包时,的在Hive中执行ElasticSearch外部表操作,会报如下的异常:

Exception in thread "main" java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.; Host Details : local host is: "ip-172-17-30-146/172.17.30.146"; destination host is: "ip-172-17-30-146":9000;   

通过Spark查看执行任务的MR日志,报错如下:

.hadoop.mapreduce.v2.app.MRAppMaster failed in state INITED; cause: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.elasticsearch.hadoop.mr.EsOutputFormat not found  
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.elasticsearch.hadoop.mr.EsOutputFormat not found  

此时报的是Yarn服务器上面找不到ES-Hadoop相关的类,此时需要做的将elasticsearch-hadoop-xxx.jar增加到Hadoop相关应用的环境中,根据目前我所用到的环境,需要增加的应用有:

1.Hive  
2.Spark  
3.Yarn  

需要将elasticsearch-hadoop-xxx.jar增加到所有服务器这些应用的环境中,然后重新执行执行就不会报这个问题了。

另外:目前我的做法是手动将elasticsearch-hadoop-6.2.4.jar一台一台复制到Yarn服务器的lib目录下,不知道CDH是否有简化的管理功能,可以直接上传对应的Jar包?

为了操作上的操作,我准备了一个批命令,命令记录如下:

#/data/share_libs是我的第三共享jar包的目录  
cd /data/share_libs  
wget https://artifacts.elastic.co/downloads/elasticsearch-hadoop/elasticsearch-hadoop-6.2.4.zip  
unzip elasticsearch-hadoop-6.2.4.zip  
cd elasticsearch-hadoop-6.2.4/dist  
#注:这里不要把所有elasticsearch-hadoop*.jar文件都拷贝过去了,否则Yarn中会报这些不同的Jar包的版本冲突  
mv elasticsearch-hadoop-6.2.4.jar /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/jars/  
cd /data/share_libs  
#删除不必要的资源  
rm -f elasticsearch-hadoop-6.2.4.zip  
rm -rf elasticsearch-hadoop-6.2.4  
#注:目录/data/share_libs,在Spark中设置为了其第三库的目录,在Hive中也设置为了其auxlib目录,因而在这里建立软件链接后,Spark和Hive都可以使用  
#Spark中设置第三库的目录,可以参看前面一篇文章:https://blog.csdn.net/fenglibing/article/details/80437246  
ln -s /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/jars/elasticsearch-hadoop-6.2.4.jar elasticsearch-hadoop-6.2.4.jar  
cd /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/hadoop-yarn/lib  
ln -s /opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/jars/elasticsearch-hadoop-6.2.4.jar elasticsearch-hadoop-6.2.4.jar  

以下是通过创建一个外部表,然后测试查询的语句:

create external table test_in_es  
(  
    id string,  
    k string,  
    v string  
)  
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'  
TBLPROPERTIES(  
'es.nodes' = 'http://vpc-es-xxxxxxxxx.eu-west-1.es.amazonaws.com:80',  
'es.index.auto.create' = 'false',  
'es.nodes.wan.only' = 'true',  
'es.resource' = 'test/test',  
'es.read.metadata' = 'true',  
'es.mapping.names' = 'id:_metadata._id,k:k, v:v');  
  
select * from test_in_es;  

如果遇到“EsHadoopIllegalArgumentException:No data nodes with HTTP-enabled available”这样的异常,请查看这篇文章:https://blog.csdn.net/fenglibing/article/details/80478551

更多参考:大数据开发

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
162 6
|
16天前
|
存储 监控 安全
Elasticsearch 集群
【11月更文挑战第3天】
94 54
|
8天前
|
缓存 监控 Java
Elasticsearch集群JVM调优
Elasticsearch集群JVM调优
24 5
|
12天前
|
监控 API 索引
Elasticsearch集群健康检查
【11月更文挑战第4天】
28 3
|
1月前
|
存储 缓存 监控
深入解析:Elasticsearch集群性能调优策略与最佳实践
【10月更文挑战第8天】Elasticsearch 是一个分布式的、基于 RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量数据。随着企业对实时数据处理需求的增长,Elasticsearch 被广泛应用于日志分析、全文搜索、安全信息和事件管理(SIEM)等领域。然而,为了确保 Elasticsearch 集群能够高效运行并满足业务需求,需要进行一系列的性能调优工作。
100 3
|
1月前
|
SQL 分布式计算 NoSQL
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
41 4
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
71 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
33 3
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
58 3
|
1月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
62 1
下一篇
无影云桌面