使用Hive讀寫ElasticSearch中的數(shù)據(jù)(轉(zhuǎn)載)

轉(zhuǎn)自:http://lxw1234.com/archives/2015/12/585.htm


關(guān)鍵字:hive醋奠、elasticsearch运提、integration俯在、整合

ElasticSearch已經(jīng)可以與YARN粒督、Hadoop杆烁、Hive牙丽、Pig、Spark兔魂、Flume等大數(shù)據(jù)技術(shù)框架整合起來使用烤芦,尤其是在添加數(shù)據(jù)的時(shí)候,可以使用分布式任務(wù)來添加索引數(shù)據(jù)析校,尤其是在數(shù)據(jù)平臺(tái)上构罗,很多數(shù)據(jù)存儲(chǔ)在Hive中,使用Hive操作ElasticSearch中的數(shù)據(jù)智玻,將極大的方便開發(fā)人員遂唧。這里記錄一下Hive與ElasticSearch整合,查詢和添加數(shù)據(jù)的配置使用過程吊奢「桥恚基于Hive0.13.1、Hadoop-cdh5.0页滚、ElasticSearch 2.1.0召边。

通過Hive讀取與統(tǒng)計(jì)分析ElasticSearch中的數(shù)據(jù)

ElasticSearch中已有的數(shù)據(jù)

_index:lxw1234

_type:tags

_id:用戶ID(cookieid)

字段:area、media_view_tags裹驰、interest

Hive建表

由于我用的ElasticSearch版本為2.1.0隧熙,因此必須使用elasticsearch-hadoop-2.2.0才能支持,如果ES版本低于2.1.0邦马,可以使用elasticsearch-hadoop-2.1.2.

下載地址:https://www.elastic.co/downloads/hadoop

add jar file:///home/liuxiaowen/elasticsearch-hadoop-2.2.0-beta1/dist/elasticsearch-hadoop-hive-2.2.0-beta1.jar;

CREATE EXTERNAL TABLE lxw1234_es_tags(

cookieidstring,

areastring,

media_view_tagsstring,

intereststring

)

STORED BY'org.elasticsearch.hadoop.hive.EsStorageHandler'

TBLPROPERTIES(

'es.nodes'='172.16.212.17:9200,172.16.212.102:9200',

'es.index.auto.create'='false',

'es.resource'='lxw1234/tags',

'es.read.metadata'='true',

'es.mapping.names'='cookieid:_metadata._id, area:area, media_view_tags:media_view_tags, interest:interest');

注意:因?yàn)樵贓S中贱鼻,lxw1234/tags的_id為cookieid,要想把_id映射到Hive表字段中滋将,必須使用這種方式:

‘es.read.metadata’ = ‘true’,

‘es.mapping.names’ = ‘cookieid:_metadata._id,…’

在Hive中查詢數(shù)據(jù)

數(shù)據(jù)已經(jīng)可以正常查詢邻悬。

執(zhí)行SELECT COUNT(1) FROM lxw1234_es_tags;Hive還是通過MapReduce來執(zhí)行,每個(gè)分片使用一個(gè)Map任務(wù):

可以通過在Hive外部表中指定search條件随闽,只查詢過濾后的數(shù)據(jù)父丰。比如,下面的建表語句會(huì)從ES中搜索_id=98E5D2DE059F1D563D8565的記錄:

CREATE EXTERNAL TABLE lxw1234_es_tags_2(

cookieidstring,

areastring,

media_view_tagsstring,

intereststring

)

STORED BY'org.elasticsearch.hadoop.hive.EsStorageHandler'

TBLPROPERTIES(

'es.nodes'='172.16.212.17:9200,172.16.212.102:9200',

'es.index.auto.create'='false',

'es.resource'='lxw1234/tags',

'es.read.metadata'='true',

'es.mapping.names'='cookieid:_metadata._id, area:area, media_view_tags:media_view_tags, interest:interest',

'es.query'='?q=_id:98E5D2DE059F1D563D8565'

);

hive>select*fromlxw1234_es_tags_2;

OK

98E5D2DE059F1D563D8565四川|成都購物|1購物|1

Timetaken:0.096seconds,Fetched:1row(s)

如果數(shù)據(jù)量不大,可以使用Hive的Local模式來執(zhí)行蛾扇,這樣不必提交到Hadoop集群:

在Hive中設(shè)置:

sethive.exec.mode.local.auto.inputbytes.max=134217728;

sethive.exec.mode.local.auto.tasks.max=10;

sethive.exec.mode.local.auto=true;

setfs.defaultFS=file:///;

hive>selectarea,count(1)ascntfromlxw1234_es_tagsgroupbyarea orderbycnt desc limit20;

Automaticallyselectinglocalonly modeforquery

Totaljobs=2

LaunchingJob1outof2

…..

Executionlog at:/tmp/liuxiaowen/liuxiaowen_20151211133030_97b50138-d55d-4a39-bc8e-cbdf09e33ee6.log

Jobrunningin-process(localHadoop)

Hadoopjob informationfornull:number of mappers:0;number of reducers:0

2015-12-1113:30:59,648nullmap=100%,reduce=100%

EndedJob=job_local1283765460_0001

Executioncompleted successfully

MapredLocaltask succeeded

OK

北京|北京10

四川|成都4

重慶|重慶3

山西|太原3

上海|上海3

廣東|深圳3

湖北|武漢2

陜西|西安2

福建|廈門2

廣東|中山2

福建|三明2

山東|濟(jì)寧2

甘肅|蘭州2

安徽|合肥2

湖南|長沙2

湖南|湘西2

河南|洛陽2

江蘇|南京2

黑龍江|哈爾濱2

廣西|南寧2

Timetaken:13.037seconds,Fetched:20row(s)

hive>

