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