最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺析hbase的優(yōu)點(diǎn)

 更新時(shí)間:2017年09月28日 10:11:32   投稿:mrr  
本文講述了HBase的特征和它的優(yōu)點(diǎn),并簡(jiǎn)要回顧了行鍵設(shè)計(jì)的重點(diǎn)之處,它還向你展示了如何在本地配置HBase環(huán)境,使用命令創(chuàng)建表、插入數(shù)據(jù)、檢索指定行以及最后如何進(jìn)行scan操作,感興趣的朋友一起看看吧

hbase是運(yùn)行在Hadoop上的NoSQL數(shù)據(jù)庫,它是一個(gè)分布式的和可擴(kuò)展的大數(shù)據(jù)倉庫,也就是說HBase能夠利用HDFS的分布式處理模式,并從Hadoop的MapReduce程序模型中獲益。這意味著在一組商業(yè)硬件上存儲(chǔ)許多具有數(shù)十億行和上百萬列的大表。除去Hadoop的優(yōu)勢(shì),HBase本身就是十分強(qiáng)大的數(shù)據(jù)庫,它能夠融合key/value存儲(chǔ)模式帶來實(shí)時(shí)查詢的能力,以及通過MapReduce進(jìn)行離線處理或者批處理的能力。總的來說,Hbase能夠讓你在大量的數(shù)據(jù)中查詢記錄,也可以從中獲得綜合分析報(bào)告。

谷歌曾經(jīng)面對(duì)過一個(gè)挑戰(zhàn)的問題:如何能在整個(gè)互聯(lián)網(wǎng)上提供實(shí)時(shí)的搜索結(jié)果?答案是它本質(zhì)上需要將互聯(lián)網(wǎng)緩存,并重新定義在這樣龐大的緩存上快速查找的新方法。為了達(dá)到這個(gè)目的,定義如下技術(shù):

·谷歌文件系統(tǒng)GFS:可擴(kuò)展分布式文件系統(tǒng),用于大型的、分布式的、數(shù)據(jù)密集型的應(yīng)用程序。

·BigTable:分布式存儲(chǔ)系統(tǒng),用于管理被設(shè)計(jì)成規(guī)模很大的結(jié)構(gòu)化數(shù)據(jù):來自數(shù)以千計(jì)商用服務(wù)器的PB級(jí)別的數(shù)據(jù)。

·MapReduce:一個(gè)程序模型,用于處理和生成大數(shù)據(jù)集的相關(guān)實(shí)現(xiàn)。

在谷歌發(fā)布這些技術(shù)的文檔之后,不久以后我們就看到了它們的開源實(shí)現(xiàn)版本,就在2007年,MikeCafarella發(fā)布了BigTable開源實(shí)現(xiàn)的代碼,他稱其為HBase,自此,HBase成為Apache的頂級(jí)項(xiàng)目,并運(yùn)行在Facebook,Twitter,Adobe……僅舉幾個(gè)例子。

HBase不是一個(gè)關(guān)系型數(shù)據(jù)庫,它需要不同的方法定義你的數(shù)據(jù)模型,HBase實(shí)際上定義了一個(gè)四維數(shù)據(jù)模型,下面就是每一維度的定義:

·行鍵:每行都有唯一的行鍵,行鍵沒有數(shù)據(jù)類型,它內(nèi)部被認(rèn)為是一個(gè)字節(jié)數(shù)組。

·列簇:數(shù)據(jù)在行中被組織成列簇,每行有相同的列簇,但是在行之間,相同的列簇不需要有相同的列修飾符。在引擎中,HBase將列簇存儲(chǔ)在它自己的數(shù)據(jù)文件中,所以,它們需要事先被定義,此外,改變列簇并不容易。

·列修飾符:列簇定義真實(shí)的列,被稱之為列修飾符,你可以認(rèn)為列修飾符就是列本身。

·版本:每列都可以有一個(gè)可配置的版本數(shù)量,你可以通過列修飾符的制定版本獲取數(shù)據(jù)。


Figure1.HBaseFour-Dimensional Data Model

如圖1中所示,通過行鍵獲取一個(gè)指定的行,它由一個(gè)或多個(gè)列簇構(gòu)成,每個(gè)列簇有一個(gè)或多個(gè)列修飾符(圖1中稱為列),每列又可以有一個(gè)或多個(gè)版本。為了獲取指定數(shù)據(jù),你需要知道它的行鍵、列簇、列修飾符以及版本。當(dāng)設(shè)計(jì)HBase數(shù)據(jù)模型時(shí),對(duì)考慮數(shù)據(jù)是如何被獲取是十分有幫助的。你可以通過以下兩種方式獲得HBase數(shù)據(jù):

