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

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 使用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 级别的结构化或非结构化数据,满足大规模数据处理的需求
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
9月前
|
分布式计算 Hadoop 大数据
从Excel到Hadoop:数据规模的进化之路
从Excel到Hadoop:数据规模的进化之路
192 10
|
10月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
331 7
|
11月前
|
弹性计算 运维 Serverless
超值选择:阿里云Elasticsearch Serverless在企业数据检索与分析中的高性能与灵活性
本文介绍了阿里云Elasticsearch Serverless服务的高性价比与高度弹性灵活性。
464 8
|
11月前
|
数据采集 分布式计算 Hadoop
使用Hadoop MapReduce进行大规模数据爬取
使用Hadoop MapReduce进行大规模数据爬取
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
335 3
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
819 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
232 1
|
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
318 0
|
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
183 0
|
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
228 0

相关实验场景

更多