**:
a、一種可以加快批量寫入速度的方法是通過預先建立一些空的regions,這樣當資料寫入hbase時,會按照region分割槽情況,在集群內做資料的負載均衡。b、hbase 裡面有這樣乙個hfileoutputformat類,他的實現可以將資料轉換成hfile格式,通過new乙個這個類,進行相關配置,這樣會在hdfs下面產生乙個檔案,這個時候利用hbase提供的jruby的loadtable.rb指令碼就可以進行批量匯入。
有且僅有乙個:rowkey(行鍵),rowkey是hbase的key-value儲存中的key,通常使用使用者要查詢的字段作為rowkey,查詢結果作為value。可以通過設計滿足幾種不同的查詢需求。(1)數字rowkey的從大到小排序:原生hbase只支援從小到大的排序,這樣就對於排行榜一類的查詢需求很尷尬。那麼採用rowkey = integer.max_value-rowkey的方式將rowkey進行轉換,最大的變最小,最小的變最大。在應用層再轉回來即可完成排序需求。
(2)rowkey的雜湊原則:如果rowkey是類似時間戳的方式遞增的生成,建議不要使用正序直接寫入rowkey,而是採用reverse的方式反轉rowkey,使得rowkey大致均衡分布,這樣設計有個好處是能將regionserver的負載均衡,否則容易產生所有新資料都在乙個regionserver上堆積的現象,這一點還可以結合table的預切分一起設計。
hbase的瓶頸就是硬傳輸速度,hbase 的操作,它可以往資料裡面 insert,也可以update一些資料,但update 的實際上也是insert,只是插入乙個新的時間戳的一行,delete資料,也是insert,只是insert一行帶有delete標記的一行。hbase的所有操作都是追加插入操作。hbase是一種日誌集資料庫。它的儲存方式,像是日誌檔案一樣。它是批量大量的往硬碟中寫,通常都是以檔案形式的讀寫。這個讀寫速度,就取決於硬碟與機器之間的傳輸有多快。而oracle的瓶頸是硬碟尋道時間。它經常的操作時隨機讀寫。要update乙個資料,先要在硬碟中找到這個block,然後把它讀入記憶體,在記憶體中的快取中修改,過段時間再回寫回去。由於你尋找的block不通,這就存在乙個隨機的讀。硬碟的尋道時間主要由轉速來決定。而尋道時間,技術基本沒有改變,這就形成了尋道時間瓶頸。
3種join方式:1)在reduce端進行join,最常用的join方式。
用連線字段作為key,其餘部分和新加的標誌作為value,最後進行輸出。
reduce端的主要工作:在reduce端以連線字段作為key的分組已經完成,我們只需要在每一
個分組當中將那些**於不同檔案的記錄(在map階段已經打標誌)分開,最後進行笛卡爾。
2)在map端進行join,使用場景:一張表非常小、一張表很大。
在提交作業的時候先將小表檔案放到該作業的distributedcache中,然後從distributecache中取出該小表進行join key / value解釋分割放到記憶體中(可以放大hash map等等容器中)。然後掃瞄大表,看大表中的每條記錄的join key /value值是否能夠在記憶體中找到相同join key的記錄,如果有則直接輸出結果
3)semijoin。
semijoin就是左邊連線是reducejoin的一種變種,在map端過濾掉一些資料,在網路傳輸過程中,只傳輸參與連線的資料,減少了shuffle的網路傳輸量,其他和reduce的思想是一樣的。
實現:將小表中參與join的key單獨抽取出來通過distributecache分發到相關節點,在map階段掃瞄連線表,將join key不在記憶體hashset的紀錄過濾掉,讓參與join的紀錄通過shuffle傳輸到reduce端進行join,其他和reduce join一樣。
hive 建立內部表時,會將資料移動到資料倉儲指向的路徑;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。在刪除表的時候,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料。這樣外部表相對來說更加安全些,資料組織也更加靈活,方便共享源資料。
建表語句:
create
table tablename (
id) partitioned
by (dt
string)
增加分割槽:
alter
table tablenname
addpartition (dt =
'2016-03-06')
刪除分割槽:
alter
table tablename
drop
partition (dt =
'2016-03-06')
大資料面試題知識點分析(六)
不支援,可以用left join 實現此功能。1.儲存於記憶體資料庫derby,此方法只能開啟乙個hive客戶端,不推薦使用。2.儲存於mysql資料庫,可以多客戶端連線,推薦使用。分為本地mysql資料庫,遠端mysql資料庫,但是本地的mysql資料用的比較多,因為本地讀寫速度都比較快。1.jo...
kafka高階知識點面試題
在老版本kafka中,訊息都是來一條傳送一條,這種方式會造成訊息傳送的吞吐量比較低,所以之後kafka對這種方式進行了優化,提供了批量傳送的方式,把多條訊息繫結成一批訊息傳送,以此來提高訊息傳送的吞吐率。這種方式就是緩衝池的思想,傳送訊息的邏輯大概如下 1 把訊息封裝成producerrecord物...
大資料面試題 (五)Spark 相關面試題總結
答 rdd resilient distributed dataset 叫做分布式資料集,是spark中最基本的資料抽象,它代表乙個不可變,可分割槽,裡面的元素可以平行計算的集合 dataset 就是乙個集合,用於存放資料的 destributed 分布式,可以並行在集群計算 resilient 表...