很快完成了查詢與統(tǒng)計(jì)攘烛。

通過Hive向ElasticSearch中寫數(shù)據(jù)

Hive建表

add jar file:///home/liuxiaowen/elasticsearch-hadoop-2.2.0-beta1/dist/elasticsearch-hadoop-hive-2.2.0-beta1.jar;

CREATE EXTERNAL TABLE lxw1234_es_user_tags(

cookieidstring,

areastring,

gendercode STRING,

birthday STRING,

jobtitle STRING,

familystatuscode STRING,

haschildrencode STRING,

media_view_tagsstring,

order_click_tags STRING,

search_egine_tags STRING,

intereststring)

STORED BY'org.elasticsearch.hadoop.hive.EsStorageHandler'

TBLPROPERTIES(

'es.nodes'='172.16.212.17:9200,172.16.212.102:9200',

'es.index.auto.create'='true',

'es.resource'='lxw1234/user_tags',

'es.mapping.id'='cookieid',

'es.mapping.names'='area:area,

gendercode:gendercode,

birthday:birthday,

jobtitle:jobtitle,

familystatuscode:familystatuscode,

haschildrencode:haschildrencode,

media_view_tags:media_view_tags,

order_click_tags:order_click_tags,

search_egine_tags:search_egine_tags,

interest:interest');

這里要注意下:如果是往_id中插入數(shù)據(jù),需要設(shè)置’es.mapping.id’ = ‘cookieid’參數(shù)镀首,表示Hive中的cookieid字段對(duì)應(yīng)到ES中的_id坟漱,而es.mapping.names中不需要再映射,這點(diǎn)和讀取時(shí)候的配置不一樣更哄。

關(guān)閉Hive推測執(zhí)行,執(zhí)行INSERT:

SET hive.mapred.reduce.tasks.speculative.execution=false;

SET mapreduce.map.speculative=false;

SET mapreduce.reduce.speculative=false;

INSERT overwrite TABLE lxw1234_es_user_tags

SELECT cookieid,

area,

gendercode,

birthday,

jobtitle,

familystatuscode,

haschildrencode,

media_view_tags,

order_click_tags,

search_egine_tags,

interest

FROM source_table;

注意:如果ES集群規(guī)模小芋齿,而source_table數(shù)據(jù)量特別大、Map任務(wù)數(shù)太多的時(shí)候成翩,會(huì)引發(fā)錯(cuò)誤:

Causedby:org.elasticsearch.hadoop.rest.EsHadoopInvalidRequest:

FOUND unrecoverable error[172.16.212.17:9200]returnedTooManyRequests(429)-rejected

execution of org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase$1@b6fa90f

ONEsThreadPoolExecutor[bulk,queue capacity=50,

org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@22e73289[Running,pool size=32,active threads=32,queued tasks=52,completed tasks=12505]];

Bailingout..

原因是Map任務(wù)數(shù)太多觅捆,并發(fā)發(fā)送至ES的請(qǐng)求數(shù)過多。

這個(gè)和ES集群規(guī)模以及bulk參數(shù)設(shè)置有關(guān)麻敌,目前還沒弄明白栅炒。

減少source_table數(shù)據(jù)量(即減少M(fèi)ap任務(wù)數(shù))之后,沒有出現(xiàn)這個(gè)錯(cuò)誤术羔。

執(zhí)行完成后赢赊,在ES中查詢lxw1234/user_tags的數(shù)據(jù):

curl-XGET http://172.16.212.17:9200/lxw1234/user_tags/_search?pretty -d '

{

"query":{

"match":{

"area":"成都"

}

}

}'

數(shù)據(jù)已經(jīng)寫入到ElasticSearch中。

總結(jié)

使用Hive將數(shù)據(jù)添加到ElasticSearch中還是非常實(shí)用的聂示,因?yàn)槲覀兊臄?shù)據(jù)都是在HDFS上域携,通過Hive可以查詢的。

另外鱼喉,通過Hive可以查詢ES數(shù)據(jù)秀鞭,并在其上做復(fù)雜的統(tǒng)計(jì)與分析,但性能一般扛禽,比不上使用ES原生API锋边,亦或是還沒有掌握使用技巧,后面繼續(xù)研究编曼。

相關(guān)閱讀:

ElasticSearch集群安裝配置

ElasticSearch與Hive整合官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豆巨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掐场,更是在濱河造成了極大的恐慌往扔,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊户,死亡現(xiàn)場離奇詭異萍膛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嚷堡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門蝗罗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事串塑≌恿穑” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵桩匪,是天一觀的道長打瘪。 經(jīng)常有香客問我,道長傻昙,這世上最難降的妖魔是什么瑟慈? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮屋匕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘借杰。我一直安慰自己过吻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布蔗衡。 她就那樣靜靜地躺著纤虽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绞惦。 梳的紋絲不亂的頭發(fā)上逼纸,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音济蝉,去河邊找鬼杰刽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛王滤,可吹牛的內(nèi)容都是我干的贺嫂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雁乡,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼第喳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起踱稍,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤曲饱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后珠月,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扩淀,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年桥温,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了引矩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖旺韭,靈堂內(nèi)的尸體忽然破棺而出氛谜,到底是詐尸還是另有隱情,我是刑警寧澤区端,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布值漫,位于F島的核電站,受9級(jí)特大地震影響织盼,放射性物質(zhì)發(fā)生泄漏杨何。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一沥邻、第九天 我趴在偏房一處隱蔽的房頂上張望危虱。 院中可真熱鬧,春花似錦唐全、人聲如沸埃跷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弥雹。三九已至,卻和暖如春延届,著一層夾襖步出監(jiān)牢的瞬間剪勿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工方庭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厕吉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓械念,卻偏偏與公主長得像赴涵,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子订讼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容