2012-10-01 26 views
1

我們正在美國處理2400萬家企業。我們現在在Hadoop上使用HDFS。我們希望加快調試的臨時查詢。例如。現在需要幾分鐘的時間來從我們的5個服務器集羣中的2400萬企業中挑出一個業務。Hadoop上的特別查詢

Hbase似乎是我發現可以完成這項工作的唯一系統。 Hive似乎沒有這樣做。

這是我們的模式,當前存儲爲HDFS中製表符分隔的文本文件。

place_id name value 
1 Title Bamboo Garden 
1 Title Bamboo Garden Restaurant 
1 Phone 425-555-555 
1 Phone 425-444-444 
1 Address 123 Bellevue Way 
2 Title Burger King 
2 Phone 425-333-3333 

我們選擇這個名稱值對來安裝附加數據和字段的靈活性。例如。如果我們想要結合兩個數據集,我們可以輕鬆地「貓」它們。另外,添加更多新字段非常簡單。這個模式很早就被設計出來了,很少有機會改變它。

我們發現很難在Hbase中對它進行建模,因爲Hbase不支持重複密鑰。正如你可以在上面的例子中看到的,每個企業可以有多個電話號碼,標題,註釋等

所以我的問題

  1. 什麼是加快這樣的即席查詢在 Hadoop的想法?
  2. 將HBase數組存儲在 HBase中的最佳做法是什麼?
  3. 如何使用重複鍵對此鍵值對進行建模 HBase?

編輯讀書問題在意見後: 最常見的即席查詢是返回一個企業的所有信息與給定的ID。還有其他很好的特別查詢支持,例如返回給定郵政編碼和標題的業務。

在使用RDBMS支持即席查詢的建議中是一個很好的建議。但我希望有一個系統支持流式和即席查詢。我們的臨時查詢主要用於調試。如果我們在數據中發現錯誤,我們仍然需要驗證它是否是我們的Hadoop數據中的錯誤,因此查詢RDBMS是不夠的。

最常見的流處理查詢是加入兩個大數據集並匹配兩個數據集之間的業務。與ad hoc查詢相比,流處理查詢支持需求更多,因此我們選擇Hadoop。我們的特別查詢主要用於調試。

+2

我有點不清楚爲什麼你不只是使用普通的SQL數據庫。這些數據庫可以輕鬆處理2400萬條記錄,而且您可以使用它們進行非常複雜的搜索。我意識到NoSql是所有的範圍,但* [威爾史密斯的聲音] * daaammn。 –

+0

你的查詢是什麼樣的?這將決定你的HBase模式/密鑰應該被組織。 – Suman

+0

鯊魚可能對你有些興趣:http://shark.cs.berkeley.edu/ – zengr

回答

2

在Hadoop中加速類似特殊查詢的想法是什麼?

我不認爲你應該嘗試。 Hadoop用於批量分析,而不是記錄抓取。


什麼是存儲字符串數組中的HBase的最佳做法?

有幾種方法可以做到這一點。如果您沒有更新,請以串行方式將字符串數組存儲在一個字符串中。在名爲「電話」的單元格中有類似425-555-5555^425-444-444的內容。在Pig和Hive中,可以使用一些簡單的字符串拆分實用程序將其轉換回數組。

如果您經常添加數字,那麼您可能會將這些單元稱爲"phone1","phone[2]"等,這使得Pig和Hive的處理非常困難。


如何在HBase的重複鍵這個鍵值對的模型?

基本上,您在SQL模式中實現的是雙重嵌套的映射,這正是HBase的作用。所以建模數據應該很容易。

你需要在這裏複製密鑰。因爲這看起來很單一,所以把業務的頭銜當作關鍵。不過,你確實想找出一種使其獨特的方法,因爲我認爲「漢堡王」可能存在於多個地方。我建議的一件事是將業務名稱作爲關鍵的一部分,但添加一些使其獨特的東西。

例如:"Bambo Garden^1","Burger King^2""Bamboo Garden^123 Bellvue Way"

在這些鍵下,有電話號碼,地址和其他任何東西。

您仍然可以像以前一樣添加列,因爲您不再指定模式。你所有的舊代碼仍然可以工作,並且會在他們出現時忽略新列。

+0

感謝你的想法。HBase中的字符串數組顯得有點難看。我們可以使用place_id作爲唯一鍵。我的問題是如何存儲多個電話,標題,評論等。這將回到問題2你提出的解決方案是不是查詢不友好或更新不友好。不過謝謝你的想法。 –

0

正如羅伯特在評論中提到的,您最好打賭的可能是定期的RDBMS。

關於即席查詢和存儲數組的方式 - 您希望執行哪些查詢(這極大地影響了您在HBase中建模的方式)。

關於你的第三個問題。存儲這個最簡單的方法(可能不是我上面提到的最好的方法)是將「名稱」設置爲限定符(「列」)。如果你有多個值(例如電話號碼),你可以有多個限定符(假設列族是f,你有f:phone1,f:phone2 ..),你可以通過前綴獲取列(所有列首先是手機)

+0

請參閱我的更新以瞭解您的問題的答案。由於我們擁有數百個列名,因此轉換爲hbase似乎並不簡單。 –

+0

由於HBase列是在您第一次編寫HBase列時創建的(您並不是預定義架構僅限於表和列族) –

+0

如何使用AVRO將其序列化爲二進制文件並將其另存爲列,從而避免重複。 –

2

豬/蜂巢主要用於批量處理,而不是用於實時查詢的adhoc ..

Apache Drill已經拉開,這是互動的即席查詢Google Dremel實現。可能需要一段時間才能實現Apache Drill的穩定性。直到那時您纔可以使用Google BigQuery雲服務,該服務用於交互式分析海量數據集 - 高達數十億行。

Apache Drill的目標之一是將其與HBase和HDFS等數據源結合使用。因此,應該可以使用Apache Drill作爲HDFS中的數據查詢引擎。

+0

請不要過去重複的答案。如果問題是重複的,請標記或關閉。如果不是,請根據問題的具體問題量身定製答案。 –

+0

兩個不同的問題可能會有相同的答案。我沒有看到它的問題。 –

+1

除了被垃圾郵件之外,還沒有人問過你提供的答案。你在你的答案中提到了Hadoop * no。在任何其他情況下,我會考慮這個答案垃圾郵件,只是刪除它。我讓你知道,以便將來你不會在多個問題上發表重複答案。 –