'HBase 的那一點知識(文末附教程)'

HBase 數據庫 新浪 物理 程序員高級碼農 2019-08-09
"

1、HBase的存儲結構是什麼?該結構有什麼優勢?

HBase是列式存儲數據庫,列式存儲數據庫的出現主要基於這樣一種假設:對於特定的查詢,而不是所有的值都是必須的(即:可以只查詢特定的列)。

另外,列式存儲結構由於是基於列存儲的,而列的數據類型天生是相似的,更加有利於壓縮。

2、什麼是HBase的短網址,舉個栗子?

HBase短網址,即Hush,Hush允許用戶將長網址映射為短網址(short URL)。現在國內有很多短網址提供商,比如新浪短網址,我輸入:

http://www.chenjt.info/wp-login.php?redirect_to=http%3A%2F%2Fwww.chenjt.info%2Fwp-admin%2Fthemes.php&reauth=1

這麼長的一個URL,然後通過短網址映射為:http://t.cn/RJPIcs2

其實這個原理很簡單,就是讓第三方做一個簡單的映射關係,從而將長網址轉為短網址。

3、HBase中的列族與列的特點,它們的個數有什麼限制嗎?列值有數據類型和長度限制嗎?

一行有若干列,若干列又構成一個列族(column family),這不僅有助於構建數據的語義邊界,還有助於設置某些特性(比如壓縮),或者指示它們存儲在內存中。

一個列族的所有列存儲在同一底層的存儲文件裡,這個存儲文件叫做HFile

列族的數量是有限制的:原因是,當前的實現中有少許的缺陷,使得列族的數量只限於幾十或者更少。(注意:不要為一張表設置過多的列族,特別是當數據量大的列族和數據量小的列族混用)。

與列族的數量有限制相反,列的數量沒有限制:一個列族裡可以有數百萬個列,列值也沒有類型和長度的限定。

4、在HBase中如果某個列的之前存入了值,後面有些列沒有存儲值,數據會存儲NULL值嗎?還是沒有佔存儲空間呢?

在某些固定模式的數據庫中,如果沒有值的地方必須存儲NULL值,但是在HBase的存儲架構中,可以乾脆省略整個列,換句話說,空值是沒有任何消耗的:它們不佔用任何存儲空間。

舉個栗子:

"

1、HBase的存儲結構是什麼?該結構有什麼優勢?

HBase是列式存儲數據庫,列式存儲數據庫的出現主要基於這樣一種假設:對於特定的查詢,而不是所有的值都是必須的(即:可以只查詢特定的列)。

另外,列式存儲結構由於是基於列存儲的,而列的數據類型天生是相似的,更加有利於壓縮。

2、什麼是HBase的短網址,舉個栗子?

HBase短網址,即Hush,Hush允許用戶將長網址映射為短網址(short URL)。現在國內有很多短網址提供商,比如新浪短網址,我輸入:

http://www.chenjt.info/wp-login.php?redirect_to=http%3A%2F%2Fwww.chenjt.info%2Fwp-admin%2Fthemes.php&reauth=1

這麼長的一個URL,然後通過短網址映射為:http://t.cn/RJPIcs2

其實這個原理很簡單,就是讓第三方做一個簡單的映射關係,從而將長網址轉為短網址。

3、HBase中的列族與列的特點,它們的個數有什麼限制嗎?列值有數據類型和長度限制嗎?

一行有若干列,若干列又構成一個列族(column family),這不僅有助於構建數據的語義邊界,還有助於設置某些特性(比如壓縮),或者指示它們存儲在內存中。

一個列族的所有列存儲在同一底層的存儲文件裡,這個存儲文件叫做HFile

列族的數量是有限制的:原因是,當前的實現中有少許的缺陷,使得列族的數量只限於幾十或者更少。(注意:不要為一張表設置過多的列族,特別是當數據量大的列族和數據量小的列族混用)。

與列族的數量有限制相反,列的數量沒有限制:一個列族裡可以有數百萬個列,列值也沒有類型和長度的限定。

4、在HBase中如果某個列的之前存入了值,後面有些列沒有存儲值,數據會存儲NULL值嗎?還是沒有佔存儲空間呢?

在某些固定模式的數據庫中,如果沒有值的地方必須存儲NULL值,但是在HBase的存儲架構中,可以乾脆省略整個列,換句話說,空值是沒有任何消耗的:它們不佔用任何存儲空間。

舉個栗子:

HBase 的那一點知識(文末附教程)

