HBase使用總結(jié)

原創(chuàng)文章氓涣,轉(zhuǎn)載請(qǐng)注明原作地址:http://www.reibang.com/p/0f9578df7fbc

一. 架構(gòu)


1. 數(shù)據(jù)模型

1.1 基礎(chǔ)概念
  • 表(table):列式存儲(chǔ)厌殉,支持高表&寬表(上億行皿淋,上百萬(wàn)列)
  • 行(row):每一行由唯一的行鍵確定
  • 列族(columnFamily):每一行包含一個(gè)或多個(gè)列族,是列的集合
  • 列(column):列式存儲(chǔ)藐俺,列是最基本單位润歉,可能有多個(gè)版本的值
  • 時(shí)間戳(Timestamp):列的不同版本之間用時(shí)間戳區(qū)分
  • 單元格(cell):列的每一個(gè)版本是一個(gè)單元格足陨,是存儲(chǔ)的基本單位

HBase最基本的單位是列(column),一列或者多列形成一行(row),若干行數(shù)據(jù)組成了一張表(table)责静。聽(tīng)起來(lái)是一個(gè)非常普通的列式存儲(chǔ)數(shù)據(jù)庫(kù)袁滥,但是,它和傳統(tǒng)數(shù)據(jù)庫(kù)有很大的不同灾螃。

1.2 與傳統(tǒng)數(shù)據(jù)庫(kù)的區(qū)別
a. HBase的每一行由唯一的行鍵確定

在某種程度上呻拌,行鍵相當(dāng)于傳統(tǒng)數(shù)據(jù)庫(kù)的primary key,區(qū)別在于睦焕,primary key是可選的藐握,而HBase的每張表都必然會(huì)有行鍵。除了行鍵之外垃喊,HBase表不能對(duì)列添加索引猾普。HBase是一個(gè)<key, value>形式的數(shù)據(jù)庫(kù),行鍵就是它的key本谜。

b. HBase引入了列族(columnFamily)的概念
  • HBase是一個(gè)列式存儲(chǔ)的數(shù)據(jù)庫(kù)初家,因此列的使用是非常靈活的,不必在表定義的時(shí)候就定好列名乌助,但是必須在建表的時(shí)候定義好列族名字溜在。
  • 一張HBase表存儲(chǔ)的列的數(shù)量可以是無(wú)限的,但是列族的數(shù)量最好控制在2-3個(gè)(原因在備注中[1]
  • 列必須屬于某個(gè)列族他托,不同列族之間可以有同名列
  • 列族的作用是掖肋,將那些數(shù)據(jù)量和屬性相似的列聚集在一起,以便我們給這些列定義一些共同的存儲(chǔ)方式屬性(e.g. 數(shù)據(jù)壓縮赏参,保存到讀緩存中)
c. HBase的列值可以有多版本

在HBase表中志笼,行鍵、列族把篓、列名和時(shí)間戳才能唯一確定一個(gè)值纫溃。每個(gè)值是一個(gè)單元格(cell),是存儲(chǔ)的基本單位韧掩。每一行數(shù)據(jù)的每一列紊浩,都可以存儲(chǔ)多個(gè)值,每個(gè)版本的值之間通過(guò)時(shí)間戳確定疗锐,在存儲(chǔ)的時(shí)候坊谁,這些值也按照時(shí)間戳逆序排列,保證客戶端永遠(yuǎn)讀到最新的數(shù)據(jù)窒悔。但是呜袁,每個(gè)列族可以存儲(chǔ)的最大版本數(shù)是確定的,并且是在建表的時(shí)候就定義好的简珠。

另外阶界,單元格的時(shí)間戳是可以由用戶自行指定的虹钮,如果不指定,服務(wù)器就會(huì)將接收到寫請(qǐng)求的服務(wù)器時(shí)間作為單元格的時(shí)間戳膘融。通常情況下芙粱,最好不要自己指定時(shí)間戳,因?yàn)榭蛻舳丝偸请y以保證氧映,指定的時(shí)間戳是按照寫順序遞增的春畔。

