Kettle實現Oracle數據導入HBase


某個生產數據庫(oracle)中單表記錄了上億的車輛定位數據,應用系統的軌跡回放功能已出現明顯的加載卡頓現象(優化了索引,查詢指定車輛一段時間內的定位數據,差不多也需要15秒左右)。考慮到常規分表的方案治標不治本、同時也是為其他更大量級數據項目積累經驗,我們決定嘗試使用hbase來存儲定位數據。要做的第一步就是需要將數據導入到hbase里。由於我們已經建立了CDH環境,且之前已經通過里面的streamset套件成功實現了kafka定位數據導入到hive,故一開始的決定是繼續使用streamset來完成數據導入。然而這種方案折騰了很久也沒走通,也是各種坑(踩坑參考這個帖子:https://blog.csdn.net/JJBOOM425/article/details/108093283),且受運行環境限制我們沒法對oracle進行基礎配置,最后不得不轉而考慮使用kettle。

環境說明:

——Kettle8.3,windows客戶端

——源數據庫:Oracle11g

——目標數據庫:CDH6.3.2、HBase2.1.0,集群5個節點

 (說明:kettle現在已經不叫這個名字了,官方的名字是pentaho data integration。kettle的版本與支持的cdh版本是有對應關系的,如果下載錯了,那里面對應的插件驅動可能版本不對導致各種錯誤。官方說明目前kettle8.3只支持cdh6.1、6.2,我們的是cdh6.3,還好最后實測是支持的。還好還好,嘿嘿)

 

首先在kettle里新建一個轉換,先在輸入下添加一個表輸入,用來獲取oracle中的數據;然后在bigdata下添加一個hbase output,用來接收oracle數據,寫入hbase。

 具體配置如下:

1、表輸入

jdbc鏈接配置好:

 

sql語句,因為是測試用,所以將2021年1月1號之后的數據都取過來。實際要用的時候,應該是獲取增量數據。后續再完善。注意這里取數的時候,用車牌號+車牌顏色+定位記錄的時間3個字段組成了一個名為‘rowkey’的字段,用來作為hbase表中的RowKey。下面在hbase配置中還會說明。

 

 

2、hbase output:

首先新建hadoop cluster的鏈接配置。這個過程很多坑。

kettle會默認給出hadoop中服務的hostname、port,如果你沒有改過,那恭喜你,直接就能用。這一塊根據cdh中的實際配置來填寫就好。其中我理解hdfs、jobtracker、zookeeper這3項是必須的,其他的oozie、kafka沒必要。

 

 

 配置完成后測試一下看看結果(那個user home directory access測試沒通過,不影響。oozie、kafka也不影響)。如果你看到下圖恭喜你連通性OK了。如果紅叉,一個個改吧。

接着你需要去服務器上找一些必要的配置文件,kettle要用到它們。你需要去服務器master節點上找到這個文件,一般是在 /etc/hbase/conf.cloudera.hbase/ 下。參照其他帖子,同時還有幾個配置文件需要copy。如下圖所示,可以把紅框里這6個文件都copy到本機目錄先保存。

 

 之后將這6個xml配置文件copy到kettle的plugins\pentaho-big-data-plugin\hadoop-configurations\cdh61  目錄下。

 

 進入lib目錄,將client、pmr目錄中的驅動全部copy放到lib目錄下。

 

接着修改pentaho-big-data-plugin目錄下的plugin.properties文件,將active.hadoop.configuration設置為cdh61,跟你上面那個目錄名保持一致,這樣kettle就知道生效的配置文件跟驅動在哪個目錄下了。

 

 

 

 再回到hbase output的主界面,在configure connection中,瀏覽添加hbase-site.xml文件。注意因為是windows環境,你需要在前面手工添加file:///

  

切換到crate/edit mappings,點擊get table names,如果一切順利的話,你應該能在下拉列表里選擇數據導入目標表(hbase中的表創建這一步可以通過hbase shell手工完成,此處略)。注意,你自己手寫表名是無效的,如果get table names沒有,或者出錯,那就慢慢找原因吧,我在這一步卡了好久。我的經驗,多半是因為xml文件的版本不對,或者文件位置沒放對,或者改了kettle配置沒重啟等原因導致的(前提是kettle與cdh的版本是對應的,否則免談,或者你自己去下載對應的驅動jar包)。

按照我標注的順序操作吧。其中第4步中,將key標記為Y,這個就是hbase表中的Rowkey。第5步中選擇string類型,我們是按照車牌號+車牌顏色+時間組成字符串來作為rowkey,在后續的實際應用系統中,也是通過這個rowkey來快速查詢定位數據。hbase的rowkey設計是個關鍵因素,需要結合實際的查詢場景來設計。

保存完這個mapping,沒有意外的話,kettle會將這個配置信息,作為一張表的數據寫入hbase里。

 

 再回到前面的頁簽,分別通過get table names 和 get mappings for the specified table來或者hbase的表名跟映射名。注意還是手寫無效哦。到此,全部配置就結束了。

 

 跑起來吧:

 

 不容易啊,終於跑起來了。最后附上生產環境真實的配置圖:

 

 

kettle作業設置略。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM