2013-09-25 155 views
3

我們打算從CDH3遷移到CDH4,因爲這種遷移,我們還計劃把HBASE進入了系統,因爲它也對數據的更新的一部分,CDH3我們正在使用Hive作爲倉庫。如何創建分區在HBase的表像蜂巢表分區

這裏我們在遷移時遇到了主要問題,Hive支持分區到表。我們的系統有許多不同架構的表格,有些表格的分區基於日期,我們有過去5年的數據歷史(某些表格中存在365 * 5個分區)。

我們要做到在HBase的相同的行爲也,當我瀏覽我無法找到在HBase的創建分區的解決方案。任何人都可以幫助我實現這個在HBase中創建表的過程。

我們要去HBASE的原因是,它支持更新。

如果HBASE不支持其他(如MangoDB,Cassandra)支持我們的行爲。

如果我們至少可以找到解決方案的一些解決方案,那麼它非常有幫助。

回答

0

恐怕你不能像在Hive中那樣在HBase中分區數據。這兩種工具在設計和行爲上都各不相同。 HBase中的數據已經爲您分區了,因爲HBase劃分了密鑰空間,每個分區就是我們所說的表格。如果您仍然需要更細粒度的分區,您可以明智地使用列族。

例如,你可以有一個列族每一年。所以,你會有一個5列家庭的桌子。


編輯:

如果你需要像您已在最後的評論中提到的,你可以創建一個預分裂表。根據您的方便,您可以選擇區域的開始和結束行鍵。就像每天有一個分區,當天的第一個和最後一個條目分別是該特定區域的起始行和結束邊界。

+0

很高興見到您的回覆,但有一天,我們幾乎10+數百萬條記錄,所以我們希望有明智的一天分區,這將創造這麼多列家族,這不是一個好的設計。我們正在爲每個模式尋找明智的分區。有什麼辦法嗎? – GHK

+0

好點。讓我想一會兒... – Tariq

+0

如果將這些記錄中的每一個記錄作爲一行,rowkey將以某一特定日爲前綴,那麼會出現什麼情況? – Tariq

3

的HBase有一個概念,接近到哪個分區被稱爲region。但是,HBase中的這些分區不像Hive(或RDBMS)分區那樣工作。每個區域都有一系列的按鍵,但您可以通過分割或分割將關鍵區域分割成更小的區域 - 例如如果您的原始區域持有0-9,你可以將其劃分成兩個較小的區域0-4和5-9或十個分區0,1,2 ......等

如果您的密鑰會複合,這樣的日期將是它的第一部分,隨後無論你的關鍵是今天你可以預先拆分hbase,以便每一天會得到一個或多個區域。

但是,您應該注意,最重要的字節順序的一個鍵會減慢寫入速度(如果您正在執行一次性加載,則可能不會有問題),稱爲「熱點」問題 - 您能讀到它和樣品的方法克服它在一個blog post by Alex Baranau from sematext

+0

假設我有一個名爲'demoschema'的模式,並且它有一個名爲'transtable'的表,它將有每日分區,每個分區有超過1000萬條記錄,請你簡單介紹一下這是怎麼回事以適應HBASE。 – GHK

+0

你想在這張桌子上儲存多少年?你現在的鑰匙是什麼? –

+0

目前在Oracle中,TID是主鍵,當我們將這些數據帶給Hive時,我們會放入明智的分區。目前我們有5年的Hive歷史數據作爲日常分區。所以我們在Hive的系統中有大約365 * 5個分區,每天它會創建一個新分區,並將1000萬條新記錄放入該分區。 – GHK