主頁 >  其他 > 【由淺入深討論HBase:自認全網最全最細】,你想了解的關于HBase知識,基本上都有,有需要的可以收藏當字典使用

【由淺入深討論HBase:自認全網最全最細】,你想了解的關于HBase知識,基本上都有,有需要的可以收藏當字典使用

2021-09-08 08:57:06 其他

文章目錄

  • 前言
  • 一 HBase簡介
  • 二 HBase表的資料模型
      • 1 rowkey行鍵
      • 2 Column Family列族
      • 3 Column列
      • 4 cell單元格
      • 5 Timestamp時間戳
  • 三 HBase整體架構
      • 1 Client客戶端
      • 2 ZooKeeper集群
      • 3 HMaster
      • 4 HRegionServer
      • 5 Region
  • 四 HBase安裝
      • 1 安裝準備
      • 2 安裝步驟
      • 3 啟動HBase集群
      • 4 停止HBase集群
  • 五 HBase shell 命令基本操作
      • 1 進入HBase客戶端命令操作界面
      • 2 HBase表模型特點
      • 3 HBase資料型別
      • 4 HBase命令列操作
  • 六 HBase的高級shell管理命令
        • 1 status
        • 2 whoami
        • 3 list
        • 4 count
        • 5 describe
        • 6 exists
        • 7 is_enabled、is_disabled
        • 8 alter
        • 9 disable/enable
        • 10 drop
        • 11 truncate
  • 七 Hive與HBase的集成
  • 八 HBase客戶端API操作
  • 九 phoenix操作HBase
      • 1 安裝pheonix
        • 1.1 下載pheonix
        • 1.2 解壓pheonix
        • 1.3 整合phoenix到hbase
        • 1.4 使用phoenix SQL命令列
          • 1.4.1 創建表
          • 1.4.2 編輯并匯入資料
          • 1.4.3 查詢資料
      • 2 Squirrel-sql 連接Phoenix
        • 2.1 下載Squirrel-sql
        • 2.2 設定Squirrel-sql 連接Phoenix
      • 3 Phoenix 映射Hbase 表
        • 3.1 視圖映射
        • 3.2 表映射

前言

各位小伙伴大家好,最近因為公司電腦固態硬碟壞掉和大院拆遷被迫搬家的事情,心情一直比較苦悶;在周末搬完家后,想著怎么寫個專題類的文章跟各位小伙伴們一起在知識的海洋中遨游下,好好用知識讓我們自己放松下,最終確認下來干一篇非常全面的HBase文章,大家可以一鍵三連加評論,有相關的意見和想法可以一起討論學習,話不多說,直接開始我們今天的正題,讓我們在HBase海洋中盡情遨游吧:

一 HBase簡介

HBase是一個高可靠性、高性能、面向列、可伸縮的分布式存盤系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存盤集群,
HBase的目標是存盤并處理大型的資料,更具體來說是僅需使用普通的硬體配置,就能夠處理由成千上萬的行和列所組成的大型資料,
HBase是Google Bigtable的開源實作,但是也有很多不同之處,比如:Google Bigtable利用GFS作為其檔案存盤系統,HBase利用Hadoop HDFS作為其檔案存盤系統;Google運行MAPREDUCE來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBASE中的海量資料;Google Bigtable利用Chubby作為協同服務,HBase利用Zookeeper作為對應,它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索資料,僅支持單行事務(可通過hive支持來實作多表join等復雜操作),主要用來存盤非結構化和半結構化的松散資料,
HBase與mysql、oralce、db2、sqlserver等關系型資料庫不同,它是一個NoSQL資料庫(非關系型資料庫)
HBase的表模型與關系型資料庫的表模型不同:
HBase與mysql、oralce、db2、sqlserver等關系型資料庫不同,它是一個NoSQL資料庫(非關系型資料庫)
HBase的表模型與關系型資料庫的表模型不同:
HBase的表沒有固定的欄位定義;
HBase的表中每行存盤的都是一些key-value對;
Hbase的表中有列族的劃分,用戶可以指定將哪些kv插入哪個列族;
Hbase的表在物理存盤上,是按照列族來分割的,不同列族的資料一定存盤在不同的檔案中;
Hbase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重復;
Hbase中的資料,包含行鍵,包含key,包含value,都是byte[ ]型別,hbase不負責為用戶維護資料型別;
HBASE對事務的支持很差;
HBASE相比于其他nosql資料庫(mongodb、redis、cassendra、hazelcast)的特點:
Hbase的表資料存盤在HDFS檔案系統中,所以,hbase具備如下特性:
海量存盤
列式存盤
資料存盤的安全性可靠性極高
支持高并發
存盤容量可以線性擴展

