使用es-hadoop同步hive和es之间数据

💻近期在华为云连接es时的时候发现不能输入账号密码,后面联系华为工程师了解到,华为云默认是非安全模式,即不需要输入账号密码。

如果对你有所帮助,欢迎点赞收藏关注不迷路哦💓

目录

使用es-hadoop同步hive和es之间数据

[1. 登录EMR的master节点,切换至hadoop用户](#1. 登录EMR的master节点,切换至hadoop用户)

[2.在MRS客户端创建HDFS目录,将ES-Hadoop lib包和httpclient依赖包上传到该目录下](#2.在MRS客户端创建HDFS目录,将ES-Hadoop lib包和httpclient依赖包上传到该目录下)

3.从MRS客户端登录到Hive客户端

4.在Hive客户端,创建hive外表,与es索引进行映射(结合实际表)

4.1安全模式+HTTP协议的集群

4.2安全模式+HTTPS协议的集群

4.2.1获取安全证书"CloudSearchService.cer"

4.2.2转换安全证书(CloudSearchService.cer)

4.2.3将".jks"文件分发到MRS集群的每个节点的相同路径

4.2.4创建Hive外表

[5. 查询ES外部表测试](#5. 查询ES外部表测试)

6.将ES索引中的数据导入到hive的内部表或写入ES外部表


解决方案,如下:

前言

ES-Hadoop 是 Elastic 官方推出的一个用于对接 Hadoop 生态的工具,使得用户可以使用 Mapreduce(MR)、Spark、Hive 等工具处理 ES 上的数据。众所周知,Hadoop 生态的长处是处理大规模数据集,但是其缺点也很明显,就是当用于交互式分析时,查询时延会比较长。而 ES 在这几个方面的能力很强,对于如 ad-hoc 查询,基本可以做到秒级。ES-Hadoop 的推出提供了一种组合两者优势的可能性。使用 ES-Hadoop,用户只需要对自己代码做出很小的改动,即可以快速处理存储在 ES 中的数据,并且能够享受到 ES 带来的加速效果。

以下给出hive相关操作

使用es-hadoop同步hive和es之间数据

相关下载链接: ES-hadoop:(https://www.elastic.co/cn/downloads/past-releases#es-hadoop)选择需要的版本

httpclient3.1:(https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient/3.1)

1. 登录EMR的master节点,切换至hadoop用户

复制代码
su - hadoop

2.在MRS客户端创建HDFS目录,将ES-Hadoop lib包和httpclient依赖包上传到该目录下

注:暂定7.10.2版

复制代码
hadoop fs -mkdir /tmp/hadoop-es
hadoop fs -put elasticsearch-hadoop-7.10.2.jar /tmp/hadoop-es
hadoop fs -put commons-httpclient-3.1.jar /tmp/hadoop-es

3.从MRS客户端登录到Hive客户端

在Hive客户端,添加ES-Hadoop lib包和httpclient依赖包。该命令只对当前会话有效。

输入beelinehive进入到执行界面,执行如下命令:

复制代码
add jar hdfs:///tmp/hadoop-es/commons-httpclient-3.1.jar;
add jar hdfs:///tmp/hadoop-es/elasticsearch-hadoop-7.10.2.jar;

4.在Hive客户端,创建hive外表,与es索引进行映射(结合实际表)

4.1安全模式+HTTP协议的集群
复制代码
CREATE EXTERNAL table IF NOT EXISTS student( 
   id BIGINT,
   name STRING,
   addr STRING 
)

STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' 
TBLPROPERTIES(  
    'es.nodes' = '172.XX.XX.XX:9200,172.XX.XX.XX:9200,172.XX.XX.XX:9200',--ES地址
    'es.port' = '9200',
    'es.net.ssl' = 'false', --指定不使用SSL连接到Elasticsearch。
    'es.nodes.wan.only' = 'false', --指定是否只使用广域网节点
    'es.nodes.discovery'='false', --禁用节点发现,即不自动发现其他节点
    'es.input.use.sliced.partitions'='false', --指定在读取数据时不使用分片分区
    'es.nodes.client.only'='true',--指定节点仅作为客户端使用。
    'es.resource' = 'student/_doc', --指定映射到Elasticsearch中的索引名称为student,文档类型为_doc。
    'es.net.http.auth.user' = 'NAME', --ES用户名
    'es.net.http.auth.pass' = 'PASSWORD' --ES密码
);
4.2安全模式+HTTPS协议的集群
4.2.1获取安全证书"CloudSearchService.cer"
  1. 登录云搜索服务控制台。

  2. 选择"集群管理"进入集群列表。

  3. 单击对应集群的名称,进入集群基本信息页面。

  4. 在"基本信息"页面,单击"HTTPS访问"后面的"下载证书"。

4.2.2转换安全证书(CloudSearchService.cer)

将下载的安全证书上传到客户端机器上,使用keytool工具将".cer"证书转换成Java可以读取的".jks"证书格式。

  • 在Linux系统中,执行如下命令转换证书。

    keytool -import -alias newname -keystore ./truststore.jks -file ./CloudSearchService.cer

  • 在Windows系统中,执行如下命令转换证书。

    keytool -import -alias newname -keystore .\truststore.jks -file .\CloudSearchService.cer

注:其中,newname是由用户自定义的证书名称。

该命令执行后,会提示设置证书密码,并确认密码。请保存该密码,后续接入集群会使用。

4.2.3将".jks"文件分发到MRS集群的每个节点的相同路径

如"/tmp",可以使用scp 命令进行文件传输。同时,要确保omm用户有权限读取该文件,设置权限可以参考如下命令:

复制代码
chown -R omm truststore.jks
4.2.4创建Hive外表
复制代码
CREATE EXTERNAL table IF NOT EXISTS student( 
   id BIGINT,
   name STRING,
   addr STRING 
)

STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' 
TBLPROPERTIES(  
    'es.nodes' = 'https://172.XX.XX.XX:9200,https://172.XX.XX.XX:9200,https://172.XX.XX.XX:9200',--ES地址
    'es.port' = '9200',
    'es.net.ssl' = 'true', -- 使用SSL连接
    'es.net.ssl.truststore.location' = 'cerFilePath',- SSL信任存储文件路径
    'es.net.ssl.truststore.pass' = 'cerPassword',-- SSL信任存储密码
    'es.nodes.wan.only' = 'false',  -- 不只使用广域网节点
    'es.nodes.discovery'='false', -- 禁用节点发现
    'es.nodes.client.only'='true', -- 节点仅作为客户端使用
    'es.input.use.sliced.partitions'='false', -- 不使用分片分区读取
    'es.resource' = 'student/_doc',-- 映射到Elasticsearch的索引和文档类型
    'es.net.http.auth.user' = 'NAME', -- 映射到Elasticsearch的索引和文档类型
    'es.net.http.auth.pass' = 'PASSWORD'-- 连接到Elasticsearch的密码
);

5. 查询ES外部表测试

在Hive客户端,插入数据。

复制代码
INSERT INTO TABLE student VALUES (1, "Lucy", "address1"), (2, "Lily", "address2");

查询

复制代码
select * from student;

6.将ES索引中的数据导入到hive的内部表或写入ES外部表

复制代码
-- 检查并删除已存在的同名内部表,如果需要的话
DROP TABLE IF EXISTS student_hive;

-- 创建一个与外部表结构相同的Hive内部表
CREATE TABLE student_hive
LIKE student;

-- 插入数据从外部表student到内部表student_hive
INSERT INTO TABLE student_hive
SELECT * FROM student;

赞👍

相关推荐
顧棟1 小时前
【Yarn实战】Yarn 2.9.1滚动升级到3.4.1调研与实践验证
hadoop·yarn
铭毅天下1 小时前
Elasticsearch 到 Easysearch 数据迁移 5 种方案选型实战总结
大数据·elasticsearch·搜索引擎·全文检索
D明明就是我4 小时前
Hive 拉链表
数据仓库·hive·hadoop
Elastic 中国社区官方博客5 小时前
Elasticsearch 推理 API 增加了开放的可定制服务
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
嘉禾望岗5037 小时前
hive join优化和数据倾斜处理
数据仓库·hive·hadoop
yumgpkpm8 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
Elastic 中国社区官方博客8 小时前
AI Agent 评估:Elastic 如何测试代理框架
大数据·人工智能·elasticsearch·搜索引擎
忧郁火龙果9 小时前
六、Hive的基本使用
数据仓库·hive·hadoop
忧郁火龙果9 小时前
五、安装配置hive
数据仓库·hive·hadoop
Elasticsearch10 小时前
在 Elasticsearch 中解析 JSON 字段
elasticsearch