2016-11-28 47 views
0

該場景是我需要處理一個文件(Input),並且對於每個需要檢查輸入文件中某些字段是否與存儲在Hadoop集羣中的字段匹配的記錄。在MRJob中連接HIVE

我們正在考慮使用MRJob來處理輸入文件,並使用HIVE從hadoop集羣中獲取數據。我想知道是否可以將MREob模塊內部的HIVE連接起來。如果是這樣怎麼辦?

如果不是什麼將是完成我的要求的理想方法。

我是Hadoop,MRJob和Hive的新手。

請提供一些建議。 「

回答

0

」與存儲在Hadoop集羣中的字段匹配「。 - >你的意思是你需要搜索這個文件中的字段是否也存在?

大約需要掃描多少個文件?

一個解決方案是加載HBase表中的每個項目和輸入文件中的每個記錄,從表中「GET」記錄。如果GET成功,那麼記錄存在於HDFS的其他地方,否則它不會。您需要每個HBase記錄的唯一標識符,並且輸入文件中也應該存在相同的標識符。

您也可以連接到Hive,但架構需要是剛性的,以便您的所有HDFS文件都能夠加載到單個Hive表中。 HBase並不關心列(只有ColumnFamilies需要)。 MapReduce和Hive的另一個缺點是與HBase(接近實時)相比,速度會很低。

希望這會有所幫助。

+0

是的。例 我的輸入文件是這樣 輸入文件: 名稱,ADD1,ADD2,郵編, 馬克,31楂,XXX,WF1 5XY 我需要檢查是否字段「ADD1」的價值輸入文件中名稱爲「Mark」的「31 Maybush」與羣集中的數據名稱相同。 – user1703319

+0

所有文件的模式是否完全相同?如果是,那麼你可以創建一個Hive表,並將你擁有的所有數百/數千個文件加載到新的Hive表中。然後,您可以連接到從MapReduce運行Hive查詢。您的Hive查詢將如下所示:SELECT * FROM huge_hive_table WHERE add1 = '31 Maybush'AND name ='Mark';當然,當讀取每個輸入文件行時,您需要動態更改31 Maybush和Mark。 – AkashNegi

+0

上述方法的問題在於Hive中的每個查詢都有一個MR作業,因此我們正在比較每一行,因此MR作業將針對輸入文件中的每一行運行。如果你有2000行然後2000個MR作業進行比較。 – AkashNegi