二 HBase表的資料模型

圖片: https://uploader.shimo.im/f/sSMktExtUno2E4KS.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjMzNDEsImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzMDQxLCJ1c2VySWQiOjIyMjU4ODY4fQ.FujgU3iV8N-MwLvVqiPIOQGYWuHj-LsaznQSgiMLGpM

1 rowkey行鍵

table的主鍵,table中的記錄按照rowkey 的字典序進行排序
Row key行鍵可以是任意字串(最大長度是 64KB,實際應用中長度一般為 10-100bytes)

2 Column Family列族

列族或列簇
HBase表中的每個列,都歸屬與某個列族
列族是表的schema的一部分(而列不是),即建表時至少指定一個列族
比如創建一張表,名為user,有兩個列族,分別是info和data,建表陳述句create ‘user’, ‘info’, ‘data’

3 Column列

列肯定是表的某一列族下的一個列,用列族名:列名表示,如info列族下的name列,表示為info:name
屬于某一個ColumnFamily,類似于我們mysql當中創建的具體的列

4 cell單元格

指定row key行鍵、列族、列,可以確定的一個cell單元格
cell中的資料是沒有型別的,全部是以位元組陣列進行存盤
在這里插入圖片描述

5 Timestamp時間戳

可以對表中的Cell多次賦值,每次賦值操作時的時間戳timestamp,可看成Cell值的版本號version number;即一個Cell可以有多個版本的值

三 HBase整體架構

圖片: https://uploader.shimo.im/f/IWpT4XCtvxaYMLCi.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjM2MzMsImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzMzMzLCJ1c2VySWQiOjIyMjU4ODY4fQ.B-ESwlFT0-W1ifMCrmb0HwTzvKuuoo5tdlUj-WkARPA

1 Client客戶端

Client是操作HBase集群的入口;
對于管理類的操作,如表的增、刪、改操縱,Client通過RPC與HMaster通信完成;
對于表資料的讀寫操作,Client通過RPC與RegionServer互動,讀寫資料
Client型別:
HBase shell
Java編程介面
Thrift、Avro、Rest等等

2 ZooKeeper集群

作用:
實作了HMaster的高可用,多HMaster間進行主備選舉;
保存了HBase的元資料資訊meta表,提供了HBase表中region的尋址入口的線索資料;
對HMaster和HRegionServer實作了監控;

3 HMaster

HBase集群也是主從架構,HMaster是主的角色,是老大
主要負責Table表和Region的相關管理作業:
關于Table
管理Client對Table的增刪改的操作
關于Region
在Region分裂后,負責新Region分配到指定的HRegionServer上
管理HRegionServer間的負載均衡,遷移region分布
當HRegionServer宕機后,負責其上的region的遷移

4 HRegionServer

HBase集群中從的角色,是小弟
作用:
回應客戶端的讀寫資料請求
負責管理一系列的Region
切分在運行程序中變大的region

5 Region

HBase集群中分布式存盤的最小單元
一個Region對應一個Table表的部分資料
HBase使用,主要有兩種形式:①命令;②Java編程

四 HBase安裝

HBASE是一個分布式系統
其中有一個管理角色:HMaster(一般2臺,一臺active,一臺backup)
其他的資料節點角色:HRegionServer(很多臺,看資料量)

1 安裝準備

需要先有一個java環境
首先,要有一個HDFS集群,并正常運行;regionserver應該跟hdfs中的datanode在一起
其次,還需要一個zookeeper集群,并正常運行,然后,安裝HBase
角色分配如下:
Hdp01: namenode datanode regionserver hmaster zookeeper
Hdp02: datanode regionserver zookeeper
Hdp03: datanode regionserver zookeeper

2 安裝步驟

解壓HBase安裝包
修改hbase-env.sh