d. 反范式化

HBase是一個(gè)NoSQL(Not-only-SQL)數(shù)據(jù)庫(kù),不提供復(fù)雜的查詢方式岛都,包括join律姨。另外,相對(duì)于MySQL臼疫,HBase的可擴(kuò)展性很好择份,存儲(chǔ)資源要廉價(jià)很多。因此烫堤,在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候荣赶,我們總是傾向于反范式化,以方便后期的數(shù)據(jù)查詢

1.3 數(shù)據(jù)模型抽象

HBase實(shí)際上是按照谷歌的bigtable實(shí)現(xiàn)的鸽斟,而谷歌在bigtable論文的開(kāi)篇就介紹了bigtable的特點(diǎn):A Bigtable is a sparse, distributed, persistent multidimensional sorted map拔创。所以HBase在本質(zhì)上,是一張有序的多維map富蓄,數(shù)據(jù)模型可以抽象成:

<rowKey : columnFamily : qualifier : timestamp, value>

這樣的優(yōu)點(diǎn)是剩燥,HBase只存儲(chǔ)有值的單元格,對(duì)于一張稀疏表來(lái)說(shuō)格粪,可以節(jié)省很多存儲(chǔ)空間躏吊;但是氛改,為每個(gè)cell都存儲(chǔ)了rowKey, columnFamily, qualifier帐萎,因此cf的名字不要太長(zhǎng)。

2. 存儲(chǔ)模型

存儲(chǔ)模型
2.1 存儲(chǔ)概覽
a. 數(shù)據(jù)分片存儲(chǔ)

在HBase中胜卤,一張表的數(shù)據(jù)會(huì)被分成幾份疆导,每一份數(shù)據(jù)為一個(gè)region;每個(gè)region內(nèi)存儲(chǔ)的key是連續(xù)范圍內(nèi)的葛躏,不同region存儲(chǔ)的key范圍不重合澈段;這些region可能被存儲(chǔ)在同一臺(tái)機(jī)器上,也可能存儲(chǔ)在不同的機(jī)器上舰攒。HBase作為一個(gè)分布式數(shù)據(jù)庫(kù)败富,對(duì)數(shù)據(jù)進(jìn)行分片,可以提升吞吐量摩窃。

b. HLog:Write-Ahead-Log兽叮,寫操作先寫日志

HLog的作用是芬骄,當(dāng)一臺(tái)regionServer crash了,可以利用HLog來(lái)恢復(fù)內(nèi)存中未持久化到硬盤中的數(shù)據(jù)鹦聪。需要注意的是账阻,同一臺(tái)server上的所有region共用一個(gè)HLog實(shí)例,因?yàn)榧偃缑總€(gè)region擁有一個(gè)獨(dú)立的HLog泽本,服務(wù)器會(huì)花費(fèi)很多時(shí)間在磁盤尋道上淘太。

c. MemStore:寫緩存,每個(gè)store擁有獨(dú)立的寫緩存

在HBase中规丽,所有的寫操作全部寫到內(nèi)存中蒲牧,當(dāng)寫緩存(MemStore)寫滿,再刷寫(flush)到磁盤中[2]赌莺,形成一個(gè)新的文件造成。這樣做的目的,是為了高速響應(yīng)那些寫請(qǐng)求雄嚣。

d. HFile:磁盤文件

在存儲(chǔ)上晒屎,HBase完全依賴HDFS,磁盤操作是直接調(diào)用HDFS的API(HDFS在維持data locality這一點(diǎn)上足夠智能)缓升。另外鼓鲁,之前提過(guò)HBase定義列族的一個(gè)原因是為了方便存儲(chǔ),事實(shí)上港谊,同一列族的數(shù)據(jù)會(huì)被寫到同一文件骇吭,因?yàn)榇鎯?chǔ)特性本來(lái)就是按照列族定義的。HBase的數(shù)據(jù)在底層文件中時(shí)以KeyValue鍵值對(duì)的形式存儲(chǔ)的歧寺,HBase沒(méi)有數(shù)據(jù)類型燥狰,HFile中存儲(chǔ)的是字節(jié),這些字節(jié)按字典序排列斜筐。

