hadoop数据存入es
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 匹配):
<!-- Hadoop 核心依赖 -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version> <!-- 与集群 Hadoop 版本一致 -->
<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>
<!-- ES-Hadoop 核心依赖 -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-hadoop</artifactId>
<version>6.8.23</version> <!-- 与 ES 版本一致 -->
</dependency>
<!-- 可选:ES 高级客户端(用于额外操作) -->
<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。