export JAVA_HOME=/root/apps/jdk1.7.0_67
export HBASE_MANAGES_ZK=false

修改hbase-site.xml

<configuration>

        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hdp01:9000/hbase</value>
        </property>

        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>

        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>hdp01:2181,hdp02:2181,hdp03:2181</value>
        </property>
</configuration>

修改 regionservers

hdp01
hdp02
hdp03

3 啟動HBase集群

cd /kkb/install/hbase-1.2.0-cdh5.14.2
bin/start-hbase.sh

啟動完后,還可以在集群中找任意一臺機器啟動一個備用的master

bin/hbase-daemon.sh start master

新啟的這個master會處于backup狀態

4 停止HBase集群

cd /kkb/install/hbase-1.2.0-cdh5.14.2
bin/stop-hbase.sh

五 HBase shell 命令基本操作

1 進入HBase客戶端命令操作界面

node01執行以下命令,進入HBase的shell客戶端

cd /kkb/install/hbase-1.2.0-cdh5.14.2
bin/hbase shell

圖片: https://uploader.shimo.im/f/odMCMQ6N8HE0xvU4.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjQyMTksImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzOTE5LCJ1c2VySWQiOjIyMjU4ODY4fQ.TRlyXUomOWBJLQKmkJtLBSjhMXR1mEi1mmhBiFCeza8
如果出現下圖所示情況,說明HBase未正常啟動
圖片: https://uploader.shimo.im/f/uGc0nJSw3oxzZe8b.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjQyMTksImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzOTE5LCJ1c2VySWQiOjIyMjU4ODY4fQ.TRlyXUomOWBJLQKmkJtLBSjhMXR1mEi1mmhBiFCeza8
以下為正常啟動頁面,并且有相關行程
圖片: https://uploader.shimo.im/f/AayzrO9JlBd4wvOU.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjQyMTksImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzOTE5LCJ1c2VySWQiOjIyMjU4ODY4fQ.TRlyXUomOWBJLQKmkJtLBSjhMXR1mEi1mmhBiFCeza8
① list查看當前資料庫中有哪些表
圖片: https://uploader.shimo.im/f/7LdvYpZ6lAeDQUTQ.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjQyMTksImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzOTE5LCJ1c2VySWQiOjIyMjU4ODY4fQ.TRlyXUomOWBJLQKmkJtLBSjhMXR1mEi1mmhBiFCeza8

② 查看HBase集群狀態
圖片: https://uploader.shimo.im/f/OjyfrH6b7gpAYGue.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjQyMTksImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzOTE5LCJ1c2VySWQiOjIyMjU4ODY4fQ.TRlyXUomOWBJLQKmkJtLBSjhMXR1mEi1mmhBiFCeza8
③ 查看HBase集群版本
圖片: https://uploader.shimo.im/f/zkIUqTM15YVs7nbi.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjQyMTksImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzOTE5LCJ1c2VySWQiOjIyMjU4ODY4fQ.TRlyXUomOWBJLQKmkJtLBSjhMXR1mEi1mmhBiFCeza8
ps:NameSpace操作

HBase系統默認定義了兩個預設的namespace
hbase:系統內建表,包括namespace和meta表
default:用戶建表時未指定namespace的表都創建在此

創建:create_namespace 'lzc'
洗掉:drop_namespace 'lzc'
查看:describe_namespace 'lzc'
列出所有:list_namespace
在namespace下創建表:create 'lzc:user_info','id','name','age'
查看namespace下的表 :list_namespace_tables  'lzc'

2 HBase表模型特點

圖片: https://uploader.shimo.im/f/y6k8RLVu8jUhKPmM.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjQyMTksImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzOTE5LCJ1c2VySWQiOjIyMjU4ODY4fQ.TRlyXUomOWBJLQKmkJtLBSjhMXR1mEi1mmhBiFCeza8
1.一個表,有表名
2.一個表可以分為多個列族(不同列族的資料會存盤在不同檔案中)
3.表中的每一行有一個“行鍵rowkey”,而且行鍵在表中不能重復
4.表中的每一對kv資料稱作一個cell
5.hbase可以對資料存盤多個歷史版本(歷史版本數量可配置)
6.整張表由于資料量過大,會被橫向切分成若干個region(用rowkey范圍標識),不同region的資料也存盤在不同檔案中
圖片: https://uploader.shimo.im/f/NGRrMtd4Mv8kVQdm.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzA5MjQyMTksImciOiJUZ2NXdGd5VHR2UFhjUlZRIiwiaWF0IjoxNjMwOTIzOTE5LCJ1c2VySWQiOjIyMjU4ODY4fQ.TRlyXUomOWBJLQKmkJtLBSjhMXR1mEi1mmhBiFCeza8
7.hbase會對插入的資料按順序存盤:
要點一:首先會按行鍵排序
要點二:同一行里面的kv會按列族排序,再按k排序