e. 讀緩存:同一server上所有region共用

既然HBase有寫緩存龙致,相對(duì)應(yīng)的應(yīng)該有讀緩存。與寫緩存不同的是顷链,HBase的讀緩存是同一server上的所有region共用的目代。當(dāng)HBase讀取磁盤上某一條數(shù)據(jù)時(shí),HBase會(huì)將整個(gè)HFile block[3]讀到cache中[4]嗤练。因此榛了,當(dāng)client請(qǐng)求臨近的數(shù)據(jù)時(shí),因?yàn)榕R近數(shù)據(jù)已經(jīng)被緩存到內(nèi)存中煞抬,HBase的響應(yīng)會(huì)更快霜大,也就是說(shuō),HBase鼓勵(lì)將那些相似的革答,會(huì)被一起查找的數(shù)據(jù)存放在一起战坤。另外遮婶,當(dāng)我們?cè)谧鋈頀呙钑r(shí),為了不刷走讀緩存中的熱數(shù)據(jù)湖笨,千萬(wàn)記得關(guān)閉讀緩存的功能旗扑。

2.2 行鍵的索引
a. 行數(shù)據(jù)查找步驟
  • hbase:meta表查找,獲取數(shù)據(jù)所在的region id
  • 根據(jù)region id慈省,到對(duì)應(yīng)的region server上查找臀防,在server上查找對(duì)應(yīng)記錄時(shí),有三種方式
    (1) 掃描緩存
    (2) 塊索引
    (3) 布隆過(guò)濾器
b. rowKey索引:hbase:meta表

client會(huì)首先獲取hbase:meta表的位置边败,再到對(duì)應(yīng)的region server上讀取這張表的內(nèi)容(hbase:meta表其實(shí)就是一張HBase表)袱衷。讀到這張hbase:meta表之后,client會(huì)緩存這張表笑窜,這張之后的查找就可以復(fù)用了致燥。hbase:meta表的內(nèi)容如下:

| key                                                               | value                                                                               |
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------|
|                                                                   | info:regioninfo (serialized HRegionInfo instance for this region)                   |
| Region key of the format ([table],[region start key],[region id]) | info:server (server:port of the RegionServer containing this region)                |
|                                                                   | info:serverstartcode (start-time of the RegionServer process containing this region)|

因此,通過(guò)查找hbase:meta表排截,client可以得知對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)在哪臺(tái)server的那個(gè)region上嫌蚤,接下來(lái)就要到對(duì)應(yīng)的server上查找相關(guān)數(shù)據(jù)了。

c. region server上的數(shù)據(jù)查找

當(dāng)接收到一個(gè)讀請(qǐng)求断傲,server會(huì)初始化一個(gè)scanner查找內(nèi)存中是否有相關(guān)數(shù)據(jù)脱吱;一個(gè)scanner查找硬盤文件中是否存儲(chǔ)了相關(guān)數(shù)據(jù)。查找硬盤文件是一件相當(dāng)繁重的體力活认罩,為了加快文件查找箱蝠,HBase借助了兩個(gè)工具:塊索引和布隆過(guò)濾器。

塊索引和布隆過(guò)濾器
d. rowKey索引:塊索引

