<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Hadoop入門進階課程10--HBase介紹、安裝與應用案例

      本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,博主為石山園,博客地址為 http://www.rzrgm.cn/shishanyuan  。該系列課程是應邀實驗樓整理編寫的,這里需要贊一下實驗樓提供了學習的新方式,可以邊看博客邊上機實驗,課程地址為 https://www.shiyanlou.com/courses/237

      【注】該系列所使用到安裝包、測試數據和代碼均可在百度網盤下載,具體地址為 http://pan.baidu.com/s/10PnDs,下載該PDF文件

      1搭建環境

      部署節點操作系統為CentOS,防火墻和SElinux禁用,創建了一個shiyanlou用戶并在系統根目錄下創建/app目錄,用于存放Hadoop等組件運行包。因為該目錄用于安裝hadoop等組件程序,用戶對shiyanlou必須賦予rwx權限(一般做法是root用戶在根目錄下創建/app目錄,并修改該目錄擁有者為shiyanlou(chown R shiyanlou:shiyanlou /app)。

      Hadoop搭建環境:

      l  虛擬機操作系統: CentOS6.6  64位,單核,1G內存

      l  JDK1.7.0_55 64

      l  Hadoop1.1.2

      2HBase介紹

      HBase Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

      HBaseGoogle Bigtable的開源實現,類似Google Bigtable利用GFS作為其文件存儲系統,HBase利用Hadoop HDFS作為其文件存儲系統;Google運行MapReduce來處理Bigtable中的海量數據,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。

      clip_image001

      上圖描述了Hadoop EcoSystem中的各層系統,其中HBase位于結構化存儲層,Hadoop HDFSHBase提供了高可靠性的底層存儲支持,Hadoop MapReduceHBase提供了高性能的計算能力,ZookeeperHBase提供了穩定服務和failover機制。

      此外,PigHive還為HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的非常簡單。 Sqoop則為HBase提供了方便的RDBMS數據導入功能,使得傳統數據庫數據向HBase中遷移變的非常方便。

      2.1 HBase訪問接口

      1. Native Java API,最常規和高效的訪問方式,適合Hadoop MapReduce Job并行批處理HBase表數據

      2. HBase ShellHBase的命令行工具,最簡單的接口,適合HBase管理使用

      3. Thrift Gateway,利用Thrift序列化技術,支持C++PHPPython等多種語言,適合其他異構系統在線訪問HBase表數據

      4. REST Gateway,支持REST 風格的Http API訪問HBase, 解除了語言限制

      5. Pig,可以使用Pig Latin流式編程語言來操作HBase中的數據,和Hive類似,本質最終也是編譯成MapReduce Job來處理HBase表數據,適合做數據統計

      6. Hive,當前HiveRelease版本尚沒有加入對HBase的支持,但在下一個版本Hive 0.7.0中將會支持HBase,可以使用類似SQL語言來訪問HBase

       

      2.2 HBase數據模型

      2.2.1 Table & Column Family

      clip_image003

      l  Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序

      l  Timestamp: 時間戳,每次數據操作對應的時間戳,可以看作是數據的version number

      l  Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中可以由任意多個Column組成,即Column Family支持動態擴展,無需預先定義Column的數量以及類型,所有Column均以二進制格式存儲,用戶需要自行進行類型轉換。

      2.2.2 Table & Region

      Table隨著記錄數不斷增加而變大后,會逐漸分裂成多份splits,成為regions,一個region[startkey,endkey)表示,不同的region會被Master分配給相應的RegionServer進行管理:

      clip_image004

      -ROOT- && .META. Table

      HBase中有兩張特殊的Table-ROOT-.META.

      l  .META.:記錄了用戶表的Region信息,.META.可以有多個regoin

      l  -ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個region

      l  Zookeeper中記錄了-ROOT-表的location

      Client訪問用戶數據之前需要首先訪問zookeeper,然后訪問-ROOT-表,接著訪問.META.表,最后才能找到用戶數據的位置去訪問,中間需要多次網絡操作,不過client端會做cache緩存。

      2.2.3 MapReduce on HBase

      HBase系統上運行批處理運算,最方便和實用的模型依然是MapReduce,如下圖:

      clip_image005

      HBase TableRegion的關系,比較類似HDFS FileBlock的關系,HBase提供了配套的TableInputFormatTableOutputFormat API,可以方便的將HBase Table作為Hadoop MapReduceSourceSink,對于MapReduce Job應用開發人員來說,基本不需要關注HBase系統自身的細節。

      2.3 HBase系統架構

      clip_image006

       

      2.3.1 Client

      HBase Client使用HBaseRPC機制與HMasterHRegionServer進行通信,對于管理類操作,ClientHMaster進行RPC;對于數據讀寫類操作,ClientHRegionServer進行RPC

      2.3.2 Zookeeper

      Zookeeper Quorum中除了存儲了-ROOT-表的地址和HMaster的地址,HRegionServer也會把自己以Ephemeral方式注冊到 Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態。此外,Zookeeper也避免了HMaster的 單點問題,見下文描述

      2.3.3 HMaster

      HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過ZookeeperMaster Election機制保證總有一個Master運行,HMaster在功能上主要負責TableRegion的管理工作:

      1. 管理用戶對Table的增、刪、改、查操作

      2. 管理HRegionServer的負載均衡,調整Region分布

      3. Region Split后,負責新Region的分配

      4. HRegionServer停機后,負責失效HRegionServer 上的Regions遷移

      2.3.4 HRegionServer

      HRegionServer主要負責響應用戶I/O請求,向HDFS文件系統中讀寫數據,是HBase中最核心的模塊。

      clip_image007

      HRegionServer內部管理了一系列HRegion對象,每個HRegion對應了Table中的一個 RegionHRegion中由多個HStore組成。每個HStore對應了Table中的一個Column Family的存儲,可以看出每個Column Family其實就是一個集中的存儲單元,因此最好將具備共同IO特性的column放在一個Column Family中,這樣最高效。

      HStore存儲是HBase存儲的核心了,其中由兩部分組成,一部分是MemStore,一部分是StoreFiles MemStoreSorted Memory Buffer,用戶寫入的數據首先會放入MemStore,當MemStore滿了以后會Flush成一個StoreFile(底層實現是HFile), 當StoreFile文件數量增長到一定閾值,會觸發Compact合并操作,將多個StoreFiles合并成一個StoreFile,合并過程中會進 行版本合并和數據刪除,因此可以看出HBase其實只有增加數據,所有的更新和刪除操作都是在后續的compact過程中進行的,這使得用戶的寫操作只要 進入內存中就可以立即返回,保證了HBase I/O的高性能。當StoreFiles Compact后,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值后,會觸發Split操作,同時把當前 Region Split2Region,父Region會下線,新Split出的2個孩子Region會被HMaster分配到相應的HRegionServer 上,使得原先1Region的壓力得以分流到2Region上。下圖描述了CompactionSplit的過程:

      clip_image008

      在理解了上述HStore的基本原理后,還必須了解一下HLog的功能,因為上述的HStore在系統正常工作的前提下是沒有問 題的,但是在分布式系統環境中,無法避免系統出錯或者宕機,因此一旦HRegionServer意外退出,MemStore中的內存數據將會丟失,這就需要引入HLog了。每個HRegionServer中都有一個HLog對象,HLog是一個實現Write Ahead Log的類,在每次用戶操作寫入MemStore的同時,也會寫一份數據到HLog文件中(HLog文件格式見后續),HLog文件定期會滾動出新的,并 刪除舊的文件(已持久化到StoreFile中的數據)。當HRegionServer意外終止后,HMaster會通過Zookeeper感知 到,HMaster首先會處理遺留的 HLog文件,將其中不同RegionLog數據進行拆分,分別放到相應region的目錄下,然后再將失效的region重新分配,領取 到這些regionHRegionServerLoad Region的過程中,會發現有歷史HLog需要處理,因此會Replay HLog中的數據到MemStore中,然后flushStoreFiles,完成數據恢復。

      2.4 HBase存儲格式

      HBase中的所有數據文件都存儲在Hadoop HDFS文件系統上,主要包括上述提出的兩種文件類型:

      1.HFile HBaseKeyValue數據的存儲格式,HFileHadoop的二進制格式文件,實際上StoreFile就是對HFile做了輕量級包裝,即StoreFile底層就是HFile

      2.HLog FileHBaseWALWrite Ahead Log) 的存儲格式,物理上是HadoopSequence File

      2.4.1 HFile

      下圖是HFile的存儲格式:

      clip_image009

      首先HFile文件是不定長的,長度固定的只有其中的兩塊:TrailerFileInfo。正如圖中所示的,Trailer 中有指針指向其他數據塊的起始點。File Info中記錄了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data IndexMeta Index塊記錄了每個Data塊和Meta塊的起始點。

      Data BlockHBase I/O的基本單元,為了提高效率,HRegionServer中有基于LRUBlock Cache機制。每個Data塊的大小可以在創建一個Table的時候通過參數指定,大號的Block有利于順序Scan,小號Block利于隨機查詢。 每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內容就是一些隨機數字,目的是防止數據損壞。后面會詳細介紹每個KeyValue對的內部構造。

      HFile里面的每個KeyValue對就是一個簡單的byte數組。但是這個byte數組里面包含了很多項,并且有固定的結構。我們來看看里面的具體結構:

      clip_image010

      開始是兩個固定長度的數值,分別表示Key的長度和Value的長度。緊接著是Key,開始是固定長度的數值,表示RowKey 的長度,緊接著是RowKey,然后是固定長度的數值,表示Family的長度,然后是Family,接著是Qualifier,然后是兩個固定長度的數 值,表示Time StampKey TypePut/Delete)。Value部分沒有這么復雜的結構,就是純粹的二進制數據了。

      2.4.2 HLogFile

      clip_image011

      上圖中示意了HLog文件的結構,其實HLog文件就是一個普通的Hadoop Sequence FileSequence File KeyHLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,除了tableregion名字外,同時還包括 sequence numbertimestamptimestamp是“寫入時間”,sequence number的起始值為0,或者是最近一次存入文件系統中sequence number

      HLog Sequece FileValueHBaseKeyValue對象,即對應HFile中的KeyValue,可參見上文描述。

      3安裝部署HBase

      3.1 安裝過程

      3.1.1 下載HBase安裝包

      Apache網站上(hbase.apache.org)下載HBase穩定發布包:

      http://mirrors.cnnic.cn/apache/hbase/hbase-0.96.2/

      clip_image013

      也可以在/home/shiyanlou/install-pack目錄中找到該安裝包,解壓該安裝包并把該安裝包復制到/app目錄中

      cd /home/shiyanlou/install-pack

      tar -zxf hbase-0.96.2-hadoop1-bin.tar.gz

      mv hbase-0.96.2-hadoop1 /app/hbase-0.96.2

      clip_image015

      3.1.2 設置環境變量

      1. 使用sudo vi /etc/profile命令修改系統環境變量

      export HBASE_HOME=/app/hbase-0.96.2

      export PATH=$PATH:$HBASE_HOME/bin

      clip_image017

      2. 使環境變量生效并驗證環境變量生效

      source /etc/profile

      hbase version

      clip_image019

      3.1.3 編輯hbase-env.sh

      1. 打開hbase-env.sh文件

      cd /app/hbase-0.96.2/conf

      sudo vi hbase-env.sh

      2. 修改該文件配置

      #Java環境

      export JAVA_HOME=/app/lib/jdk1.7.0_55

      #通過hadoop的配置文件找到hadoop集群

      export HBASE_CLASSPATH=/app/hadoop-1.1.2/conf

      #使用HBASE自帶的zookeeper管理集群

      export HBASE_MANAGES_ZK=true

      clip_image021

      clip_image023

      3.1.4 編輯hbase-site.xml

      1. 打開hbase-site.xml配置文件

      cd /app/hbase-0.96.2/conf

      sudo vi hbase-site.xml

      2. 配置hbase-site.xml文件

      <configuration>

        <property>

           <name>hbase.rootdir</name>

           <value>hdfs://hadoop:9000/hbase</value>

        </property>

        <property>

           <name>hbase.cluster.distributed</name>

           <value>true</value>

        </property>

        <property>

          <name>hbase.zookeeper.quorum</name>

          <value>b393a04554e1</value>

        </property>

      </configuration>

      clip_image025

      3.2 啟動并驗證

      3.2.1 啟動HBase

      通過如下命令啟動Hbase

      cd /app/hbase-0.96.2/bin

      ./start-hbase.sh

      clip_image027

      3.2.2 驗證啟動

      1. hadoop節點使用jps查看節點狀態

      clip_image029

      2. 進入hbaseshell命令行,創建表member并進行查看

      hbase shell

      hbase>create 'member', 'm_id', 'address', 'info'

      clip_image031

      4測試例子

      4.1 測試說明

      這里我們用一個學生成績表作為例子,對HBase的基本操作和基本概念進行講解:

      下面是學生的成績表:

      name   grad      course:math   course:art

      Tom     1            87           97

      Jerry     2           100          80

      這里grad對于表來說是一個列,course對于表來說是一個列族,這個列族由兩個列組成:mathart,當然我們可以根據我們的需要在course中建立更多的列族,computer,physics等相應的列添加入course列族.

      4.2 Shell操作

      4.2.1 建立一個表格 scores 具有兩個列族grad courese

      hbase(main):002:0> create 'scores', 'grade', 'course'

      clip_image033

      4.2.2 查看當先HBase中具有哪些表

      hbase(main):003:0> list

      clip_image035

      4.2.3 查看表的構造

      hbase(main):004:0> describe 'scores'

      clip_image037

      4.2.4 插入數據

      給表中 Tom 列族插入數據

      hbase(main):005:0> put 'scores', 'Tom', 'grade:', '1'

      hbase(main):006:0> put 'scores', 'Tom', 'course:math', '87'

      hbase(main):007:0> put 'scores', 'Tom', 'course:art', '97'

      給表中Jerry 列族插入數據

      hbase(main):008:0> put 'scores', 'Jerry', 'grade:', '2'

      hbase(main):009:0> put 'scores', 'Jerry', 'course:math', '100'

      hbase(main):010:0> put 'scores', 'Jerry', 'course:art', '80'

      clip_image039

      4.2.5 查看scores表中Tom的相關數據

      hbase(main):011:0> get 'scores', 'Tom'

      clip_image041

      4.2.6 查看scores表中所有數據

      hbase(main):012:0> scan 'scores'

      clip_image043

      posted @ 2015-07-21 08:57  shishanyuan  閱讀(3249)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 激情伊人五月天久久综合| 亚洲人成网站在线观看播放不卡| 99热精品毛片全部国产无缓冲| 久久www免费人成看片中文| 亚洲夂夂婷婷色拍ww47| 欧美日韩欧美| 香港三级韩国三级日本三级| 日韩精品二区三区四区| 国产精品一区二区中文| 东京热一精品无码av| 麻花传媒在线观看免费| 西西大胆午夜人体视频| 少妇被粗大的猛烈xx动态图| 国产熟睡乱子伦视频在线播放| 色欲综合久久中文字幕网| 先锋影音av最新资源| 最新国产精品好看的精品| 大地资源高清免费观看| 91精品国产老熟女在线| 国产精品美女一区二三区| 含紧一点h边做边走动免费视频| 亚洲av乱码一区二区| 免费a级毛片无码av| 自拍偷在线精品自拍偷99| 国产精品国产精品偷麻豆| 国产美女被遭强高潮免费一视频| 绥芬河市| 国产无遮挡猛进猛出免费| 国产成人av电影在线观看第一页| 韩城市| 人妻系列中文字幕精品| 仁布县| 亚洲最大日韩精品一区| 人妻系列中文字幕精品| 欧美日韩另类国产| 欧美牲交videossexeso欧美| 深夜免费av在线观看| 日本三级香港三级三级人妇久| 特黄三级又爽又粗又大| 麻豆av一区二区三区| 国产偷国产偷亚洲清高网站|