天天看點

大資料面試題(六)—-HBASE 面試題

大家好,又見面了,我是你們的朋友全棧君。

版權聲明:本文為CSDN部落客「北京小輝」的原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/silentwolfyh/article/details/103864901

———————————————————————————————————

“無意中發現了一個巨牛的人工智能教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看小說一樣!覺得太牛了,是以分享給大家。點這裡可以跳轉到教程。”。

大資料面試寶典目錄,請點選

目錄

1. HBase 的特點是什麼?

2. HBase 和Hive 的差別?

3. 描述HBase 的rowKey 的設計原則?

4. 描述HBase 中scan 和get 的功能以及實作的異同?

5. Apache HBase region 拆分

1. HBase 的特點是什麼?

1) 大:一個表可以有數十億行,上百萬列;
2) 無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動态的增加,同一張表中不
同的行可以有截然不同的列;
3) 面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索;
4) 稀疏:空(null)列并不占用存儲空間,表可以設計的非常稀疏;
5) 資料多版本:每個單元中的資料可以有多個版本,預設情況下版本号自動配置設定,是單元格插入時
的時間戳;
6) 資料類型單一:Hbase 中的資料都是字元串,沒有類型。           

複制

2. HBase 和Hive 的差別?

大資料面試題(六)—-HBASE 面試題

1)兩者是什麼?

Apache Hive 是一個建構在Hadoop 基礎設施之上的資料倉庫。通過Hive 可以使用HQL

語言查詢存放在HDFS 上的資料。HQL 是一種類SQL 語言, 這種語言最終被轉化為Map/Reduce. 雖然Hive 提供了SQL 查詢功能,但是Hive 不能夠進行互動查詢–因為它隻能夠在Haoop 上批量的執行Hadoop。

Apache HBase 是一種Key/Value 系統,它運作在HDFS 之上。和Hive 不一樣,Hbase 的能夠在它的資料庫上實時運作,而不是運作MapReduce 任務。Hbase 被分區為表格,表格又被進一步分割為列簇。列簇必須使用schema 定義,列簇将某一類型列集合起來(列不要求schema 定義)。例如,“message”列簇可能包含:“to”, ”from” “date”, “subject”,和”body”. 每一個key/value 對在Hbase 中被定義為一個cell,每一個key 由row-key,列簇、列和時間戳。在Hbase 中,行是key/value 映射的集合,這個映射通過row-key 來唯一辨別。Hbase 利用Hadoop 的基礎設施,可以利用通用的裝置進行水準的擴充。

2)兩者的特點

Hive 幫助熟悉SQL 的人運作MapReduce 任務。因為它是JDBC 相容的,同時,它也能夠和現存的SQL 工具整合在一起。運作Hive 查詢會花費很長時間,因為它會預設周遊表中所有的資料。雖然有這樣的缺點,一次周遊的資料量可以通過Hive 的分區機制來控制。分區允許在資料集上運作過濾查詢,這些資料集存儲在不同的檔案夾内,查詢的時候隻周遊指定檔案夾(分區)中的資料。這種機制可以用來,例如,隻處理在某一個時間範圍内的檔案, 隻要這些檔案名中包括了時間格式。

HBase 通過存儲key/value 來工作。它支援四種主要的操作:增加或者更新行,檢視一個範圍内的cell,擷取指定的行,删除指定的行、列或者是列的版本。版本資訊用來擷取曆史資料(每一行的曆史資料可以被删除,然後通過Hbase compactions 就可以釋放出空間)。雖然HBase 包括表格,但是schema 僅僅被表格和列簇所要求,列不需要schema。Hbase 的表格包括增加/計數功能。

3)兩者的限制

Hive 目前不支援更新操作。另外,由于hive 在hadoop 上運作批量操作,它需要花費很長的時間,通常是幾分鐘到幾個小時才可以擷取到查詢的結果。Hive 必須提供預先定義好的schema 将