塊索引存儲(chǔ)在HFile文件中的末端垦垂,當(dāng)HBase在查找文件中是否保存了目標(biāo)數(shù)據(jù)時(shí)宦搬,首先會(huì)將塊索引讀入內(nèi)存。因?yàn)镠File中的KeyValue字節(jié)數(shù)據(jù)劫拗,是按照字典序排列的间校,而塊索引存儲(chǔ)了文件中所有塊(HFile block)的起始key,因此可以根據(jù)塊索引迅速定位需要查找的塊杨幼,只將可能保存了目標(biāo)數(shù)據(jù)的塊讀到內(nèi)存中撇簿,能加快查找速度。

e. rowKey索引:布隆過(guò)濾器

雖然塊索引幫助減少了需要讀到內(nèi)存中的數(shù)據(jù)差购,我們依然需要查找每個(gè)文件中的一個(gè)塊,才能完成磁盤數(shù)據(jù)查找汉嗽,而布隆過(guò)濾器則可以幫助我們跳過(guò)那些顯然不包含目標(biāo)數(shù)據(jù)的文件欲逃。因?yàn)椴悸∵^(guò)濾器的特點(diǎn)是,能迅速判斷一個(gè)數(shù)據(jù)集合中包不包含目標(biāo)數(shù)據(jù)饼暑,判斷結(jié)果有兩種稳析,不包含和可能包含洗做。如下圖所示,布隆過(guò)濾器能幫助跳過(guò)一些肯定不包含目標(biāo)數(shù)據(jù)的文件彰居。

布隆過(guò)濾器

和塊索引一樣诚纸,布隆過(guò)濾器也被存儲(chǔ)在文件末端,會(huì)被優(yōu)先加載到內(nèi)存中陈惰。另外畦徘,布隆過(guò)濾器分行式和列式兩種狂秦,列式需要更多的存儲(chǔ)空間劫笙,因此如果是按行讀取數(shù)據(jù),沒(méi)必要使用列式的布隆過(guò)濾器描孟。布隆過(guò)濾器和塊索引的對(duì)比如下:

塊索引 布隆過(guò)濾器
快速定位記錄在文件中可能的位置 快速判斷文件中是否包含相應(yīng)記錄
2.3 將隨機(jī)寫轉(zhuǎn)化成順序?qū)?/h5>

HBase的存儲(chǔ)是完全基于HDFS的溶握,而HDFS的特點(diǎn)是不能對(duì)磁盤文件進(jìn)行隨機(jī)修改杯缺。因此,HBase無(wú)法對(duì)已寫入磁盤文件的表記錄進(jìn)行隨機(jī)修改睡榆,但是對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō)萍肆,支持對(duì)表記錄進(jìn)行隨機(jī)修改是基本功能。為此胀屿,HBase的方法是將隨機(jī)寫的操作轉(zhuǎn)化成順序?qū)憽?/p>

首先匾鸥,隨機(jī)的寫操作轉(zhuǎn)化為文件追加操作,按照時(shí)間順序排列碉纳,client讀數(shù)據(jù)時(shí)總是優(yōu)先讀到最新的修改勿负。而刪除操作則轉(zhuǎn)化為寫入一個(gè)tombstone標(biāo)記,標(biāo)記著早于這個(gè)tombstone時(shí)間戳的對(duì)應(yīng)行所有記錄作廢劳曹。

顯然奴愉,因?yàn)镠Base總是進(jìn)行文件追加,隨著時(shí)間積累铁孵,文件膨脹很快锭硼。major compact的一個(gè)作用就是,真正刪除所有無(wú)效的過(guò)時(shí)數(shù)據(jù)蜕劝。

2.4 HBase Compaction和Region Split
a. HBase Compaction