3 HBase資料型別

hbase中只支持byte[]
此處的byte[] 包括了:rowkey,key,value,列族名,表名

4 HBase命令列操作

名稱命令運算式
創建表create ‘表名’, ‘列族名1’,‘列族名2’,‘列族名N’
查看所有表list
描述表describe ‘表名’
判斷表存在exists ‘表名’
判斷是否禁用啟用表is_enabled ‘表名’ is_disabled ‘表名’
添加記錄put ‘表名’, ‘rowKey’, ‘列族 : 列‘ , ‘值’
查看記錄rowkey下的所有資料get ‘表名’ , ‘rowKey’
查看表中的記錄總數count ‘表名’
獲取某個列族get ‘表名’,‘rowkey’,‘列族’
獲取某個列族的某個列get ‘表名’,‘rowkey’,'列族:列’
洗掉記錄delete ‘表名’ ,‘行名’ , ‘列族:列’
洗掉整行deleteall ‘表名’,‘rowkey’
洗掉一張表先要屏蔽該表,才能對該表進行洗掉 第一步 disable ‘表名’ ,第二步 drop ‘表名’
清空表truncate ‘表名’
查看所有記錄scan “表名”
查看某個表某個列中所有資料scan “表名” , {COLUMNS=>‘列族名:列名’}
更新記錄就是重寫一遍,進行覆寫,hbase沒有修改,都是追加

① help 幫助命令
hbase(main):005:0> help
在這里插入圖片描述
查看具體命令的幫助資訊
hbase(main):006:0> help ‘create’

在這里插入圖片描述
② create 創建表
創建user表,包含info、data兩個列族
使用create命令

hbase(main):008:0> create ‘user’, ‘info’, ‘data’
0 row(s) in 1.3080 seconds
或者
=> Hbase::Table - user
hbase(main):009:0> create ‘user’,{NAME => ‘info’, VERSIONS => ‘3’},{NAME => ‘data’}
ERROR: Table already exists: user!
在這里插入圖片描述
③ put 插入資料操作
向表中插入資料
使用put命令

向user表中插入資訊,row key為rk0001,列族info中添加名為name的列,值為zhangsan
HBase(main):011:0> put ‘user’, ‘rk0001’, ‘info:name’, ‘zhangsan’

向user表中插入資訊,row key為rk0001,列族info中添加名為gender的列,值為female
HBase(main):012:0> put ‘user’, ‘rk0001’, ‘info:gender’, ‘female’

向user表中插入資訊,row key為rk0001,列族info中添加名為age的列,值為20
HBase(main):013:0> put ‘user’, ‘rk0001’, ‘info:age’, 20

向user表中插入資訊,row key為rk0001,列族data中添加名為pic的列,值為picture
HBase(main):014:0> put ‘user’, ‘rk0001’, ‘data:pic’, ‘picture’
在這里插入圖片描述
④ 查詢資料操作一
查詢方式一 使用get命令通過rowkey進行查詢
獲取user表中row key為rk0001的所有資訊(即所有cell的資料)
使用get命令
HBase(main):015:0> get ‘user’, ‘rk0001’
在這里插入圖片描述
使用get命令查看rowkey下某個列族的資訊
獲取user表中row key為rk0001,info列族的所有資訊
HBase(main):016:0> get ‘user’, ‘rk0001’, ‘info’
在這里插入圖片描述
使用get命令查看rowkey指定列族指定欄位的值
獲取user表中row key為rk0001,info列族的name、age列的資訊
HBase(main):017:0> get ‘user’, ‘rk0001’, ‘info:name’, ‘info:age’
在這里插入圖片描述
在這里插入圖片描述
使用get命令查看rowkey指定多個列族的資訊
獲取user表中row key為rk0001,info、data列族的資訊
HBase(main):018:0> get ‘user’, ‘rk0001’, ‘info’, ‘data’

