由於開發工作的需要把數據從Hive導入到Elasticsearch,最開始使用了java寫了個程式跑數據,80W的數據跑了2個小時左右,想想1000W數據那得要一天的時間,這效率到一次痛苦一次,就放棄了最初的想法,找到了用了hive的的方法,直接把數據導入到elasticsearch,以下是創建過程 ...
由於開發工作的需要把數據從Hive導入到Elasticsearch,最開始使用了java寫了個程式跑數據,80W的數據跑了2個小時左右,想想1000W數據那得要一天的時間,這效率到一次痛苦一次,就放棄了最初的想法,找到了用了hive的的方法,直接把數據導入到elasticsearch,以下是創建過程。
1,準備工作,準備jar包elasticsearch-hadoop-7.1.1,org.apache.commons.httpclient-3.1.jar
2,在hive中添加jar包。
3,建立一張和es連接的表hiveToEsTable.
1 CREATE EXTERNAL TABLE temp.hiveToEsTable ( 2 id, 3 uscc string, 4 remov_dt string, 5 lpr_cert_num string, 6 cont_tel string, 7 license_no string, 8 license_item string, 9 license_begin_dt string, 10 license_end_dt string, 11 license_fz_dt string, 12 license_certi_stat string, 13 remov_reas string, 14 KEY string 15 ) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES ( 16 ##es的索引 17 'es.resource' = 'es_index', 18 ##es的id 19 'es.mapping.id' = 'id', 20 'es.mapping.date.rich' = 'false', 21 'es.write.operation' = 'upsert', 22 ##es所在的ip 23 'es.nodes' = '192.168.0.199', 24 ##es埠 25 'es.port' = '9200' 26 );
4.把要添加的es的數據插入到上面建立的表中。即可自動完成數據的同步操作。
INSERT overwrite TABLE temp.hiveToEsTable SELECT id, uscc string, remov_dt string, lpr_cert_num string, cont_tel string, license_no string, license_item string, license_begin_dt string, license_end_dt string, license_fz_dt string, license_certi_stat string, remov_reas string, KEY string FROM csum.sourceTable
5,導入80w的成果,只要470秒
在這次導入的過程中踩到的坑,由於Hive是以前就安裝的,使用的是系統自帶的Java環境,預設是/usr/lib/jdk,版本是jdk7,但是es7要求的是jdk,我就在原來系統上引入了一個jdk8,安裝路徑是在/usr/lib/java8,然後知道es的java環境到8,造成兩邊jdk版本不一致從而導入在創建關聯時產生錯誤。解決方法,①可以把hive 的也指定到jdk8上來,但需要修改配置文件。②把自帶的jdk替換成jdk8,es不需要配置jdk8的指定,使用的就是系統預設的。