前面已經(jīng)提到過(guò)檀头,HBase數(shù)據(jù)寫入的時(shí)候,總是先寫入到寫緩存(MemStore)中岖沛,當(dāng)寫緩存寫滿暑始,則flush到磁盤形成一個(gè)新的磁盤文件∮は鳎可以想象的是廊镜,隨著時(shí)間增長(zhǎng),磁盤上這樣的小文件會(huì)越來(lái)越多唉俗,HBase查找數(shù)據(jù)也需要越來(lái)越長(zhǎng)的時(shí)間嗤朴。為了避免這樣的問(wèn)題配椭,HBase會(huì)做compaction,合并HFile文件雹姊,減少每次查找數(shù)據(jù)的磁盤尋道時(shí)間股缸。compaction分為major compact和minor compact兩種:

  • Minor compact:將多個(gè)小文件簡(jiǎn)單合并成一個(gè)大文件
  • Major compact:將同一列族的所有文件合并成一個(gè)大文件,并且刪除過(guò)期無(wú)效的數(shù)據(jù)和tombstone標(biāo)記[5]
b. Region Split

client不斷向HBase寫入數(shù)據(jù)吱雏,region管理的數(shù)據(jù)量不斷膨脹敦姻。當(dāng)一個(gè)region內(nèi)存儲(chǔ)的數(shù)據(jù)量到達(dá)閾值,則會(huì)觸發(fā)HBase的region split操作坎背,將老的region拆分成兩個(gè)新的子region替劈。拆分的原則是數(shù)據(jù)量對(duì)半分。為了避免region拆分導(dǎo)致的IO瞬時(shí)上升得滤,region拆分并不會(huì)立刻將拆分重寫所有的磁盤文件文件陨献,而是為每個(gè)子region創(chuàng)建reference文件,這些文件指向了舊的磁盤文件中對(duì)應(yīng)記錄的起始和終止位置懂更。等到子region的compact操作被觸發(fā)眨业,在重寫文件的時(shí)候,HBase才會(huì)為每個(gè)子region生成獨(dú)立的磁盤文件沮协。

3. 物理模型

物理模型

HBase的架構(gòu)是一個(gè)典型的master-slave模型龄捡,HBase的master節(jié)點(diǎn)叫HMaster,slave節(jié)點(diǎn)就是RegionServer慷暂。

3.1 Master的職責(zé)

處理集群相關(guān)的請(qǐng)求(來(lái)自client或者其他server節(jié)點(diǎn))

  • 建表或者表變更的操作
  • 打開(kāi)或者關(guān)閉一個(gè)region
  • metadata元數(shù)據(jù)的管理

集群監(jiān)控(依賴Zookeeper)

  • 監(jiān)控regionServer的狀態(tài)以及負(fù)載均衡等
  • 跟蹤hbase:meta表的位置
  • 后備master節(jié)點(diǎn)需要監(jiān)控當(dāng)前master節(jié)點(diǎn)是否活躍
3.2 RegionServer的職責(zé)

集群初始化過(guò)程中

當(dāng)一個(gè)HBase集群起來(lái)之后聘殖,HMaster會(huì)在對(duì)應(yīng)的regionServer上起一個(gè)HRegionServer進(jìn)程。HRegionServer負(fù)責(zé)打開(kāi)對(duì)應(yīng)的region行瑞,并創(chuàng)建對(duì)應(yīng)的HRegion實(shí)例奸腺。當(dāng)HRegion打開(kāi)之后,它會(huì)為每個(gè)表的HColumnFamily創(chuàng)建一個(gè)Store實(shí)例血久,ColumnFamily是用戶在創(chuàng)建表時(shí)定義好的突照,ColumnFamily在每個(gè)region中和Store實(shí)例一一對(duì)應(yīng)。每個(gè)Store實(shí)例包含一個(gè)或者多個(gè)StoreFile實(shí)例氧吐,StoreFile是對(duì)實(shí)際存儲(chǔ)數(shù)據(jù)文件HFile的輕量級(jí)封裝讹蘑。每個(gè)Store對(duì)應(yīng)一個(gè)MemStore。一個(gè)HRegionServer共享一個(gè)HLog實(shí)例筑舅。

