日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BigBrother的大数据之旅Day 12 Hbase(1)

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BigBrother的大数据之旅Day 12 Hbase(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HBASE (Hadoop Database)是個高可用,高性能, 面向列可伸縮、實時讀寫的分布式數據庫

Hadoop HDFS作為其文件存儲系統,利用Hadoop MapReduce來處理HBase中的海量數據,利用Zookeeper作為其分布式協同服務

1 hbse的表結構

Row KeyTime StampCF1CF2CF3
11248112t6CF2:q1=val1CF3:q3=val3
t3
t2CF1:q2=val2

l RowKey

是Byte array,是表中每條記錄的“主鍵”,Rowkey的設計非常重要;

l Timestamp

版本號,類型為Long,默認值是系統時間戳,可由用戶自定義

l ColumnFamily

列族,擁有一個名稱(string),包含一個或者多個相關列

l Column

屬于某一個列族,格式為:familyName:columnName,每條記錄可動態添加

l Value(Cell)

單元格由行鍵、列族、列、 時間戳唯一決定(默認保存3個時間戳記錄)

單元格的數據是沒有類型的,全部以字節碼形式存儲

2 hbase的架構及其組件和作用

(1) client 是用戶端的接口,保存cache

(2) zookeeper分布式調度框架, 集群搭建使用了zookeeper的配置元數據功能(存儲HBase的schema和table元數據),是一個進程通知其他進程需要做什么的一種常用方式.ZooKeeper使用共享存儲模型來實現應用間的協作和同步原語。

zookeeper 存貯所有Region的尋址入口。

(3) Hmaster

a 為 regionServer分配region,

b 負責regionserver的負載均衡,

c 發現失效端regionserver后,重新分配其上的region

d 管理用戶對table端增刪改查

(4)region server

多個regionserver合為一個regionserver集群(Cluster)

a 維護region處理region端IO請求

b 負責切分在運行過程中變得過大的region

(5) region

hbase的表分為多個region(橫著把表切開)

ps : 數據是連續的

region裂變: region不斷增大,當增大到一個閾值端時候就會分割為兩個region

(6) store 分為memstore(1個)和storefile(0-n個)

a 一個store對應一個列族(豎著切行)

b 首先向memstore中存儲數據,當數據到達一定閾值時,flash cache把數據寫到storefile中(每次都是一個單獨的文件)

c n個storefile合并為一個文件,分為大合并和小合并,大合并期間會刪除多余的數據,平常只會在數據上添加墓碑標記,進行邏輯刪除


總之 region server cluster >> region server >> region>> store

3 詳述hbase的讀寫流程

寫流程:

(1) client 通過zookeeper的調度向regionserver發送請求

(2) 數據首先寫入hlog和memstore(key排序)

(3)當memstroe中數據到達一定閾值時,flush(單獨的一個線程)到storefile(只讀文件)

(4)多個storefile文件合并為大的storefile文件

(5)單個StoreFile大小超過一定閾值后,觸發Split操作,把當前Region Split成2個新的Region。父Region會下線,新Split出的2個子Region會被HMaster分配到相應的RegionServer上,使得原先1個Region的壓力得以分流到2個Region上。

讀操作

client–>Zookeeper–>-ROOT-表(好像0.96版本后就取消了)–>.META.表(內存表,存放在regionserver上)–>RegionServer–>Region–>client

(1) client訪問zk,查找root表,得到.meta表的信息(region元數據)

(2) 從.meta表中找到目標region信息,找到對應端regionserver

(3) 獲取數據 優先級為 blockcache > memstore> storefile

如果blockcache中沒有查詢到的結果,會把最后讀取的結果存放到cache中(前提是讀到了數據)

4 hbase集群搭建步驟

(1)copy hbase-0.98.12.1-hadoop2-bin.tar.gz到HBASE主節點

(2)解壓文件到 /usr/local/hbase(記得創建hbase目錄)

tar zxvf hbase-0.98.12.1-hadoop2-bin.tar.gz -C /usr/local/hbase

(3) 配置環境變量

/usr/local/hbase/hbase-0.98.12.1-hadoop2/conf下

? a: hbase-env.sh中設置HBASE_MANAGES_ZK為false – 不使用hbase自帶的zookeeper,使用自己的zookeeper集群

? b: 配置java_home

export JAVA_HOME=/usr/java/jdk1.7.0_80

export HBASE_MANAGES_ZK=false

(4) 配置hbse-site.xml文件

/usr/local/hbase/hbase-0.98.12.1-hadoop2/conf

<configuration><property><name>hbase.rootdir</name><value>hdfs://mycluster/hbase</value></property><property><name>hbase.zookeeper.quorum</name><value>node2,node3,node4</value></property><property><name>hbase.zookeeper.property.dataDir</name><value>/var/bjsxt/hbase/zookeeper</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property> </configuration>

(5) 配置backup節點

在/usr/local/hbase/hbase-0.98.12.1-hadoop2/conf下

創建backup-master文件,并寫入

node2 – node2 為backup節點,將來會在機器上開啟從master進程

(6) 配置regionserver節點

在/usr/local/hbase/hbase-0.98.12.1-hadoop2/conf下

vim regionservers 寫入

node2 node3 node4

(7) copy hdfs-site.xml文件到hbase的conf下

(8) scp hbse到每個節點(node2,node3,node4)

(9) 在每個node的profile文件中加入hbase的位置環境變量

export HBASE_HOME=/usr/local/hbase/hbase-0.98.12.1-hadoop2 export PATH=$PATH:$HBASE_HOME/bin

記得要source一下這個文件哦

(10) 在bin下面有開啟和關閉的腳本

(11) 通過瀏覽器測試訪問[外鏈圖片轉存失敗

(12) 命令行訪問

5 列出hbase的基本操作

名稱Shell命令
創建表create ‘表名’, ‘列族名1’[,…]
查看所有表list
添加記錄put ‘表名’, ‘RowKey’, ‘列族名稱:列名’, ‘值’
查看記錄get ‘表名’, ‘RowKey’, ‘列族名稱:列名’
查看表中的記錄總數count ‘表名’
刪除記錄delete ‘表名’ , ‘RowKey’, ‘列族名稱:列名’
刪除一張表先要屏蔽該表,才能對該表進行刪除。 第一步 disable ‘表名稱’ 第二步 drop ‘表名稱’
查看所有記錄scan '表名" ’ --慎用如果表數據多的話

6 列出hbase的java api基本操作

//conf為配置文件,添加了zookeeper的地址 //創建一個數據庫級的對象 admin = new HBaseAdmin(conf) //創建表級的對象,tm為表的名稱 table = new HTable(conf,tm.getBytes())//表級操作 //判斷tm表是否存在 admin.tableExists(tm) //把tm表置為無效 admin.disableTable(tm) //刪除表,首先需要把表置為無效 admin.deleteTable(tm) //創建表 admin.createTable(tm)//行級操作 //寫操作 //1 創建行級操作的對象put,并指定rowkey Put put = new Put("001rowkey".getBytes()); //2 要插入的每一列的值 //cf列族名,name為列名,zs是值 put.add("cf".getBytes(),"name".getBytes()),"zs".getBytes()); //3 寫入表 table.put(put);//讀操作 get和scan // ----get---- //1 創建讀取行對象get,并指定rowkey Get get = new Get("001rowkey".getBytes()); //2 指定需要查詢的列族和列 // 添加要獲取的列和列族,減少網絡的io,相當于在服務器端做了過濾 get.addColumn("cf".getBytes(),"name".getBytes()); //3 查詢的返回值 Result result = table.get(get); //4 獲取查詢的單元結果 Cell cel1 = result.getColumnLatestCell("cf".getBytes(),name.getBytes()); //5 輸出結果 System.out.print(Bytes.toString(CellUtil.cloneValue(cel1)))//------scan-------- //1 創建對象,并指定rowkey Scan scan = new Scan(); //從rowkey1111掃描到rowkey1112不包含1113 scan.setStarRow("1111".getBytes()); scan.setStopRow("1113".getBytes()); //2 設置查詢的列族和列 scan.addColumn("cf".getBytes(),"name".getBytes()); //3 用結果接收一下 ResultScanner rss = table.getScanner(scan); //4 遍歷結果集 for (Result result : rss) {List<Cell> cellsName = result.getColumnCells("cf".getBytes(), "name".getBytes());for (Cell cell : cellsName) {//5 輸出結果System.out.print("\t\t" + Bytes.toString(CellUtil.cloneValue(cell)));}System.out.println(); //其他api scan相關 addFamily指定要掃描列族中的所有列 setTimeRange指定要獲取的列的timestamp范圍 setTimestamp指定要獲取列值的timestamp setMaxVersions指定要獲取的列值的版本數 setBatch限制next()方法返回的值的最大數量 setFilter指定過濾器 setCacheBlocks(boolean)顯式指定禁用本次掃描服務端的block緩存 使用完畢后不要忘了,關閉admin哦 admin.close();

參考

版權聲明:本文參考圖片為CSDN博主「山上的神仙」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011833033/article/details/79773421

總結

以上是生活随笔為你收集整理的BigBrother的大数据之旅Day 12 Hbase(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。