上面的這些值由於插入的次數不同,並且存儲在多個版本中,但是仍然能夠看作是所有列以及這些列的最新版本(即每一列的最大tn)的組合。

5、HBase讀取數據的模式?

(Table,RowKey, Family, Column, Timestamp) -> Value

通常,我們沒有去指定Timestamp這時候,默認是用最新的時間戳(如果版本號大於1,即存儲了多個時間戳的數據)。

6、關於HBase中的HFile和region

HFile:一個列族的所有列存儲在同一個底層的存儲文件裡,這個存儲文件叫做HFile(默認是64KB,涉及到HBase架構)。

Region:HBase中的region等同於數據庫分區中的範圍劃分(range partion),它們可以被分配到若干臺物理服務器上以均攤負載,因此提供了較強的擴展性。一個表初始的時候只有一個region,當用戶開始向表中插入數據(這裡應該是針對一個列族的存儲單元,當已使用的存儲空間大小超過了大小限制,region將發生拆分),系統會檢查這個region的大小,如果超過最大值(默認是256M:如果表的數據量非常大,可以將該值提高),會將region將發生拆分操作。

8、HBase中數據更新的流程

HBase中的預寫日誌(write-ahead log, WAL),即每次更新數據時,都會將數據記錄在提交日誌(commit log)中,然後才將這些數據寫入內存中的memstore(默認大小是64M)中,一旦內存保存的寫入數據的累計大小超過了一個給定的最大值,系統就會將這些數據移出內存作為HFile文件刷寫到磁盤中。數據移出內存之後,系統會丟失對應的提交日誌,只保留未持久化到磁盤中的提交日誌。

9、HBase中數據的讀取是從哪裡讀取的?

HBase中數據的讀取是兩部分數據合併的結果:(1)memstore中還沒有寫入磁盤的數據;(2)磁盤上的存儲文件。

10、HBase中memstore中數據刷寫磁盤的方式

隨著memstore中的數據不斷的刷寫到磁盤中,會產生越來越多的HFile文件,在HBase中,會將多個文件合併成一個較大的文件,而合併有兩種類型:

minor合併(minor compaction)和major合併(major compaction)。

minor合併:將多個小文件重寫為數量較大的大文件,減少存儲文件的數量。major合併:將一個region中一個列族的若干個HFile重寫為一個新HFile,該合併能夠掃描所有的鍵/值對,順序重寫全部數據,重寫數據的過程中略過了刪除標記的數據(如果沒有合併前,進行刪除數據,只是將該數據標記為刪除,在客戶端讀取時,會略過,但是實際上未刪除)。上述的major合併,對於那些超過版本號限制的數據以及生存時間到期的數據,在重寫數據時就不再寫入磁盤中。

11、什麼是大數據

“數十億行×數百萬列×數千個版本=TB級或PB級的存儲”

12、集群中時間同步的方法

方法:在集群中運行NTP或同等功能的應用來同步集群的功能。

13、Linux文件句柄是什麼?在HBase中需要注意什麼?

命令:ulimit -n 可以查看一個進程中允許打開的最大文件句柄數量(系統默認值是1024)

怎麼樣,是不是有個大致的瞭解了?沒有了解也不怕,小編這裡有一套大數據視頻教程可以供大家學習,

大家只需要私信小編“學習”獲取即可~

"

1、HBase的存儲結構是什麼?該結構有什麼優勢?

HBase是列式存儲數據庫,列式存儲數據庫的出現主要基於這樣一種假設:對於特定的查詢,而不是所有的值都是必須的(即:可以只查詢特定的列)。

另外,列式存儲結構由於是基於列存儲的,而列的數據類型天生是相似的,更加有利於壓縮。

2、什麼是HBase的短網址,舉個栗子?

HBase短網址,即Hush,Hush允許用戶將長網址映射為短網址(short URL)。現在國內有很多短網址提供商,比如新浪短網址,我輸入:

http://www.chenjt.info/wp-login.php?redirect_to=http%3A%2F%2Fwww.chenjt.info%2Fwp-admin%2Fthemes.php&reauth=1

這麼長的一個URL,然後通過短網址映射為:http://t.cn/RJPIcs2

其實這個原理很簡單,就是讓第三方做一個簡單的映射關係,從而將長網址轉為短網址。

3、HBase中的列族與列的特點,它們的個數有什麼限制嗎?列值有數據類型和長度限制嗎?

