使用Hadoop同步Elasticsearch数据(亿级)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 使用hadoop同步亿级数据到elasticsearch索引实践,约15分钟同步9300万行数据。

Hadoop同步Elasticsearch

Hadoop 是一个分布式计算框架,可以处理大规模的数据集。ES(Elasticsearch)是一个分布式搜索和分析引擎,可以提供快速和灵活的数据查询和可视化功能。Hadoop 和 ES 可以结合使用,实现对 Hadoop 数据的实时索引和检索。

本文将介绍如何使用 ES-Hadoop 这个组件来实现 Hadoop 更新 ES 的功能。ES-Hadoop 是一个开源项目,它提供了一系列的连接器(connectors),让 Hadoop 可以与 ES 无缝集成。ES-Hadoop 支持以下几种 Hadoop 生态系统中的组件:

  • MapReduce:可以使用 Java API 或者 REST API 来读写 ES 中的数据。
  • Hive:可以使用 HiveQL 来查询 ES 中的数据,或者将 Hive 表映射到 ES 索引中。
  • Pig:可以使用 Pig 脚本来读写 ES 中的数据,或者使用 UDF(User Defined Function)来扩展 Pig 的功能。
  • Spark:可以使用 Spark SQL、Spark Streaming、Spark MLlib 等模块来读写 ES 中的数据,或者使用 Scala、Java、Python 等语言编写 Spark 应用程序。
  • Cascading:可以使用 Cascading DSL(Domain Specific Language)来定义数据流,并将其应用到 ES 中。
  • Storm:可以使用 Storm Spout 和 Bolt 来从 ES 中读取或者向 ES 中写入数据流。

接下来,我们将介绍Hive连接器的使用方法和注意事项,并给出一些示例代码。

环境准备

  • CDH6
  • Elasticsearch 8.5.2 三台 16cpu 64gb内存 300g 固态 节点
  • elasticsearch-hadoop.jar

Hive 连接器

Hive 连接器可以让用户使用 HiveQL 来查询 ES 中的数据,或者将 Hive 表映射到 ES 索引中。
要使用 Hive 连接器,需要在 Hive 中添加 es-hadoop JAR 包,并创建外部表,指定相关的参数,例如 ES 节点的地址、索引名、类型名等。

以下是一个简单的示例代码,演示了如何使用 Hive 连接器创建外部表,并向 ES 中写入和读取数据
-- 添加 es-hadoop JAR 包
ADD JAR /path/to/elasticsearch-hadoop.jar;

-- 创建外部表,与 ES 索引中的字段进行映射

CREATE EXTERNAL TABLE es_table (
    id BIGINT,
    name STRING,
    age INT,
    address STRUCT<city:STRING, street:STRING>
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'test/docs', 'es.mapping.id'='id','es.mapping.exclude'='id', 'es.nodes' = 'localhost:9200');

-- 通过 HiveQL 向 ES 索引中写入数据
INSERT INTO TABLE es_table VALUES (1, 'Alice', 25, named_struct('city', 'Beijing', 'street', 'Chaoyang Road'));
INSERT INTO TABLE es_table VALUES (2, 'Bob', 30, named_struct('city', 'Shanghai', 'street', 'Nanjing Road'));

-- 通过 HiveQL 读取 ES 索引中的数据
SELECT * FROM es_table;
SELECT name, address.city FROM es_table WHERE age > 10;
这里需要注意没有使用es自动生成的id,方便日后执行相应数据的更新操作。

总结

  1. 同步文档 9300万,约耗时15分钟,索引大小70GB
  2. Hadoop 同步 ES 的优势主要有以下几点:
  • 可以利用 ES 的强大的全文检索能力,对 Hadoop 中的数据进行实时的查询和分析,支持各种复杂的查询条件和自定义打分。
  • 可以利用 ES 的丰富的可视化工具,如 Kibana,对 Hadoop 中的数据进行动态的展示和探索,提高数据价值。
  • 可以利用 ES 的高可用和容灾性能,保证 Hadoop 中的数据不丢失,同时提供快速的恢复能力。
  • 可以利用 ES 的横向扩展性,轻松处理 PB 级别的结构化或非结构化数据,满足大规模数据处理的需求
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
分布式计算 Java Hadoop
Hadoop-18 Flume HelloWorld 第一个Flume尝试!编写conf实现Source+Channel+Sink 控制台查看收集到的数据 流式收集
Hadoop-18 Flume HelloWorld 第一个Flume尝试!编写conf实现Source+Channel+Sink 控制台查看收集到的数据 流式收集
37 1
|
19天前
|
数据采集 分布式计算 Hadoop
使用Hadoop MapReduce进行大规模数据爬取
使用Hadoop MapReduce进行大规模数据爬取
|
2月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
226 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
56 4
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
90 3
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
43 2
|
2月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
70 1
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
105 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
51 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
57 0