或者你也可以這樣寫
HBase(main):019:0> get ‘user’, ‘rk0001’, {COLUMN => [‘info’, ‘data’]}

或者你也可以這樣寫,也行
HBase(main):020:0> get ‘user’, ‘rk0001’, {COLUMN => [‘info:name’, ‘data:pic’]}
在這里插入圖片描述
使用get命令指定rowkey與列值過濾器查詢
獲取user表中row key為rk0001,cell的值為zhangsan的資訊
HBase(main):021:0> get ‘user’, ‘rk0001’, {FILTER => “ValueFilter(=, ‘binary:zhangsan’)”}
在這里插入圖片描述
使用get命令指定rowkey與列名模糊查詢
獲取user表中row key為rk0001,列標示符中含有a的資訊
HBase(main):022:0> get ‘user’, ‘rk0001’, {FILTER => “QualifierFilter(=,‘substring:a’)”}
在這里插入圖片描述
繼續插入一批資料
HBase(main):023:0> put ‘user’, ‘rk0002’, ‘info:name’, ‘fanbingbing’
HBase(main):024:0> put ‘user’, ‘rk0002’, ‘info:gender’, ‘female’
HBase(main):025:0> put ‘user’, ‘rk0002’, ‘info:nationality’, ‘中國’
HBase(main):026:0> get ‘user’, ‘rk0002’, {FILTER => “ValueFilter(=, ‘binary:中國’)”}
在這里插入圖片描述
⑤ 查詢所有行的資料二
查詢user表中的所有資訊
使用scan命令
HBase(main):027:0> scan ‘user’
在這里插入圖片描述
使用scan命令進行列族查詢
查詢user表中列族為info的資訊
在這里插入圖片描述
scan ‘user’, {COLUMNS => ‘info’}
在這里插入圖片描述
//當把某些列的值洗掉后,具體的資料并不會馬上從存盤檔案中洗掉;查詢的時候,不顯示被洗掉的資料;如果想要查詢出來的話,RAW => true
scan ‘user’, {COLUMNS => ‘info’, RAW => true, VERSIONS => 5}
在這里插入圖片描述
scan ‘user’, {COLUMNS => ‘info’, RAW => true, VERSIONS => 3}
在這里插入圖片描述
使用scan命令進行多列族查詢
查詢user表中列族為info和data的資訊
scan ‘user’, {COLUMNS => [‘info’, ‘data’]}
在這里插入圖片描述
使用scan命令指定列族與某個列名查詢
查詢user表中列族為info、列標示符為name的資訊
scan ‘user’, {COLUMNS => ‘info:name’}
在這里插入圖片描述
查詢info:name列、data:pic列的資料
scan ‘user’, {COLUMNS => [‘info:name’, ‘data:pic’]}
在這里插入圖片描述
查詢user表中列族為info、列標示符為name的資訊,并且版本最新的5個
scan ‘user’, {COLUMNS => ‘info:name’, VERSIONS => 5}
在這里插入圖片描述
使用scan命令指定多個列族與條件模糊查詢
查詢user表中列族為info和data且列標示符中含有a字符的資訊
scan ‘user’, {COLUMNS => [‘info’, ‘data’], FILTER => “QualifierFilter(=,‘substring:a’)”}
在這里插入圖片描述
使用scan命令指定rowkey的范圍查詢
查詢user表中列族為info,rk范圍是[rk0001, rk0003)的資料
scan ‘user’, {COLUMNS => ‘info’, STARTROW => ‘rk0001’, ENDROW => ‘rk0003’}
在這里插入圖片描述
使用scan命令指定rowkey模糊查詢
查詢user表中row key以rk字符開頭的資料
在這里插入圖片描述
使用scan命令指定資料版本的范圍查詢
查詢user表中指定范圍的資料(前閉后開)
scan ‘user’, {TIMERANGE => [1392368783980, 1392380169184]}
在這里插入圖片描述
hbase(main):039:0> scan ‘user’, {TIMERANGE => [1615386788707,1615386809222]}
在這里插入圖片描述
⑥ 更新資料操作
1 更新資料值
更新操作同插入操作一模一樣,只不過有資料就更新,沒資料就添加
使用put命令
2 更新版本號
將user表的f1列族版本數改為5
HBase(main):040:0> alter ‘user’, NAME => ‘info’, VERSIONS => 5
在這里插入圖片描述
⑦ 洗掉資料以及洗掉表操作
1 指定rowkey以及列名進行洗掉
洗掉user表row key為rk0001,列標示符為info:name的資料(洗掉一個kv資料)
HBase(main):041:0> delete ‘user’, ‘rk0001’, ‘info:name’
在這里插入圖片描述
洗掉整行資料