·通過他們的行鍵,或者一系列行鍵的表掃描。

·使用map-reduce進(jìn)行批操作

這種雙重獲取數(shù)據(jù)的方法使得HBase變得十分強(qiáng)大,典型地,在Hadoop中存儲(chǔ)數(shù)據(jù)意味著它對(duì)離線或批處理方式分析是有益的(尤其是批處理分析),但是,對(duì)實(shí)時(shí)獲取是不必要的。HBase通過key/value存儲(chǔ)來支持實(shí)時(shí)分析,以及通過map-reduce支持批處理分析。讓我們首先來看實(shí)時(shí)數(shù)據(jù)獲取,作為key/value存儲(chǔ),key是行鍵,value是列簇的集合,如圖2所示。


Figure2.HBaseas a Key/Value Store

如你在圖2中看到的,key是我們所提到過的行鍵,value是列簇的集合。你可以通過key檢索到value,或者換句話說,你可以通過行鍵“得到”行,或者你能通過給定起始和終止行鍵檢索一系列行,這就是前面提到的表掃描。你不能實(shí)時(shí)的查詢一個(gè)列的值,這就引出了一個(gè)重要的話題:行鍵的設(shè)計(jì)。

有兩個(gè)原因令行鍵的設(shè)計(jì)十分重要:

·表掃描是對(duì)行鍵的操作,所以,行鍵的設(shè)計(jì)控制著你能夠通過HBase執(zhí)行的實(shí)時(shí)/直接獲取量。

·當(dāng)在生產(chǎn)環(huán)境中運(yùn)行HBase時(shí),它在HDFS上部運(yùn)行,數(shù)據(jù)基于行鍵通過HDFS,如果你所有的行鍵都是以u(píng)ser-開頭,那么很有可能你大部分?jǐn)?shù)據(jù)都被分配一個(gè)節(jié)點(diǎn)上(違背了分布式數(shù)據(jù)的初衷),因此,你的行鍵應(yīng)該是有足夠的差異性以便分布式地通過整個(gè)部署。

你定義行鍵的方式取決于你想怎樣存取那些行。如果你想以用戶為基礎(chǔ)存儲(chǔ)數(shù)據(jù),那么一個(gè)策略是利用字節(jié)隊(duì)列在HBase中存儲(chǔ)行鍵,所以我們可以創(chuàng)建一個(gè)用戶ID的哈希(例如MD5或SHA-1),然后在哈希后面附上時(shí)間(long類型)。使用哈希有兩個(gè)重點(diǎn):(1)是它能夠?qū)alue分散開,數(shù)據(jù)能夠分布式地通過簇,(2)是它確保key的長度是一致的,以更加容易在表掃描中使用。

講了足夠多的理論,下面部分向你展示如何搭建HBase環(huán)境,并如何通過命令行使用。

你可以從Apache網(wǎng)站下載HBase,在寫本文時(shí),最新的版本是0.98.5,HBase團(tuán)隊(duì)推薦你在UNIX/Linux環(huán)境下安裝HBase,如果你想在Windows下運(yùn)行,你需要先安裝Cygwin,并在這上運(yùn)行HBase。當(dāng)你下載完這些文件,解壓到硬盤上。此外,你還需要安裝Java環(huán)境,如果你還沒有,從Oracle網(wǎng)站下載Java環(huán)境。在環(huán)境配置中添加名為HBASE_HOME的變量,值為你解壓HBase文件的根目錄,隨后,執(zhí)行bin文件夾下的start-hbase.sh腳本,它會(huì)在下面目錄輸出日志文件:

$HBASE_HOME/logs/

你可以在瀏覽器中輸入下面URL測(cè)試是否安裝正確:

http://localhost:60010

如果安裝正確,你應(yīng)該看到下面界面。


Figure3.HBaseManagement Screen

讓我們開始用命令行操作HBase,在HBasebin目錄下執(zhí)行下面命令:

./hbase shell

你應(yīng)該看到如下類似的輸出:

HBase Shell; enter'help' for list of supported commands.
Type "exit" toleave the HBase Shell
Version0.98.5-hadoop2, rUnknown, MonAug4 23:58:06 PDT2014
hbase(main):001:0>

創(chuàng)建一個(gè)名為PageViews的表,并具有名為info的列簇:

hbase(main):002:0> create'PageViews', 'info'
0 row(s) in 5.3160seconds
=> Hbase::Table- PageViews

