Hadoop 数据写入 Elasticsearch:基于 ES-Hadoop 的实现详解
ES-Hadoop 是 Elasticsearch 官方推出的工具,用于打通 Hadoop 生态(HDFS、MapReduce、Spark 等)与 Elasticsearch,支持数据双向流动。本文详细讲解如何通过 MapReduce 任务将 Hadoop 中的数据(如 HDFS 上的文件)写入 Elasticsearch,包括依赖配置、代码实现、核心参数及最佳实践。
ES-Hadoop 简介与依赖准备
核心作用
ES-Hadoop 简化了 Hadoop 与 Elasticsearch 的数据交互,提供:
- 适配 Hadoop 生态的输入 / 输出格式(
EsInputFormat/EsOutputFormat)。
- 自动处理数据序列化(Hadoop 数据 → ES 文档 JSON)。
- 支持批量写入、节点发现、认证等核心功能。
依赖配置
在 Maven 项目中添加以下依赖(版本需与 Hadoop 和 Elasticsearch 匹配):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.3</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.7.3</version> </dependency>
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch-hadoop</artifactId> <version>6.8.23</version> </dependency>
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.8.23</version> </dependency>
|
MapReduce 任务实现:HDFS 数据写入 ES
核心思路
通过 MapReduce 任务读取 HDFS 上的文件(如 JSON 格式),经 Mapper 处理后,通过 EsOutputFormat 批量写入 Elasticsearch。由于仅需数据透传(无聚合逻辑),无需 Reducer。
代码实现
(1)Job 配置类(H2EJob.java)