集群運(yùn)行過(guò)程中

  • compaction和split是由RegionServer獨(dú)立判斷決定是否執(zhí)行的座慰,但過(guò)程中包含一些必要的和master、ZK的通信
  • client端發(fā)起的讀寫請(qǐng)求豁翎,也直接由對(duì)應(yīng)RegionServer處理(master不處理)[6]角骤,流程如下:
    (1) client端向ZK請(qǐng)求hbase:meta表位置,取得表內(nèi)容
    (2) 查詢meta表得知數(shù)據(jù)存在哪臺(tái)RegionServer上
    (3)直接與RegionServer通信心剥,進(jìn)行讀寫操作

注:
[1] 同一張表的column family數(shù)量不能超過(guò)2-3個(gè)邦尊。因?yàn)槟壳埃琭lush和compaction操作是基于region進(jìn)行的优烧,當(dāng)一個(gè)column family觸發(fā)了MemStore flush操作蝉揍,相鄰的column family都會(huì)被刷寫到磁盤,即使它們MemStore內(nèi)的數(shù)據(jù)量還很小畦娄。因此又沾,如果同一張表內(nèi)column family的數(shù)量過(guò)多,flush和compaction將會(huì)帶來(lái)更多不必要的I/O負(fù)載(當(dāng)然這個(gè)問(wèn)題可以通過(guò)熙卡,將flush和compaction改成列族之間互不影響來(lái)解決)杖刷。通常情況下,定義表的時(shí)候盡量使用單列族驳癌,除非列與列的查詢是相對(duì)獨(dú)立的滑燃,再考慮使用多個(gè)列族,比如client并不會(huì)同時(shí)請(qǐng)求兩個(gè)列族的數(shù)據(jù)颓鲜。
當(dāng)同一張內(nèi)有多個(gè)列族時(shí)表窘,注意一些列族間的數(shù)據(jù)量是否一致,假如列族A和列族B的數(shù)據(jù)量相差懸殊甜滨,列族A的大數(shù)據(jù)量會(huì)導(dǎo)致表數(shù)據(jù)被分片到很多個(gè)機(jī)器上乐严,此時(shí)再對(duì)列族B的數(shù)據(jù)做掃描,效率會(huì)很低衣摩。

[2] 能觸發(fā)MemStore flush操作的有三種情形:

  • 當(dāng)一個(gè)MemStore的數(shù)據(jù)量達(dá)到hbase.hregion.memstore.flush.size昂验,同一region的所有MemStore的數(shù)據(jù)都會(huì)被刷寫道磁盤
  • 當(dāng)全部的MemStore的數(shù)據(jù)量達(dá)到hbase.regionserver.global.memstore.upperLimit,同一RegionServer的多個(gè)region的MemStore的數(shù)據(jù)會(huì)被刷寫到磁盤艾扮。按照每region的MemStore大小既琴,從大到小刷寫到磁盤,直到總的MemStore大小下降到hbase.regionserver.global.memstore.upperLimit
  • 當(dāng)region server的WAL的log數(shù)量達(dá)到hbase.regionserver.max.logs栏渺,該server上多個(gè)region的MemStore會(huì)被刷寫到磁盤(按照時(shí)間順序)呛梆,以降低WAL的大小。

[3] HFile block:HFile塊和Hadoop塊是兩個(gè)獨(dú)立的概念磕诊。HFile塊的默認(rèn)大小是64KB填物,而Hadoop塊的默認(rèn)大小為64MB。另外霎终,如果有需要的話滞磺,用戶還可以自行定義HFile塊大小。一般情況下莱褒,如果客戶端都是順序訪問(wèn)表記錄击困,在讀緩存的作用下,建議使用較大的HFile塊;如果客戶端都是隨機(jī)訪問(wèn)表記錄阅茶,建議使用較小的HFile塊蛛枚,不過(guò)也需要更多的內(nèi)存來(lái)存儲(chǔ)塊索引(塊索引會(huì)優(yōu)先存放在cache中),并且創(chuàng)建過(guò)程也會(huì)變得更慢脸哀,因?yàn)槲覀儽仨氃诿總€(gè)數(shù)據(jù)塊結(jié)束的時(shí)候刷寫壓縮流蹦浦,導(dǎo)致一個(gè)FS I/O刷寫。

