文章目錄
- Hive整合ES實作ES與Hdfs資料比對
- 環境介紹
- 準備Yarn和客戶端環境
- 在Hive中建表&插入資料
- 創建ES索引
- 基于ES索引創建Hive外部表
- 創建表
- 插入資料
- 創建基于Hdfs外部表
- 創建表
- 插入資料
- 資料比對
- 總結
- 客官且慢,點贊、收藏+關注 謝謝~
Hive整合ES實作ES與Hdfs資料比對
業務場景中需要ES資料和Hdfs資料進行比對,實作資料查漏補缺,為此需要將Hdfs與ES進行整合,從而引入elasticsearch-hadoop,目前elasticsearch-hadoop支持Map/Reduce、Hive、Pig、Spark和Storm,以及整合Hdfs用于存盤ES備份資料,
因此可以在Hive中建立一張ES外部表和一張Hdfs外部表,實作將Hive資料匯入ES、Hive資料與ES資料比對、ES資料下載到Hive等等,
環境介紹
Java版本:
java -version
java version "1.8.0_181"
查看Hadoop版本:
hadoop version
Hadoop 3.0.0-cdh6.2.0
查看Hive版本:
hive --version
Hive 2.1.1-cdh6.2.0
ES版本:
6.2.3
Elasticsearch-Hadoop包版本:(由于ES集群環境是6.2.3,只能用這個版本試一下,不過很幸運,依然奏效)
elasticsearch-hadoop-7.15.2
準備Yarn和客戶端環境
獲得elasticsearch-hadoop-7.15.2.jar包:
下載地址
設定任務提交相關依賴:
hive -hiveconf hive.aux.jars.path=/root/elasticsearch-hadoop-7.15.2.jar
設定Hive客戶端依賴:
ADD JAR /root/elasticsearch-hadoop-7.15.2.jar;
在Hive中建表&插入資料
創建ES索引
PUT my_index_0001
{
"mappings": {
"doc": {
"properties": {
"xb_mc": {
"type": "text",
"analyzer": "keyword"
},
"hjdqh_dm": {
"type": "text",
"analyzer": "keyword"
},
"zjhm": {
"type": "text",
"analyzer": "keyword"
}
}
}
}
}
基于ES索引創建Hive外部表
創建表
# 先進入hive shell client
hive -hiveconf hive.aux.jars.path=/root/elasticsearch-hadoop-7.15.2.jar
ADD JAR /root/elasticsearch-hadoop-7.15.2.jar;
CREATE EXTERNAL TABLE es_my_index_0001 (
xb_mc STRING, zjhm STRING,
hjdqh_dm STRING)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'es.resource' = 'es_my_index_0001/doc',
'es.query' = '{ "query": {"match_all": {}}}',
'es.nodes' = 'ES_cluster_ip','es.mapping.id'='zjhm'
);
插入資料
insert into es_my_index_0001 values("01","428008199901010898","test-1");
insert into es_my_index_0001 values("01","428008199901010897","test-1");
注意
ES_cluster_ip需要填寫自己ES集群的ip,填寫一個就行,默認會進行自動發現其他節點;'es.mapping.id'='zjhm'表示用欄位zjhm作為ES檔案的檔案id;更多其他配置資訊可以參考博客和官網
創建基于Hdfs外部表
創建表
CREATE EXTERNAL TABLE test_table
( xb_mc STRING, zjhm STRING,
hjdqh_dm STRING
) STORED AS PARQUET LOCATION 'hdfs://ha-nameservice/hive/test_table';
插入資料
insert into test_table values("1","428008199901010898","test");
insert into test_table values("01","428008199901010897","test-1");
insert into test_table values("01","428008199901010871","test-1");
資料比對
在hive中運行如下sql,即可獲得ES中漏寫入資料
select a.zjhm ,b.zjhm from test_table a left join (select zjhm from es_my_index_0001) b on a.zjhm= b.zjhm where b.zjhm is null;
運行結果:
OK
428008199901010871 NULL
Time taken: 50.215 seconds, Fetched: 1 row(s)
總結
- ElasticSearch-Hadoop可以實作Hdfs資料與ES資料進行比對,比對計算將提交到Yarn通過Map/Reduce執行
- 更多Hive創建外部ES表屬性可以參考博客和官網
客官且慢,點贊、收藏+關注 謝謝~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398635.html
標籤:其他
下一篇:一, Scala基礎語法全總結
