Logstash同步Hive和Clickhouse

簡介

工作中我們遇到了把Hive數(shù)據(jù)同步到Clickhouse的業(yè)務需求,一開始我們寫Spark任務矮男,用SparkSQL讀Hive,再用JDBC寫入到Clickhouse。

后來奋姿,隨著要同步的表越來越多,每次都寫Spark任務素标,成本就顯得有些高了称诗。于是,寫了一個通用的Spark任務头遭,指定Hive表寓免、字段,指定Clickhouse表计维、字段袜香,每次指定不同的參數(shù)。

再后來鲫惶,業(yè)務越來越復雜困鸥,不僅是簡單的同步,而是要支持更復雜的SQL剑按,結果進行數(shù)據(jù)類型轉(zhuǎn)換疾就、值轉(zhuǎn)化等,然后再插入Clickhouse艺蝴。

這不是ETL要干的事兒嗎猬腰?!

當然猜敢,繼續(xù)增強之前的Spark姑荷,完全可以實現(xiàn)這個功能。但是說到ETL缩擂,不是有專業(yè)強大的Logstash嗎鼠冕,為什么要重復造輪子?

經(jīng)過一番調(diào)研胯盯,還真有人寫了Logstash插件懈费,用來導出數(shù)據(jù)到Clickhouse:logstash-output-clickhouse

輸出端搞定了,輸入端怎么搞呢博脑?很建達憎乙,用JDBC插件就可以了。

輸入

input {
    jdbc {
        jdbc_driver_library => "/data/jars/hive-jdbc-1.1.0-cdh5.7.4.jar,/data/jars/libthrift-0.9.2.jar,/data/jars/httpclient-4.2.5,/data/jars/httpcore-4.2.5.jar,/data/jars/hive-service-1.1.0-cdh5.7.4.jar,/data/jars/hive-common-1.1.0-cdh5.7.4.jar,/data/jars/hive-metastore-1.1.0-cdh5.7.4.jar,/data/jars/hadoop-common-2.6.0-cdh5.7.4.jar,/data/jars/commons-logging-1.2.jar,/data/jars/slf4j-api-1.7.5.jar,/data/jars/slf4j-log4j12-1.7.5.jar,/data/jars/log4j-1.2.17.jar"
        jdbc_driver_class => "org.apache.hive.jdbc.HiveDriver"
        jdbc_connection_string => "jdbc:hive2://ip:port/db
        jdbc_user => ""
        jdbc_password => ""
        parameters => {"n" => 100}
        statement => "select id, reg_time from db.table limit :n"
        #schedule => "* * * * *"
    }
}

如上叉趣,配置jdbc連接信息即可泞边。

需要說明的是,相關的jar包比較多疗杉,需要給全了阵谚,否則會有各種ClassNotFoundException。完整的jar列表為:

-rw-r--r--  1 root root   61829 Sep 21  2016 commons-logging-1.2.jar
-rw-r--r--  1 root root 3438469 Sep 21  2016 hadoop-common-2.6.0-cdh5.7.4.jar
-rw-r--r--  1 root root  302545 Sep 21  2016 hive-common-1.1.0-cdh5.7.4.jar
-rw-r--r--  1 root root   96208 Sep 21  2016 hive-jdbc-1.1.0-cdh5.7.4.jar
-rw-r--r--  1 root root 5498220 Sep 21  2016 hive-metastore-1.1.0-cdh5.7.4.jar
-rw-r--r--  1 root root 2050189 Sep 21  2016 hive-service-1.1.0-cdh5.7.4.jar
-rw-r--r--  1 root root  433368 Sep 21  2016 httpclient-4.2.5.jar
-rw-r--r--  1 root root  227708 Sep 21  2016 httpcore-4.2.5.jar
-rw-r--r--  1 root root  227712 Sep 21  2016 libthrift-0.9.2.jar
-rw-r--r--  1 root root  489884 Sep 21  2016 log4j-1.2.17.jar
-rw-r--r--  1 root root   26084 Sep 21  2016 slf4j-api-1.7.5.jar
-rw-r--r--  1 root root    8869 Sep 21  2016 slf4j-log4j12-1.7.5.jar

這些jar最好與hive環(huán)境版本一致,我們用的是CDH版梢什,所以都是從CDH目錄下找到的jar闻牡。

輸出

