1. 开发环境

  • Elasticsearch 6.5.4
  • ES-Hadoop 6.5.4
  • Hadoop 2.0.0

2. 下载地址

ES-Hadoop下载地址如下:

官网地址:https://www.elastic.co/downloads/past-releases

3. 使用示例

ES-Hadoop插件使用非常简单,只要在作业中导入jar包,在作业描述类中设置一些属性,就可以了,其他部分操作和一般的MR作业并没有太大差别。

3.1 导入jar包

下载好插件解压后,可以看见其中包含对应许多hadoop组件的jar包(hive、pig等),只需要将自己需要的jar包添加项目中,因为这里我只是将hbase里的数据索引到ES中,所以只需要添加elasticsearch-hadoop-mr-6.5.4.jar这个jar包。

:还需要将所用jar包添加到hadoop的classPath中,否则运行作业时会报找不到类的错误。

3.2 编写描述类

只需要添加如下设置:


//禁止speculative机制,该机制会启动多个相同task,使数据重复索引
conf.setBoolean("mapred.map.tasks.speculative.execution", false);
conf.setBoolean("mapred.reduce.tasks.speculative.execution", false);
//设置ES集群中任意节点的IP地址和端口号
conf.set("es.nodes", "http://节点IP:9200");
//设置要索引的index/type
conf.set("es.resource", "mytest/rec");
//设置输入的数据格式为json
conf.set("es.input.json", "yes");
//设置json中文档id对应的字段名
conf.set("es.mapping.id", "id"); //设置输出格式为EsOutputFormat类
job.setOutputFormatClass(EsOutputFormat.class);
//不需要reduce,map也不需要key,所以将map类的key设置为NullWritable
job.setMapOutputKeyClass(NullWritable.class);
//将map的value类型设置为Text
job.setMapOutputValueClass(Text.class);

3.3 编写Mapper类



public class MixRecMapper extends Mapper<LongWritable,Text,NullWritable,Text>{

	@Override
protected void map(LongWritable offset, Text userId,org.apache.hadoop.mapreduce.Mapper.Context context)throws IOException, InterruptedException { //前面为省略的业务逻辑代码 //jsonDoc为自行拼接的json字符串
String jsonDoc = "{\"id\":\"" + userId.toString() + "\",\"mix_rec\":" + mixList.toString() + "}";
// logger.info(jsonDoc+" 入ES的json===========================");
context.write(NullWritable.get(),new Text(jsonDoc));
} }

4. 参考文献

官方文档:https://www.elastic.co/guide/en/elasticsearch/hadoop/current/mapreduce.html

使用ES-Hadoop 6.5.4编写MR将数据索引到ES的更多相关文章

  1. C#码农的大数据之路 - 使用C#编写MR作业

    系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...

  2. Hadoop学习笔记(5) ——编写HelloWorld(2)

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  3. 用eclipce编写 MR程序 MapReduce

    package com.bw.mr; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.a ...

  4. Apache Hadoop集群离线安装部署(一)——Hadoop(HDFS、YARN、MR)安装

    虽然我已经装了个Cloudera的CDH集群(教程详见:http://www.cnblogs.com/pojishou/p/6267616.html),但实在太吃内存了,而且给定的组件版本是不可选的, ...

  5. Hadoop专业解决方案-第1章 大数据和Hadoop生态圈

    一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第1章 大数据和Hadoop生态圈小组已经翻译完成,在此 ...

  6. Hadoop权威指南:通过FileSystem API读取数据

    Hadoop权威指南:通过FileSystem API读取数据 [TOC] 在Hadoop中,FileSystem是一个通用的文件系统API 获取FileSystem实例的几个静态方法 public ...

  7. PLSQL程序编写杂烦数据表信息编写批量排版

    --PLSQL程序编写杂烦数据表信息编写批量排版 SELECT 'cra.' || lower(t.column_name) ||',' FROM dba_tab_columns t WHERE t. ...

  8. Hadoop集群-HDFS集群中大数据运维常用的命令总结

    Hadoop集群-HDFS集群中大数据运维常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客会简单涉及到滚动编辑,融合镜像文件,目录的空间配额等运维操作简介.话 ...

  9. 在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析

    在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析 低成本的Blob存储是一个强大的.通用的Hadoop兼容Azure存储解决方式无缝集成HDInsight.通过Hadoop分布式 ...

随机推荐

  1. avast! 2014正式版下载

    avast!官方简体中文网站: http://www.avast.com/zh-cn/index avast!官方英文网站: http://www.avast.com/index avast!免费版官 ...

  2. DTD文档说明

    模块说明 l  元素 l  属性 l  实体 l  PCDATA(parsed character data) PCDATA 是会被解析器解析的文本.这些文本将被解析器检查实体以及标记. l  CDA ...

  3. 代码控制 textarea 控件是否为KindEditor 编辑框

    <script charset="utf-8" src="<%:Url.Content("~/UI/Scripts/KindEditor/kinde ...

  4. Zabbix监控TCP status

    监控原理 ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' LAST-ACK 5ESTAB 348FIN-WAIT-1 ...

  5. StringUtils的工具类isBlank与isEmply

    1. public static boolean isEmpty(String str)   判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0   下面是 S ...

  6. vue-cli项目配置mock数据(新版本)

    最新的vue-webpack-template 中已经去掉了dev-server.js 但是要进行模拟后台数据的,如何模拟本地数据操作? 解决方法: dev-server.js 改用webpack-d ...

  7. cocos2dx Scene,Layer,Sprite的理解

    layer,scene,sprite的默认锚点都是0.5,0.5 三者都继承自Node节点,暂时没看出有什么区别,或者下面的话是对的吧. 在cocos2d-x中,一个应用可以有多个scene,但任何时 ...

  8. 禅道导出数据,excel打开为乱码处理

    禅道里面导出的数据,用Excel打开是乱码(如图),如何解决? 第一步: 第二步: 第3步: 第4步: 第5步: 选择一个储存位置 最后的结果就是这样了

  9. 深入理解java虚拟机,内存管理部分

    1,对象回收前会调用finalize()方法,尝试自救,只能调用一次 2,上面横向对比c++的析构函数,但是java有良好的内存管理,而且try/catch做得比较好 3,回收一个常量,1,对象的实例 ...

  10. 查看ms SQL Server存储过程,函数的内容

    方法1:最简单的,右键单击要查看的存储过程,选择“修改”: 方法2: SELECT definition FROM solar.sys.sql_modules WHERE [object_id]=(O ...