[4] 關(guān)于讀緩存的更詳細(xì)資料:http://zh.hortonworks.com/blog/hbase-blockcache-101/

[5] HBase默認(rèn)每7天對(duì)HBase做一輪major compact撞蜂,在0.96的版本之前盲镶,這個(gè)周期是1天。

[6] 正因?yàn)閏lient讀寫數(shù)據(jù)的過(guò)程沒(méi)有master節(jié)點(diǎn)的參與蝌诡,如果master failover了溉贿,hbase集群仍然可以穩(wěn)定運(yùn)行一段時(shí)間,只是像region分裂浦旱,RegionServer failover處理等需要master節(jié)點(diǎn)參與的工作宇色,無(wú)法完成了。

未完待續(xù)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闽寡,一起剝皮案震驚了整個(gè)濱河市代兵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌爷狈,老刑警劉巖植影,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涎永,居然都是意外死亡思币,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門羡微,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谷饿,“玉大人,你說(shuō)我怎么就攤上這事妈倔〔┩叮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵盯蝴,是天一觀的道長(zhǎng)毅哗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捧挺,這世上最難降的妖魔是什么虑绵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮闽烙,結(jié)果婚禮上翅睛,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好捕发,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布疏旨。 她就那樣靜靜地躺著,像睡著了一般爬骤。 火紅的嫁衣襯著肌膚如雪充石。 梳的紋絲不亂的頭發(fā)上莫换,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天霞玄,我揣著相機(jī)與錄音,去河邊找鬼拉岁。 笑死坷剧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喊暖。 我是一名探鬼主播惫企,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陵叽!你這毒婦竟也來(lái)了狞尔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤巩掺,失蹤者是張志新(化名)和其女友劉穎偏序,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體胖替,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡研儒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了独令。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片端朵。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖燃箭,靈堂內(nèi)的尸體忽然破棺而出冲呢,到底是詐尸還是另有隱情,我是刑警寧澤招狸,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布敬拓,位于F島的核電站,受9級(jí)特大地震影響瓢颅,放射性物質(zhì)發(fā)生泄漏恩尾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一挽懦、第九天 我趴在偏房一處隱蔽的房頂上張望翰意。 院中可真熱鬧,春花似錦、人聲如沸冀偶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)进鸠。三九已至稠曼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間客年,已是汗流浹背霞幅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留量瓜,地道東北人司恳。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像绍傲,于是被迫代替她去往敵國(guó)和親扔傅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • HBase存儲(chǔ)架構(gòu)圖 HBase Master 為Region server分配region 負(fù)責(zé)Region s...
    kimibob閱讀 5,583評(píng)論 0 52
  • HBase Architectural Components(HBase架構(gòu)組件) HBase架構(gòu)也是主從架構(gòu)烫饼,由...
    陌上疏影涼閱讀 2,397評(píng)論 0 7
  • 簡(jiǎn)介 [HBase]——Hadoop Database的簡(jiǎn)稱猎塞,Google BigTable的另一種開(kāi)源實(shí)現(xiàn)方式,...
    高廣超閱讀 2,347評(píng)論 1 27
  • 1. HBase介紹杠纵,Hbase是什么荠耽? HBase -- Hadoop Database ,是一個(gè)高可靠淡诗、高性能...
    奉先閱讀 3,744評(píng)論 1 36
  • 最近在逐步跟進(jìn)Hbase的相關(guān)工作骇塘,由于之前對(duì)Hbase并不怎么了解,因此系統(tǒng)地學(xué)習(xí)了下Hbase韩容,為了加深對(duì)Hb...
    飛鴻無(wú)痕閱讀 50,224評(píng)論 19 272