檔案和目錄映射到列,并且Hive 與ACID 不相容。

HBase 查詢是通過特定的語言來編寫的,這種語言需要重新學習。類SQL 的功能可以通過Apache Phonenix 實作,但這是以必須提供schema 為代價的。另外,Hbase 也并不是相容所有的ACID 特性,雖然它支援某些特性。最後但不是最重要的–為了運作Hbase,Zookeeper 是必須的,zookeeper 是一個用來進行分布式協調的服務,這些服務包括配置服務,維護元資訊和命名空間服務。

4)兩者的應用場景

Hive 适合用來對一段時間内的資料進行分析查詢,例如,用來計算趨勢或者網站的日志。

Hive 不應該用來進行實時的查詢。因為它需要很長時間才可以傳回結果。

Hbase 非常适合用來進行大資料的實時查詢。Facebook 用Hbase 進行消息和實時的分析。它也可以用來統計Facebook 的連接配接數。

5)總結

Hive 和Hbase 是兩種基于Hadoop 的不同技術–Hive 是一種類SQL 的引擎,并且運作MapReduce 任務,Hbase 是一種在Hadoop 之上的NoSQL 的Key/vale 資料庫。當然,這兩種工具是可以同時使用的。就像用Google 來搜尋,用FaceBook 進行社交一樣,Hive 可以用來進行統計查詢,HBase 可以用來進行實時查詢,資料也可以從Hive 寫到Hbase,設定再從Hbase寫回Hive。

3. 描述HBase 的rowKey 的設計原則?

1) Rowkey 長度原則

Rowkey 是一個二進制碼流,Rowkey 的長度被很多開發者建議說設計在10~100 個位元組,不過建議是越短越好,不要超過16 個位元組。原因如下:

1) 大:一個表可以有數十億行,上百萬列;
2) 無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動态的增加,同一張表中不
同的行可以有截然不同的列;
3) 面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索;
4) 稀疏:空(null)列并不占用存儲空間,表可以設計的非常稀疏;
5) 資料多版本:每個單元中的資料可以有多個版本,預設情況下版本号自動配置設定,是單元格插入時
的時間戳;
6) 資料類型單一:Hbase 中的資料都是字元串,沒有類型。           

複制

2)Rowkey 散列原則

如果Rowkey 是按時間戳的方式遞增,不要将時間放在二進制碼的前面,建議将Rowkey 的高位作為散列字段,由程式循環生成,低位放時間字段,這樣将提高資料均衡分布在每個Regionserver 實作負載均衡的幾率。如果沒有散列字段,首字段直接是時間資訊将産生所有新資料都在一個RegionServer上堆積的熱點現象,這樣在做資料檢索的時候負載将會集中在個别RegionServer,降低查詢效率。

3)Rowkey 唯一原則

必須在設計上保證其唯一性。

4. 描述HBase 中scan 和get 的功能以及實作的異同?

HBase 的查詢實作隻提供兩種方式:

1) 按指定RowKey 擷取唯一一條記錄,

get 方法(org.apache.hadoop.hbase.client.Get)

Get 的方法處理分兩種: 設定了ClosestRowBefore 和沒有設定ClosestRowBefore 的rowlock。主要是用來保證行的事務性,即每個get 是以一個row 來标記的。一個row 中可以有很多family和column。

2) 按指定的條件擷取一批記錄,

scan 方法(org.apache.Hadoop.hbase.client.Scan)實作條件查詢功能

使用的就是scan 方式。
(1)scan 可以通過setCaching 與setBatch 方法提高速度(以空間換時間);
(2)scan 可以通過setStartRow 與setEndRow 來限定範圍([start,end)start 是閉區間,end 是開區
間)。範圍越小,性能越高。
(3)scan 可以通過setFilter 方法添加過濾器,這也是分頁、多條件查詢的基礎。           

複制

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/138948.html原文連結:https://javaforall.cn