使用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;

赞👍

相关推荐
不想看见4041 天前
Git的工作原理和基本使用
大数据·elasticsearch·搜索引擎
五月天的尾巴1 天前
hive数据库模糊查询表名
hive·查询表名
蓝魔Y1 天前
hive—1.1、执行优化
hive
金牌归来发现妻女流落街头1 天前
【用 Java API Client 操作 Elasticsearch】
java·elasticsearch·jenkins
葱卤山猪1 天前
Git常用核心命令实操总结(新手避坑版)
大数据·git·elasticsearch
难忘经典1 天前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
深蓝轨迹1 天前
Git误操作急救手册
chrome·git·elasticsearch
ℒℴѵℯ陆·离ꦿ໊ོﻬ°1 天前
Git误操作急救手册
大数据·elasticsearch·搜索引擎
快乐非自愿1 天前
OpenClaw 生态适配:Hadoop/Hive 技能现状与企业级集成方案
大数据·hive·hadoop·分布式·openclaw
放下华子我只抽RuiKe51 天前
数据炼金术:机器学习背后的“脏活”与特征工程
人工智能·深度学习·elasticsearch·机器学习·搜索引擎·自然语言处理·数据挖掘