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

最新文章

  1. 【原】npm 常用命令详解
  2. hbm.xml 详解总结
  3. PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程
  4. 【Win10】UAP/UWP/通用 开发之 SplitView
  5. 转 【O2O案例】汽车后市场垂直化电子商务:平业模式解析
  6. hdu 1222 狼和兔子
  7. TextView使用Spannable设置复合文本
  8. Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
  9. poj3589---判断两个数有多接近
  10. C#用网易邮箱发送邮件(同步异步)
  11. 抢车位中的排名bug(比較使用了无符号数)
  12. 苹果手机的SB系列(2)为什么不能重命名?
  13. [转]Rabbitmq的使用及Web监控工具使用
  14. element-ui的table动态生成表头和数据,且表中数据可编辑
  15. python基础——list和tuple(列表和元组)
  16. 【APP测试(Android)】--性能测试
  17. Python内置logging模块
  18. css 兼容ie8 rgba()用法
  19. Influxdb简介与安装
  20. Docker环境的持续部署优化实践

热门文章

  1. 升级OPENSSH 和 OPENSSL
  2. [转载]ORACLE EXP/IMP
  3. MySQL根据表字段生成C#Model语句
  4. 基于Open XML 导出数据到Excel
  5. 关于父类私有属性在子类构造函数中super调用的解释
  6. Android listview自定义分割线宽度
  7. Python 高性能并行计算之 mpi4py
  8. linux python 安装 nose lapack atlas numpy scipy
  9. sysfs文件系统学习--sysfs
  10. timescaledb 几个方便的api