標籤:
本文利用twitter做為資料來源,介紹使用Oracle大資料平台及Oralce Data Integrator工具,完成從twitter抽取資料,在hadoop平台上處理資料,並最終載入到oracle資料庫。
Data Integration分為三個階段:擷取、整理、分析和決策。
本文從實際出發,講述大資料處理的真實案例,而不是簡單的講述理論知識。首先會使用flume從twitter載入資料到HDFS,其實是載入到Hive資料庫,然後利用(Oracle Data Integrator)ODI來實現逆向工程,並轉換Hive中的JSON資料,最終將處理後的結構化資料載入到關係型資料Oracle中。
涉及的組件
要搭建一個完整的hadoop平台是一件比較費事的工作,本文不會在這塊做太多描述 ,在本樣本中會直接利用oracle提供的大資料虛擬機器,可直接從網上下載使用(here),裡面已經配置有CDH、Hive等組件,可直接拿來學習使用。在本樣本中,會用到虛擬機器中如下大資料平台的組件:
1. Hadoop Framework
2. HDFS
3. Hive
4. Flume
5. ZooKeeper
5. Oracle Database
6. Oracle Data Integrator
各組件不在此作詳細說明,每個組件的說明和使用可參考網路中其它文章。為什麼使用flume進行資料擷取?因為flume通過源和目標端的配置,可以很容易實現從twitter擷取資料,並載入到HDFS:
本樣本中使用一個現成的flume-twitter外掛程式,從twitter中擷取資料。該外掛程式使用JAVA開發,利用了一個開源的SDK-twitter4j,此組件完整覆蓋了twitter的API。利用該flume外掛程式,不用再自己編寫代碼,可實現直接從twitter擷取資料,並根據需要投遞到自己希望的目標端平台。
操作步驟
第一步是在twitter上建立一個帳號,訪問https://dev.twitter.com/開發人員版塊,然後在https://apps.twitter.com/建立訪問資料需要的key和令牌,這些會在flume外掛程式中配置時用到,申請完成之後的介面可能如下:
如果不使用oracle提供的大資料平台虛擬機器,則需要在自己安裝的系統中啟動Hadoop及其它相應的平台,如Hive、zooKeeper等,當然還需要安裝配置ODI 12c。如果使用的是Oracle虛擬機器,則啟動相關的服務即可。
配置flume從twitter擷取資料。首先下載flume軟體,並拷貝相應的lib到flume的指定目錄,比如添加下載的jar到flume的classpath:cp /usr/lib/flume-ng/plugins.d/twitter-streaming/lib/ /var/lib/flume-ng/plugins.d/twitter-streaming/lib/
建立flume.conf, 根據前面的twitter’s key和hadoop編輯此檔案,差不多是下面這樣:
接下來配置Hive
1. 需要能解析JSON資料的序列類,可以從此處下載一個編譯好的JSON SerDe。
2. 建立Hive需要的目錄和許可權:
$ sudo -u hdfs hadoop fs -mkdir /user/oracle/warehouse
$ sudo -u hdfs hadoop fs -chown -R oracle:oracle /user/hive
$ sudo -u hdfs hadoop fs -chmod 750 /user/oracle
$ sudo -u hdfs hadoop fs -chmod 770 /user/oracle/warehouse
3. 配置Hive的Metastore,本樣本是在mysql中建立,在此不再詳述。
4. 在Hive中建立tweets表:
回到flume,開始抓取資料:
1. 在hdfs中建立/user/oracle/tweets目錄 ,用於存放flume抓取的資料,同時,也是hive表中外部參考路徑所在
2. 使用下面的語句啟動flume
在作業記錄中可以看到flume在不斷將抓取到的資料寫入對應目錄下的檔案:
讓flume agent運行幾分鐘,確認已經捕獲到了資料之後可以停止此進程。然後在hadoop web控制台可以查看到hdfs對應目錄下的資料檔案:
查看任何一個資料檔案的內容,如下:
資料都是基於json格式的,可以在hive中查看抓取的記錄數:
經過flume幾分鐘的資料幫浦,我們已經得到了16161條記錄。這就是大資料時代資料產生的威力。
大資料實踐:ODI 和 Twitter (一)