关于如何将Hive中的数据导入ES,官方的网站有了详细的介绍。
我这里用的ES的版本为5.6.14。CDH集群用的是cdh6.1.0。
官网地址
es-hadoop的GitHub地址html
引入JAR包的方式比较多,这里参考博主qianshanding0708的文章:https://blog.csdn.net/qianshangding0708/article/details/50381966java
ADD JAR /home/leehom/jar/elasticsearch-hadoop-7.5.1.jar
node
链接方式 | 是否有效 |
---|---|
Hive Shell | 不须要重启Hive服务就有效 |
Hive Server | 无效 |
在${HIVE_HOME}中建立文件夹auxlib,而后将自定义jar文件放入该文件夹中。
此方法添加不须要重启Hive。并且比较便捷。git
链接方式 | 是否有效 |
---|---|
Hive Shell | 不须要重启Hive服务就有效 |
Hive Server | 重启Hive服务才生效 |
链接方式 | 是否有效 |
---|---|
Hive Shell | 重启Hive服务才生效 |
Hive Server | 重启Hive服务才生效 |
create external table test.ir_rec_depart_district( district_id string COMMENT '行政区域id', depart_district_id string COMMENT '出发地行政区域id', product_id string COMMENT '产品ID', category_id string COMMENT '品类ID', tag_list_level1 string COMMENT '一级标签列表与权重', tag_list_level2 string COMMENT '二级标签列表与权重', tag_list_level3 string COMMENT '三级标签列表与权重', browse_score decimal(12,8) COMMENT '浏览量归一化评分(90天)', order_score decimal(12,8) COMMENT '订单量归一化评分(90天)', collect_score decimal(12,8) COMMENT '收藏量归一化评分(90天)', exposure_score decimal(12,8) COMMENT '搜索曝光量归一化评分(90天)', click_score decimal(12,8) COMMENT '搜索点击量归一化评分(90天)', favorable_score decimal(12,8) COMMENT '好评率加分(分值有点大的(0~1),建议乘以0.001或更小的权重后使用)', up_browse_socre decimal(12,8) COMMENT '浏览量7日环比增量归一化评分', up_order_score decimal(12,8) COMMENT '订单量7日环比增量归一化评分', api_score_tf string COMMENT '自签评分【自签为10分,非自签为0分,在不一样维度之间加权时能起到绝对做用,保证自签产品排最前】', api_score string COMMENT '自签评分【自签为1分,非自签为0分,在不一样维度之间加权时能起到想做用,提高自签产品的排名】') STORED BY "org.elasticsearch.hadoop.hive.EsStorageHandler" TBLPROPERTIES( 'es.nodes' = '10.95.3.172:9200,10.95.3.174:9200,10.95.3.231:9200', 'es.index.auto.create' = 'true','es.resource' = 'rec_depart_district/doc','es.mapping.id' = 'product_id');
insert overwrite table test.rec_depart_district SELECT district_id, depart_district_id, product_id, category_id, tag_list_level1, tag_list_level2, tag_list_level3, browse_score, order_score, collect_score, exposure_score, click_score, favorable_score, up_browse_socre, up_order_score, api_score_tf, api_score from dml.dml_personalrec_dimrec_district_depart limit 10;
以后会生成一个mapreduce任务,执行完以后就能够在elasticsearch中看到索引了。
补充一下在hive中设置队列以及mapreduce内存的方法。github
hive --hiveconf mapreduce.job.queuename=leehom set mapreduce.map.memory.mb=2048;//在进入hiveshell以后设置 set mapreduce.reduce.memory.mb=2048;
注意:jar包若是不引入彻底的话,会报错。web
缺乏httpclient-4.5.5.jar
会报以下错误:sql
Error: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/apache/commons/httpclient/protocol/ProtocolSocketFactory
缺乏org.apache.commons.httpclient.jar
会报以下错误:shell
Error: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/apache/commons/httpclient/Credentials
导入成功的过程图以下:
查看ES中索引的数据:
apache
相关JAR包的下载地址
若有问题能够私信我,或者进入个人主页:指尖飞码的博客 留言。api