dataX從mysql導出數據到hbase

業務數據庫中存了大量的歷史數據,導致在根據業務條件查詢數據的時候效率太低。因此考慮將原始的業務數據通過SQL先做一遍處理後放到中間表,然後再把中間表的數據同步到hbase,以後直接從hbase查詢數據。當然這個還涉及到增量數據如何同步,如何保證增量數據不丟失等問題,不在這裏記錄。這裏只記錄mysql中的數據如何全量同步到hbase。

異構數據源之間的數據遷移工具比較多,常用的有kettle、sqoop、dataX、streamsets等。對於mysql數據遷移到hbase來說,sqoop和dataX的相關資料比較多,因此考慮從這兩個下手。

首先是sqoop,作爲Hadoop內生的數據遷移工具,對於關係型數據庫與hdfs之間的遷移轉換支持比較好。機制是將命令轉成MapReduce程序進行數據的導入導出。但是從sqoop官網上看,sqoop最近的更新時間是2019年1月18,已經一年多沒有維護了。在使用的時候,由於我們使用的hbase是2.1.8版本的,發現在將數據導入到hbase的時候會報錯:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.HBaseAdmin.<init>(Lorg/apache/hadoop/conf/Configuration;)V
        at org.apache.sqoop.mapreduce.HBaseImportJob.jobSetup(HBaseImportJob.java:163)
        at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:264)
        at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:673)
        at org.apache.sqoop.manager.MySQLManager.importTable(MySQLManager.java:118)
        at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:497)
        at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
        at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
        at org.apache.sqoop.Sqoop.main(Sqoop.java:236)

查看網上類似的問題,發現出現這個問題的都是2.x版本的hbase。這個問題應該是版本不支持導致的。解決方式也有,sqoop導入命令執行的時候會將生成的MapReduce程序打成jar包來運行,因此可以考慮對其進行反編譯後,修改不一致的代碼。但這樣實在是沒太大意義。因此我們考慮使用dataX來試試。

 

讓人鬱悶的是在看dataX得Git庫時,發現它對支持的hbase版本只寫了0.x和1.x,感覺對2.x也支持。但好在經過嘗試發現是支持的。

datax是基於Python2編寫的,因此需要配置Python2環境,同時也要jdk環境。具體安裝使用教程網上很全面了,不再描述。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章