ES-Hadoop学习之ES和HDFS数据交换

本文介绍了如何使用ES-Hadoop库实现ES和HDFS之间的数据交换。首先,详细阐述了如何将ES中的数据导出到HDFS,包括数据准备、引入库、创建Mapper和Job类,以及执行MapReduce任务的过程。接着,讲解了如何将HDFS中的数据导入到ES,涉及数据准备、Mapper编写、Job配置及执行命令的步骤。通过这些操作,实现了两个系统间的数据同步。
摘要由CSDN通过智能技术生成

ES作为强大的搜索引擎,HDFS是分布式文件系统。ES可以将自身的Document导入到HDFS中用作备份,ES也可以将存储在HDFS上的结构化文件导入为ES的中的Document。而ES-Hadoop正是这两者之间的一个connector


1,将数据从ES导出到HDFS


1.1,数据准备,在ES中创建Index和Type,并创建document。在我的例子中,Index是mydata,type是person,创建了两条如下图所示的document



1.2 在项目中引入ES-Hadoop库

<dependency>
  <groupId>org.elasticsearch</groupId>
  <artifactId>elasticsearch-hadoop</artifactId>
  <version>5.5.2</version>
</dependency>

值得注意的是,上面的dependency只会引入ES-Hadoop相关的Jar包,和Hadoop相关的包,例如hadoop-common, hadoop-hdfs等等,依然还需要添加依赖。


1.3,创建从ES到Hadoop的数据迁移的Mapper类


package com.wjm.es_hadoop.example1;


import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.elasticsearch.hadoop.mr.LinkedMapWritable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

class E2HMapper01 extends Mapper<Text, LinkedMapWritable, Text, LinkedMapWritable> {

    private static final Logger LOG = LoggerFactory.getLogger(E2HMapper01.class);

    @Override
    protected void setup(Context context) throws IOException, InterruptedException {
        super.setup(context);
    }

    @Override
    protected void map(Text key, LinkedMapWritable value, Context context)
            throws IOException, InterruptedException {
        LOG.info("key {} value {}", key, value);
        context.write(key, value);
    }

    @Override
    protected void cleanup(Context context) throws IOException, InterruptedException {
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值