一行有若干列,若干列又構成一個列族(column family),這不僅有助於構建數據的語義邊界,還有助於設置某些特性(比如壓縮),或者指示它們存儲在內存中。

一個列族的所有列存儲在同一底層的存儲文件裡,這個存儲文件叫做HFile

列族的數量是有限制的:原因是,當前的實現中有少許的缺陷,使得列族的數量只限於幾十或者更少。(注意:不要為一張表設置過多的列族,特別是當數據量大的列族和數據量小的列族混用)。

與列族的數量有限制相反,列的數量沒有限制:一個列族裡可以有數百萬個列,列值也沒有類型和長度的限定。

4、在HBase中如果某個列的之前存入了值,後面有些列沒有存儲值,數據會存儲NULL值嗎?還是沒有佔存儲空間呢?

在某些固定模式的數據庫中,如果沒有值的地方必須存儲NULL值,但是在HBase的存儲架構中,可以乾脆省略整個列,換句話說,空值是沒有任何消耗的:它們不佔用任何存儲空間。

舉個栗子:

HBase 的那一點知識(文末附教程)

上面的這些值由於插入的次數不同,並且存儲在多個版本中,但是仍然能夠看作是所有列以及這些列的最新版本(即每一列的最大tn)的組合。

5、HBase讀取數據的模式?

(Table,RowKey, Family, Column, Timestamp) -> Value

通常,我們沒有去指定Timestamp這時候,默認是用最新的時間戳(如果版本號大於1,即存儲了多個時間戳的數據)。

6、關於HBase中的HFile和region

HFile:一個列族的所有列存儲在同一個底層的存儲文件裡,這個存儲文件叫做HFile(默認是64KB,涉及到HBase架構)。

Region:HBase中的region等同於數據庫分區中的範圍劃分(range partion),它們可以被分配到若干臺物理服務器上以均攤負載,因此提供了較強的擴展性。一個表初始的時候只有一個region,當用戶開始向表中插入數據(這裡應該是針對一個列族的存儲單元,當已使用的存儲空間大小超過了大小限制,region將發生拆分),系統會檢查這個region的大小,如果超過最大值(默認是256M:如果表的數據量非常大,可以將該值提高),會將region將發生拆分操作。

8、HBase中數據更新的流程

HBase中的預寫日誌(write-ahead log, WAL),即每次更新數據時,都會將數據記錄在提交日誌(commit log)中,然後才將這些數據寫入內存中的memstore(默認大小是64M)中,一旦內存保存的寫入數據的累計大小超過了一個給定的最大值,系統就會將這些數據移出內存作為HFile文件刷寫到磁盤中。數據移出內存之後,系統會丟失對應的提交日誌,只保留未持久化到磁盤中的提交日誌。

9、HBase中數據的讀取是從哪裡讀取的?

HBase中數據的讀取是兩部分數據合併的結果:(1)memstore中還沒有寫入磁盤的數據;(2)磁盤上的存儲文件。

10、HBase中memstore中數據刷寫磁盤的方式

隨著memstore中的數據不斷的刷寫到磁盤中,會產生越來越多的HFile文件,在HBase中,會將多個文件合併成一個較大的文件,而合併有兩種類型:

minor合併(minor compaction)和major合併(major compaction)。

minor合併:將多個小文件重寫為數量較大的大文件,減少存儲文件的數量。major合併:將一個region中一個列族的若干個HFile重寫為一個新HFile,該合併能夠掃描所有的鍵/值對,順序重寫全部數據,重寫數據的過程中略過了刪除標記的數據(如果沒有合併前,進行刪除數據,只是將該數據標記為刪除,在客戶端讀取時,會略過,但是實際上未刪除)。上述的major合併,對於那些超過版本號限制的數據以及生存時間到期的數據,在重寫數據時就不再寫入磁盤中。

11、什麼是大數據

“數十億行×數百萬列×數千個版本=TB級或PB級的存儲”

12、集群中時間同步的方法

方法:在集群中運行NTP或同等功能的應用來同步集群的功能。

13、Linux文件句柄是什麼?在HBase中需要注意什麼?

命令:ulimit -n 可以查看一個進程中允許打開的最大文件句柄數量(系統默認值是1024)

怎麼樣,是不是有個大致的瞭解了?沒有了解也不怕,小編這裡有一套大數據視頻教程可以供大家學習,

大家只需要私信小編“學習”獲取即可~

HBase 的那一點知識(文末附教程)
"

相關推薦

推薦中...