hbase(main):024:0> deleteall 't_user_info','001'
0 row(s) in 0.0090 seconds
hbase(main):025:0> get 't_user_info','001'
COLUMN                            CELL                                                                                            
0 row(s) in 0.0110 seconds

2 指定rowkey,列名以及版本號進行洗掉
洗掉user表row key為rk0001,列標示符為info:name,timestamp為1392383705316的資料
hbase(main):042:0> delete ‘user’, ‘rk0001’, ‘info:name’, 1392383705316
在這里插入圖片描述
3 洗掉一個列族
洗掉一個列族:
alter ‘user’, NAME => ‘info’, METHOD => ‘delete’
或 alter ‘user’, ‘delete’ => ‘info’
在這里插入圖片描述
4 清空表資料
HBase(main):045:0> truncate ‘user’
在這里插入圖片描述
5 洗掉表
首先需要先讓該表為disable狀態,使用命令:
HBase(main):049:0> disable ‘user’
然后使用drop命令洗掉這個表
HBase(main):050:0> drop ‘user’
在這里插入圖片描述
(注意:如果直接drop表,會報錯:Drop the named table. Table must first be disabled)
在這里插入圖片描述
⑧ 統計一張表有多少行資料
HBase(main):046:0> count ‘user’
在這里插入圖片描述

六 HBase的高級shell管理命令

1 status

例如:顯示服務器狀態
HBase(main):051:0> status ‘node01’
在這里插入圖片描述

2 whoami

顯示HBase當前用戶,例如:
HBase> whoami
在這里插入圖片描述

3 list

顯示當前所有的表
HBase > list
在這里插入圖片描述

4 count

統計指定表的記錄數,例如:
HBase> count ‘user’
在這里插入圖片描述
為了展示下面功能,然后重新創建user表,并插入資料
創建user表,包含info、data兩個列族
使用create命令

hbase(main):008:0> create 'user', 'info', 'data'
0 row(s) in 1.3080 seconds

向表中插入資料
使用put命令

向user表中插入資訊,row key為rk0001,列族info中添加名為name的列,值為zhangsan

HBase(main):011:0> put 'user', 'rk0001', 'info:name', 'zhangsan'

向user表中插入資訊,row key為rk0001,列族info中添加名為gender的列,值為female

HBase(main):012:0> put 'user', 'rk0001', 'info:gender', 'female'

向user表中插入資訊,row key為rk0001,列族info中添加名為age的列,值為20

HBase(main):013:0> put 'user', 'rk0001', 'info:age', 20

向user表中插入資訊,row key為rk0001,列族data中添加名為pic的列,值為picture

HBase(main):014:0> put 'user', 'rk0001', 'data:pic', 'picture'

在這里插入圖片描述

5 describe

展示表結構資訊
HBase> describe ‘user’
在這里插入圖片描述

6 exists

檢查表是否存在,適用于表量特別多的情況
在這里插入圖片描述

7 is_enabled、is_disabled

檢查表是否啟用或禁用
HBase> is_enabled ‘user’
HBase> is_disabled ‘user’
在這里插入圖片描述

8 alter

該命令可以改變表和列族的模式,例如:
為當前表增加列族:
HBase> alter ‘user’, NAME => ‘CF2’, VERSIONS => 2
在這里插入圖片描述
為當前表洗掉列族:
HBase(main):002:0> alter ‘user’, ‘delete’ => ‘CF2’
在這里插入圖片描述

9 disable/enable

禁用一張表/啟用一張表
HBase> disable ‘user’
HBase> enable ‘user’
在這里插入圖片描述