Clickhouse插件使用說明參考:https://github.com/mikechris/logstash-output-clickhouse

主要說下安裝過程。

說明文檔里說的bin/logstash-plugin install logstash-output-clickhouse方式绳矩,沒有安裝成功罩润,所以只能自己編譯安裝。

先clone源碼翼馆,然后進入源碼根路徑:

git clone https://github.com/mikechris/logstash-output-clickhouse.git
cd logstash-output-clickhouse

編譯:

gem build logstash-output-clickhouse.gemspec

此時割以,若沒有安裝ruby環(huán)境,按照提示安裝一下应媚,再編譯严沥。

編譯成功后,會多出一個文件

-rw-r--r--  1 root root 8704 Aug 28 11:27 logstash-output-clickhouse-0.1.0.gem

安裝:

logstash-plugin install logstash-output-clickhouse-0.1.0.gem

logstash的安裝就不多說了中姜,按照logstash官方文檔安裝就可以了消玄。

此時,如果logstash版本是5.x丢胚,可能會遇到一個錯誤:

Validating ./logstash-output-clickhouse/logstash-output-clickhouse-0.1.0.gem
Installing logstash-output-clickhouse
Plugin version conflict, aborting
ERROR: Installation Aborted, message: Bundler could not find compatible versions for gem "logstash-mixin-http_client":
  In snapshot (Gemfile.lock):
    logstash-mixin-http_client (= 5.2.0)

  In Gemfile:
    logstash-mixin-http_client (< 6.0.0, >= 5.0.0) java

    logstash-mixin-http_client (< 6.0.0, >= 5.1.0) java

    logstash-output-clickhouse (= 0.1.0) java depends on
      logstash-mixin-http_client (< 7.0.0, >= 6.0.0) java

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

按照提示翩瓜,修改gemfile:

vim logstash-output-clickhouse/logstash-output-clickhouse.gemspec

修改logstash-mixin-http_client的版本:

# Gem dependencies
  s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
  #s.add_runtime_dependency "logstash-mixin-http_client", ">= 6.0.0", "< 7.0.0"
  s.add_runtime_dependency "logstash-mixin-http_client", ">= 5.0.0", "< 6.0.0"

原來是>6且<7,改成>5且<6携龟。

然后兔跌,再次編譯、安裝峡蟋,就可以了坟桅。

按照文檔中的使用說明,配置Clickhouse連接信息即可:

output {
    #stdout { codec => json }
    #stdout { codec => json_lines }
    clickhouse {
        http_hosts => ["http://127.0.0.1:8123/"]
        table => "default.table"
        request_tolerance => 1
        #flush_size => 1000
        #pool_max => 1000
        mutations => {
            id => id
            reg_time => reg_time
        }
    }
}

數(shù)據(jù)轉(zhuǎn)化

這部分工作可以放在filter里處理蕊蝗,各種filter插件就不說了仅乓,參考logstash官方文檔吧。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蓬戚,一起剝皮案震驚了整個濱河市夸楣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碌更,老刑警劉巖裕偿,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洞慎,死亡現(xiàn)場離奇詭異痛单,居然都是意外死亡,警方通過查閱死者的電腦和手機劲腿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門旭绒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事挥吵≈馗福” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵忽匈,是天一觀的道長房午。 經(jīng)常有香客問我,道長丹允,這世上最難降的妖魔是什么郭厌? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮雕蔽,結果婚禮上折柠,老公的妹妹穿的比我還像新娘。我一直安慰自己批狐,他們只是感情好扇售,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嚣艇,像睡著了一般承冰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上食零,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天巷懈,我揣著相機與錄音,去河邊找鬼慌洪。 笑死顶燕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的冈爹。 我是一名探鬼主播涌攻,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼频伤!你這毒婦竟也來了恳谎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤憋肖,失蹤者是張志新(化名)和其女友劉穎因痛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岸更,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡鸵膏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怎炊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谭企。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡廓译,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出债查,到底是詐尸還是另有隱情非区,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布盹廷,位于F島的核電站征绸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俄占。R本人自食惡果不足惜歹垫,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颠放。 院中可真熱鬧排惨,春花似錦、人聲如沸碰凶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欲低。三九已至辕宏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砾莱,已是汗流浹背瑞筐。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腊瑟,地道東北人聚假。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像闰非,于是被迫代替她去往敵國和親膘格。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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