每張表至少要有一個(gè)列簇,因此我們創(chuàng)建了info,現(xiàn)在,看看我們的表,執(zhí)行下面list命令:

hbase(main):002:0>list
TABLE
PageViews
1 row(s) in 0.0350seconds
=>["PageViews"]

如你所見,list命令返回一個(gè)名為PageViews的表,我們可以通過describe命令得到表的更多信息:

hbase(main):003:0> describe'PageViews'
DESCRIPTIONENABLED
'PageViews',{NAME => 'info', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER=> 'ROW',
REPLICATION_SCOPE=> '0', VERSIONS => '1', COMPRESSION => 'NONEtrue
',MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS=> 'false',
BLOCKSIZE=> '65536', IN_MEMORY => 'false', BLOCKCACHE =>'true'}
1 row(s) in 0.0480seconds

Describe命令返回表的詳細(xì)信息,包括列簇的列表,這里我們創(chuàng)建的僅有一個(gè):info,現(xiàn)在為表添加以下數(shù)據(jù),下面命令是在info中添加新的行:

hbase(main):004:0> put'PageViews', 'rowkey1', 'info:page', '/mypage'
0 row(s) in 0.0850seconds

Put命令插入一條行鍵為rowkey1的新紀(jì)錄,指定在info下的page列,插入值為/mypage的記錄,我們隨后可以通過get命令通過行鍵rowkey1查詢到這條記錄:

hbase(main):005:0> get'PageViews', 'rowkey1'
COLUMNCELL
info:pagetimestamp=1410374788088, value=/mypage
1 row(s) in 0.0250seconds

你可以看到列info:page,或者更多具體的列,其值為/mypage,并帶有時(shí)間戳表明該條記錄是什么時(shí)候插入的。讓我們?cè)谧霰頀呙柚霸偬砑右恍校?/p>

hbase(main):006:0> put'PageViews', 'rowkey2', 'info:page', '/myotherpage'
0 row(s) in 0.0050seconds

現(xiàn)在我們有兩行記錄了,讓我們查詢出PageViews表的所有記錄:

hbase(main):007:0> scan'PageViews'
ROWCOLUMN+CELL
rowkey1column=info:page, timestamp=1410374788088, value=/mypage
rowkey2column=info:page, timestamp=1410374823590,value=/myotherpage
2 row(s) in 0.0350seconds

如前面所提到的,我們不能查詢本身,但是我們可以對(duì)表進(jìn)行scan操作,如果你執(zhí)行scantable命令,它會(huì)返回表中所有行,這很有可能不是你想要做的。你可以給出行的范圍來限制返回的結(jié)果,讓我們插入一帶有s開頭行鍵的新記錄:

hbase(main):012:0> put'PageViews', 'srowkey2', 'info:page', '/myotherpage'

現(xiàn)在,如果我增加點(diǎn)限制,想查詢行鍵在r和s之間的記錄,可以使用如下結(jié)構(gòu):

hbase(main):014:0> scan'PageViews', { STARTROW => 'r', ENDROW => 's' }
ROWCOLUMN+CELL
rowkey1column=info:page, timestamp=1410374788088, value=/mypage
rowkey2column=info:page, timestamp=1410374823590,value=/myotherpage
2 row(s) in 0.0080seconds

這個(gè)scan返回了僅有s開頭的記錄,這個(gè)類比是基于全行鍵上的,所以rowkey1比r大,所有它被返回了。另外,scan的結(jié)果包含了所指范圍的STARTROW,但不包含ENDROW,注意,ENDROW不是必須指定的,如果我們執(zhí)行相同查詢只給出了STARTROW,那么我們會(huì)得到行鍵比r大的所有記錄。

hbase(main):013:0> scan'PageViews', { STARTROW => 'r' }
ROWCOLUMN+CELL
rowkey1column=info:page, timestamp=1410374788088, value=/mypage
rowkey2column=info:page, timestamp=1410374823590,value=/myotherpage
srowkey2column=info:page,timestamp=1410375975965, value=/myotherpage
3 row(s) in 0.0120seconds

HBase是一種NoSQL,通常被稱為Hadoop Database,它是開源并基于Google BigTable白皮書,HBase運(yùn)行在HDFS之上,因此使它具有高度可擴(kuò)展性,并支持Hadoopmap-reduce程序設(shè)計(jì)模型。HBase有兩種訪問方式:通過行鍵進(jìn)行隨機(jī)訪問;通過map-reduce脫機(jī)或批訪問。

