使用Spark跨集群同步Hive資料

2021-10-17 03:18:19 字數 1502 閱讀 8903

本文適用有入門spark基礎的同學,一些最基礎知識不再贅述

通過閱讀本文即可掌握使用spark跨集群同步hive資料的技巧!

眾所周知,業界比較成熟的同步資料工具是sqoop,它是連線關係型資料庫和hadoop的橋梁

比較常用的場景是從mysql等rdb同步到hive、hbase或者將hive、hbase的資料匯出到mysql

但是在天池技術選型時選用了用spark來從大資料集群同步資料到大禹集群

下面來比較一下這兩種方式:

①sqoop使用配置化,spark需要**開發

學習成本上使用spark稍微高一些,但是同步資料複雜一些sqoop的配置也不見得很簡單

②sqoop在同步資料進行儲存時仍需要啟動mapreduce任務,spark使用自身框架進行記憶體計算

在效率上spark比sqoop要高

③sqoop1和sqoop2不能完全相容,且網上在不同集群的hive間同步資料的資料也比較少,出現問題時不保證能解決

所以選用了spark作為天池的資料同步方式

下面就來介紹如何使用spark進行資料同步

1.抽取資料檔案

1.1 建立spark入口物件指定源資料的hive元資料服務

擴充套件:在遠端連線hive時hive有兩種服務hive metastore server和hiveserver2

hiveserver2是jdbc連線,使用這種方式會占用資料本地集群的計算資源(常用預設埠10000的那種)

spark連線hive可以使用hive metastore server,這樣只需連線hive的元資料,通過元資料記錄的資料路徑拉取資料使用spark對資料進行計算(常用預設埠9083的那種)

在建立sparksession物件時動態傳參傳入源資料集群的hive metastore server位址

1.2 將spark的hadoopconfig物件切換到源資料集群

連線了大資料集群的hive metastore server元資料服務,spark會根據裡面記錄的元資料資訊去拉取資料,而其它集群記錄的是其它hdfs集群的路徑

預設根據配置檔案本集群跑spark程式時連線的是本集群的hdfs位址,所以根據元資料獲取的資料路徑會找不到

而metaserver元資料服務位址屬於在spark建立時指定的,在這個物件生命週期內無法被改變,但是hadoop相關配置是可以在執行時切換的

所以需要在取數時切換hadoop配置

1.3 通過sql指定需要獲取的資料將資料載入到目標集群的hdfs檔案中

先通過hive語法刪除對應分割槽,由於這個埋點表是外部表,還需手動刪除hdfs上的資料檔案

上例的埋點表在天池中抽數算是最複雜的,若還需要抽取其它表根據抽取規則,一套流程下來即可實現

附:阿里雲sqoop使用說明:

Elasticsearch 跨集群同步

zsearch是目前公司內最大的elasticsearch服務平台,隨著業務的深入,越來越多的關鍵鏈路使用者對資料的可用性和容災能力提出更高的需求,而在這塊領域 社群一直沒有完整的解決策略,原生的 snapshot and restore 只能做快照的恢復,不能做到實時同步 業內主流的佇列分發模式 ...

使用Docker搭建Spark集群

本次使用big data europe docker spark apache spark docker image方便地進行spark開發環境的搭建。首先需要先準備乙個docker compose.yml檔案,檔案內容如下 version 2 services spark master image...

Spark在Ambari集群環境的使用

進入安裝sparkclient的節點 su hdfs vi text.txt 隨便寫幾行東西 建立目錄 hdfs dfs mkdir user hdfs test 上傳檔案 hdfs dfs put test.txt user hdfs test 檢查檔案是否在 hdfs dfs ls user h...