2013-02-21 52 views
0

背景:如何創建從配置單元表到關係數據庫的數據管道

我有一個Hive Table「log」,其中包含日誌信息。該表每小時加載一次新的日誌數據。我想在過去的2天內對日誌做一些快速分析,所以我想將最近48小時的數據提取到我的關係數據庫中。

爲解決上述問題,我創建了一個由HIVE SQL查詢加載的登臺配置單元表。在將新數據加載到登臺表後,我使用sqoop Query將新登錄加載到關係數據庫中。

問題是sqoop正在將數據加載到BATCH中的關係數據庫中。所以在任何特定的時間,我只有部分時間的日誌。

這導致錯誤的分析輸出。

問題:

1)。如何使此Sqoop數據加載事務性,即所有記錄都導出或不導出。 2)。在Hive Table - > Staging Table - > Relational Table的整個過程中,構建此數據管道的最佳方式是什麼。

技術細節:

的Hadoop版本1.0.4
Hive- 0.9.0
Sqoop - 1.4.2

回答

0

您應該能夠通過使用選項與sqoop做這個叫--staging-table。它的功能基本上是作爲用於分段導出數據的輔助表格。階段性數據最終在單個事務中移動到目標表中。所以通過這樣做,你不應該有部分數據的一致性問題。

(來源:Sqoop documentation

+0

我有一個主HIVE表(主),從中查詢並存儲數據到第二個配置表與關係數據庫相同。現在,如果我使用--staging-table選項,那麼它將創建一個臨時表。恕我直言,這將是一個巨大的性能打擊,因爲我正在處理大量的數據。有沒有更好的方法來做到這一點? – SleepyThread 2013-02-21 21:15:37

1

蜂房和Hadoop是這樣偉大的技術,可以讓您的分析裏面MapReduce任務的運行,利用多個節點進行分析非常快。

將其用於您的利益。首先分區你的Hive表。 我想你會將所有日誌存儲在單個Hive表中。因此,當你運行你的查詢和你有一個

SQL .... WHERE LOG_DATA> '17 /二千零一十三分之十00:00:00'

然後你effictivelly查詢所有數據你有收集到目前爲止。 相反,如果你使用的分區 - 比方說每天一個,你可以在查詢定義

WHERE p_date = 20131017或p_date = 20131016

蜂巢被分割,現在知道要只讀這兩個文件 所以我們說你每天獲得10 GB的日誌 - 那麼HIVE QUERY應該在幾秒鐘內在一個體面的Hadoop集羣中成功