本文講述了HBase的特征和它的優(yōu)點(diǎn),并簡(jiǎn)要回顧了行鍵設(shè)計(jì)的重點(diǎn)之處,它還向你展示了如何在本地配置HBase環(huán)境,使用命令創(chuàng)建表、插入數(shù)據(jù)、檢索指定行以及最后如何進(jìn)行scan操作

總結(jié)

以上所述是小編給大家介紹的hbase的優(yōu)點(diǎn),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringBoot?SpringSecurity?詳細(xì)介紹(基于內(nèi)存的驗(yàn)證)

    SpringBoot?SpringSecurity?詳細(xì)介紹(基于內(nèi)存的驗(yàn)證)

    這篇文章主要介紹了SpringBoot?SpringSecurity?介紹(基于內(nèi)存的驗(yàn)證),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Java中的List接口實(shí)現(xiàn)類LinkList和ArrayList詳解

    Java中的List接口實(shí)現(xiàn)類LinkList和ArrayList詳解

    這篇文章主要介紹了Java中的List接口實(shí)現(xiàn)類LinkList和ArrayList詳解,List接口繼承自Collection接口,是單列集合的一個(gè)重要分支,實(shí)現(xiàn)了List接口的對(duì)象稱為List集合,在List集合中允許出現(xiàn)重復(fù)的元素,所有的元素是以一種線性方式進(jìn)行存儲(chǔ)的,需要的朋友可以參考下
    2024-01-01
  • java基本教程之常用的實(shí)現(xiàn)多線程的兩種方式 java多線程教程

    java基本教程之常用的實(shí)現(xiàn)多線程的兩種方式 java多線程教程

    下面開始學(xué)習(xí)“常用的實(shí)現(xiàn)多線程的2種方式”:Thread 和 Runnable。之所以說是常用的,是因?yàn)橥ㄟ^還可以通過java.util.concurrent包中的線程池來實(shí)現(xiàn)多線程
    2014-01-01
  • springboot實(shí)現(xiàn)定時(shí)任務(wù)的四種方式小結(jié)

    springboot實(shí)現(xiàn)定時(shí)任務(wù)的四種方式小結(jié)

    本文主要介紹了springboot實(shí)現(xiàn)定時(shí)任務(wù)的四種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Java中Steam流的用法詳解

    Java中Steam流的用法詳解

    Stream是Java?8?API添加的一個(gè)新的抽象,稱為流Stream,本文主要介紹了Java中Steam流的用法詳解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-04-04
  • springboot實(shí)現(xiàn)配置多環(huán)境yml方式

    springboot實(shí)現(xiàn)配置多環(huán)境yml方式

    在SpringBoot項(xiàng)目中,通過創(chuàng)建不同的YAML配置文件來實(shí)現(xiàn)多環(huán)境配置是一種常見且有效的方法,這些配置文件包括application.yml、application-dev.yml、application-prod.yml等,分別對(duì)應(yīng)不同的開發(fā)環(huán)境,如開發(fā)環(huán)境、生產(chǎn)環(huán)境
    2024-11-11
  • 詳解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步驟

    詳解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步驟

    本文就在項(xiàng)目中來集成 UidGenerator這一工程來作為項(xiàng)目的全局唯一 ID生成器。接下來通過實(shí)例代碼給大家詳解詳解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步驟,感興趣的朋友一起看看吧
    2018-10-10
  • 如何正確控制springboot中bean的加載順序小結(jié)篇

    如何正確控制springboot中bean的加載順序小結(jié)篇

    這篇文章主要介紹了如何正確控制springboot中bean的加載順序總結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java實(shí)現(xiàn)快速排序過程分析

    Java實(shí)現(xiàn)快速排序過程分析

    今天小編就為大家分享一篇關(guān)于Java實(shí)現(xiàn)快速排序過程分析,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • IP查詢系統(tǒng)的異步回調(diào)案例

    IP查詢系統(tǒng)的異步回調(diào)案例

    本文主要分享了IP查詢系統(tǒng)的異步回調(diào)案例,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02

最新評(píng)論

原平市| 叙永县| 青神县| 宣化县| 综艺| 任丘市| 德惠市| 凌海市| 绥化市| 盐山县| 平陆县| 霍州市| 营口市| 亚东县| 黄石市| 兴仁县| 驻马店市| 巴东县| 扶余县| 泸西县| 舟曲县| 西贡区| 蕲春县| 永泰县| 阜康市| 沾益县| 宁安市| 昂仁县| 厦门市| 临洮县| 蒙自县| 唐山市| 横峰县| 仲巴县| 闸北区| 唐海县| 诸暨市| 敦煌市| 鄢陵县| 沐川县| 隆子县|