10 drop

洗掉一張表,記得在洗掉表之前必須先禁用

11 truncate

禁用表-洗掉表-創建表

七 Hive與HBase的集成

Hive提供了與HBase的集成,使得能夠在HBase表上使?HQL陳述句進?查
詢 插?操作以及進?Join和Union等復雜查詢、同時也可以將hive表中的
資料映射到Hbase中,
版本說明:
? hbase版本:hbase-1.2.0-cdh5.14.2
? hive版本:hive-1.1.0-cdh5.14.2
資料模型:
row,addres,age,username
001,guangzhou,20,alex
002,shenzhen,34,jack
003,beijing,23,lili
創建HBase的資料:

create 'stu20210308','info'
put 'stu20210308','001','info:addres','guangzhou'
put 'stu20210308','001','info:age','20'
put 'stu20210308','001','info:username','alex'
put 'stu20210308','002','info:addres','shenzhen'
put 'stu20210308','002','info:age','34'
put 'stu20210308','002','info:username','jack'
put 'stu20210308','003','info:addres','beijing'
put 'stu20210308','003','info:age','23'
put 'stu20210308','003','info:username','lili'

在這里插入圖片描述
在這里插入圖片描述
ps:退出HBASE指令是!quit
創建與HBase集成的Hive的外部表:

CREATE EXTERNAL TABLE stu20210308(
id string,
addres string,
age string,
username string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" =
":key,info:addres,info:age,info:username")
TBLPROPERTIES ("hbase.table.name" = "stu20210308");
hive (test)> CREATE EXTERNAL TABLE stu20210308(
           > id string,
           > addres string,
           > age string,
           > username string)
           > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
           > WITH SERDEPROPERTIES (
           > "hbase.columns.mapping" =
           > ":key,info:addres,info:age,info:username")
           > TBLPROPERTIES ("hbase.table.name" = "stu20210308");
OK
Time taken: 1.933 seconds
hive (test)> select * from stu20210308;
OK
stu20210308.id  stu20210308.addres      stu20210308.age stu20210308.username
001     guangzhou       20      alex
002     shenzhen        34      jack
003     beijing 23      lili
Time taken: 0.09 seconds, Fetched: 3 row(s)

在這里插入圖片描述
ps:具體這里可查看Hive與HBase的集成
Hive表映射HBase實體二
建HBase表
hbase(main):018:0> create ‘user_info’,‘info’
資料插入HBase
info:order_amt
info:order_id
info:user_id
info:user_name
在這里插入圖片描述
建hive映射表

create external table wedw_tmp.t_user_info
(
id        string
,order_id  string
,order_amt string
,user_id   string
,user_name string
)
STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping"=":key,info:order_id,info:order_amt,info:user_id,info:user_name")
tblproperties("hbase.table.name"="user_info");

查詢映射好的hive表
select * from wedw_tmp.t_user_info;
在這里插入圖片描述

八 HBase客戶端API操作

表創建
增加資料
洗掉資料
全表掃描
過濾器
匹配

九 phoenix操作HBase

Phoenix,由saleforce.com 開源的一個專案,后又捐給了Apache,它相當于一個Java 中間件,幫助開發者,像
使用jdbc 訪問關系型資料庫一樣,訪問NoSql 資料庫HBase,
Apache Phoenix 與其他Hadoop 產品完全集成,如Spark,Hive,Pig,Flume 和MapReduce,

1 安裝pheonix

1.1 下載pheonix

http://phoenix.apache.org/download.html
注意:下載Phoenix 的時候,請注意對應的版本,其中4.14 版本可以運行在HBase0.98、1.1、1.2、1.3、1.4 上,
下載時也可以直接使用:

wget http://mirrors.shu.edu.cn/apache/phoenix/apache-phoenix-4.14.0-HBase-1.2/bin/apache-phoenix-4.14.0-HBase-1.2-bin.tar.gz

1.2 解壓pheonix

tar -zxvf apache-phoenix-4.14.0-HBase-1.2-bin.tar.gz

在這里插入圖片描述

1.3 整合phoenix到hbase

查看Phoenix 下的所有的檔案,將phoenix-4.14.0-HBase-1.2-server.jar 拷貝到所有HBase 節點(包括Hmaster以及HregionServer)的lib 目錄下:

重啟HBase:
bin/stop-hbase.sh
bin/start-hbase.sh

1.4 使用phoenix SQL命令列

進入Phoenix 的安裝包,執行:

bin/sqlline.py bigdata1:2181

在這里插入圖片描述

1.4.1 創建表

在Phoenix 終端下創建us_population 表:

>> CREATE TABLE IF NOT EXISTS us_population (
state CHAR(2) NOT NULL,
city VARCHAR NOT NULL,
population BIGINT
CONSTRAINT my_pk PRIMARY KEY (state, city));

使用!tables 查看創建的表:

>> !tables

在這里插入圖片描述

1.4.2 編輯并匯入資料

在Phoenix 目錄下創建一個data 目錄,在data 目錄下創建:
vi us_population.csv

NY,New York,8143197
CA,Los Angeles,3844829
IL,Chicago,2842518
TX,Houston,2016582
PA,Philadelphia,1463281
AZ,Phoenix,1461575
TX,San Antonio,1256509
CA,San Diego,1255540
TX,Dallas,1213825
CA,San Jose,912332

執行bin/psql.py data/us_population.csv 匯入資料,
除了匯入資料外,還可以使用Phoenix 的語法插入資料:upsert into us_population values(‘NY’,‘NewYork’,8143197);

1.4.3 查詢資料

方式一:在data 目錄下創建us_population_queries.sql 檔案:

SELECT state as "State",count(city) as "City Count",sum(population) as "Population Sum"
FROM us_population
GROUP BY state
ORDER BY sum(population) DESC;

執行bin/psql.py data/us_population_queries.sql 檢索資料,
方式二:使用命令列終端

bin/sqlline.py bigdata1:2181
>> select * from us_populcation;

在這里插入圖片描述

2 Squirrel-sql 連接Phoenix

2.1 下載Squirrel-sql

http://www.squirrelsql.org/#installation

2.2 設定Squirrel-sql 連接Phoenix

拷貝Phoenix Client jar【phoenix-4.14.0-HBase-1.2-client.jar】到Squirrel-sql 的lib 目錄;
在這里插入圖片描述
設定Phoenix 連接的Driver 資訊,其中localhost 為zookeeper 所在的主機地址,填寫一個即可,
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

3 Phoenix 映射Hbase 表

進入Hbase 命令列終端bin/hbase shell
創建Hbase 表’phoenix’:

– 創建Hbase 表Phoenix,列族info
create ‘phoenix’,‘info’

– 添加資料
put ‘phoenix’, ‘row001’,‘info:name’,‘phoenix’
put ‘phoenix’, ‘row002’,‘info:name’,‘hbase’

映射HBase 表的方式有兩種,一直是視圖映射,一種是表映射,
兩者的區別就是對HBase 的物理表有沒有影響;
洗掉Phoenix 視圖映射不會對Hbase 的表造成影響;
洗掉Phoenix 表映射會將Hbase 的表也洗掉;
非必要情況下一般創建視圖映射,

3.1 視圖映射

在Phoenix 下創建視圖映射HBase 表:

-- 創建視圖關聯映射Hbase 表
create view "phoenix" (
pk VARCHAR primary key,
"info"."name" VARCHAR
);

查詢創建好的Phoenix 視圖:
在這里插入圖片描述
– 洗掉視圖后,在hbase shell 終端下查看phoenix 依然存在

drop view "phoenix";

3.2 表映射

在Phoenix 下創建表映射HBase 表:
– 創建表關聯映射Hbase 表,4.10 以后Phoenix 優化了列映射,COLUMN_ENCODED_BYTES=0 禁用列映射,

create table "phoenix" (
pk VARCHAR primary key,
"info"."name" VARCHAR
) COLUMN_ENCODED_BYTES = 0;

查詢資料:
在這里插入圖片描述
結語:
本篇文章介紹到此結束,碼字不易,如果本篇文章對您有所幫助,麻煩動動發財的小手,三連點贊,關注,收藏支持下,有需要溝通交流的,可隨時溝通交流,多謝大家支持!!!

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298323.html

標籤:其他

上一篇:5G時代-運營商大資料企業獲客最佳手段

下一篇:一圖全解Kafka在zookeeper中的資料結構

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more