欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:數據庫 Hbase的簡單學習一

柚子快報激活碼778899分享:數據庫 Hbase的簡單學習一

http://yzkb.51969.com/

一 Hbase的搭建與安裝

1.1 安裝

1.準備好文件,上傳到Linux上

2.解壓文件??tar zxvf hbase-2.2.7-bin.tar.gz -C ../

../是解壓到的路徑

1.2 配置文件

1.配置環(huán)境變量 去etc/profile目錄下

export HBASE_HOME=/usr/local/soft/hbase-2.2.7 export PATH=$PATH:$HBASE_HOME/bin

2.修改hbase-site.xml文件

hbase.zookeeper.quorum

master,node1,node2

hbase.rootdir

hdfs://master:9000/hbase

hbase.cluster.distributed

true

hbase.unsafe.stream.capability.enforce

false

2.修改hbase-env.sh文件

export HBASE_MANAGES_ZK=false export JAVA_HOME=/usr/local/soft/jdk1.8.0_171

3.修改regionservers文件

node1 node2

4.同步一份給子節(jié)點

scp -r hbase-2.2.7 node2:`pwd`

1.3啟動

1.hbase啟動順序: zk-->hadoop-->hbase

2.命令

a、啟動zk 三臺機器都要輸入

zkServer.sh start

b、啟動Hadoop集群

start-all.sh

c、啟動Hbase

start-hbase.sh

1.4 進入客戶端

hbase xhell

1.5 進入網頁端

http://master:16010/

1.6?退出進程的順序

1.先退hbase

stop-hbase.sh

這里注意 關閉這個的時候最好 flush一下 將操作客戶端的表都刷一下,最最好 每次操作一下表就flush ‘表名’ 一下

2. 再退Hadoop集群

stop-all.sh

3 關閉zk

三臺機器都要關閉

zkServer.sh stop

二 Hbase的相關概念

2.1 hbase的概述

1.HBase 是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng),用于存儲海量的結構化或者半結構化,非結構化的數據(底層是字節(jié)數組做存儲的)

2.HBase是Hadoop的生態(tài)系統(tǒng)之一,是建立在Hadoop文件系統(tǒng)(HDFS)之上的分布式、面向列的數據庫,通過利用Hadoop的文件系統(tǒng)提供容錯能力。如果需要進行實時讀寫或者隨機訪問大規(guī)模的數據集的時候,會考慮使用HBase。

2.2 HBase處理數據

1.雖然Hadoop是一個高容錯、高延時的分布式文件系統(tǒng)和高并發(fā)的批處理系統(tǒng),但是它不適用于提供實時計算;

HBase是可以提供實時計算的分布式數據庫,數據被保存在HDFS分布式文件系統(tǒng)上,由HDFS保證期高容錯性;

但是再生產環(huán)境中,HBase是如何基于hadoop提供實時性呢?

HBase上的數據是以StoreFile(HFile)二進制流的形式存儲在HDFS上block塊兒中;

但是HDFS并不知道的HBase用于存儲什么,它只把存儲文件認為是二進制文件,也就是說,HBase的存儲數據對于HDFS文件系統(tǒng)是透明的。

2.3 hbase與hadoop

2.4 數據模型

1.列簇:一個HBase表被分組成許多“列族”的集合,它是基本的訪問控制單元。

2.行:每個表由若干行組成,每個行有一個行鍵作為這一行的唯一標識。訪問表中的行只有三種方式:通過單個行鍵進行查詢、通過一個行鍵的區(qū)間來訪問、全表掃描。

3.列修飾符(列限定符):列族里的數據通過列限定符(或列)來定位

4.單元格:在HBase表中,通過行、列族和列限定符確定一個“單元格”(cell),單元格中存儲的數據沒有數據類型,總被視為字節(jié)數組byte[]

5.時間戳:每個單元格都保存著同一份數據的多個版本,這些版本采用時間戳進行索引

2.5 數據坐標

2.6 區(qū)域

1.HBase自動把表水平劃分為區(qū)域(Region),每個區(qū)域都是有若干連續(xù)行構成的,一個區(qū)域由所屬的表、起始行、終止行(不包括這行)三個要素來表示。

2.一開始,一個表只有一個區(qū)域,但是隨著數據的增加,區(qū)域逐漸變大,等到它超出設定的閾值(128M)大小,就會在某行的邊界上進行拆分,分成兩個大小基本相同的區(qū)域。然后隨著數據的再增加,區(qū)域就不斷的增加,如果超出了單臺服務器的容量,就可以把一些區(qū)域放到其他節(jié)點上去,構成一個集群。也就是說:集群中的每個節(jié)點(Region Server)管理整個表的若干個區(qū)域。所以,我們說:區(qū)域是HBase集群上分布數據的最小單位

三 Hbase的架構

3.1 組件

1.HBase由三種類型的服務器以主從模式構成:

Region Server:負責數據的讀寫服務,用戶通過與Region server交互來實現對數據的訪問。 HBase HMaster:負責Region的分配及數據庫的創(chuàng)建和刪除等操作。 ZooKeeper:負責維護集群的狀態(tài)(某臺服務器是否在線,服務器之間數據的同步操作及master的選舉等)。

HDFS的DataNode負責存儲所有Region Server所管理的數據,即HBase中的所有數據都是以HDFS文件的形式存儲的。出于使Region server所管理的數據更加本地化的考慮,Region server是根據DataNode分布的。HBase的數據在寫入的時候都存儲在本地。但當某一個region被移除或被重新分配的時候,就可能產生數據不在本地的情況。這種情況只有在所謂的compaction之后才能解決。

2.Zookeeper

保證任何時候,集群中只有一個master

存貯所有Region的尋址入口。

實時監(jiān)控Region server的上線和下線信息。并實時通知Master

存儲HBase的schema和table元數據的meta信息

3.Master

為Region server分配region

負責Region server的負載均衡

發(fā)現失效的Region server并重新分配其上的region

管理用戶對table的增刪改操作

4.RegionServer

Region server維護region,處理對這些region的IO請求

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

5.HLog(WAL log):

HLog文件就是一個普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,除了table和 region名字外,同時還包括sequence number和timestamp,timestamp是” 寫入時間”,sequence number的起始值為0,或者是最近一次存入文件系 統(tǒng)sequence number。

HLog SequeceFile的Value是HBase的KeyValue對象,即對應HFile中的 KeyValue

?6.Region

HBase自動把表水平劃分成多個區(qū)域(region),每個region會保存一個表里面某段連續(xù)的數據;每個表一開始只有一個region,隨著數據不斷插 入表,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region(裂變);

當table中的行不斷增多,就會有越來越多的region。這樣一張完整的表被保存在多個Regionserver上。

?7.Memstore 與 storefile

一個region由多個store組成,一個store對應一個CF(列簇) store包括位于內存中的memstore和位于磁盤的storefile寫操作先寫入 memstore,當memstore中的數據達到某個閾值,hregionserver會啟動 flashcache進程寫入storefile,每次寫入形成單獨的一個storefile 當storefile文件的數量增長到一定閾值后,系統(tǒng)會進行合并(minor、 major compaction),在合并過程中會進行版本合并和刪除工作 (majar),形成更大的storefile。 當一個region所有storefile的大小和超過一定閾值后,會把當前的region 分割為兩個,并由hmaster分配到相應的regionserver服務器,實現負載均衡。 客戶端檢索數據,先在memstore找,找不到再找storefile HRegion是HBase中分布式存儲和負載均衡的最小單元。最小單元就表 示不同的HRegion可以分布在不同的HRegion server上。 HRegion由一個或者多個Store組成,每個store保存一個columns family。 每個Strore又由一個memStore和0至多個StoreFile組成。

如圖:StoreFile 以HFile格式保存在HDFS上。

?3.2 理解

  1、flush刷新在HDFS上呈現究竟是怎么刷新的呢??     我們目前剛剛學習的時候,添加數據,都是一條一條的put進去,而我們在put的數據比較少(小于128M)的時候,我們put完去HDFS上并未查看到我們put的文件,這是因為數據還在內存中,也就是還在memStore中,所以要想在HDFS中查看到,我們必須手動刷新到磁盤中,這是將memStore的數據刷新到StoreFile中去,這樣我們在HDFS中就可以查看到了?! ?/p>

  2、為什么Hbase不可以使用像Mysql那樣進行查詢??     首先,我們應該可以感受到,我們在插入的時候,每行數據,有多少列,列名叫什么完全是我們自己定義的,之所以不支持像MySql那樣對列進行查詢和操作,因為不確定列的個數和名稱。

  3、數據最后存在HDFS上的,HDFS不支持刪改,為什么Hbase就可以呢??     這里有個思想誤區(qū),的確,數據是以HFile形式存在HDFS上的,而且HDFS的確是不支持刪改的,但是為什么Hbase就支持呢?首先,這里的刪除并不是真正意義上的對數據進行刪除,而是對數據進行打上標記,我們再去查的時,就不會查到這個打過標記的數據,這個數據Hmaster會每隔1小時清理。修改是put兩次,Hbase會取最新的數據,過期數據也是這個方式被清理。

?四 hbase shell

4.1 help

1.可以通過 help '命名名稱'來查看命令行的具體使用,包括命令的作用和用法。 通過help ‘hbase’ 命名來查看hbase shell 支持的所有命令,hbase將命令進行分組,其中ddl、dml使用較多。

4.2 general 類

4.2.1?顯示集群狀態(tài)status

4.2.2?查詢數據庫版本version

4.2.3 顯示當前用戶與組 whoami

?4.2.4?查看操作表的命令table_help

?4.2.5??退出HBase Shell exit

4.3 DDL

4.3.1. 創(chuàng)建表create

1.創(chuàng)建表時只需要指定列族名稱,不需要指定列名。

2.語法

create '表名', {NAME => '列族名1'}, {NAME => '列族名2'}, {NAME => '列族名3'} # 此種方式是上上面的簡寫方式,使用上面方式可以為列族指定更多的屬性,如VERSIONS、TTL、BLOCKCACHE、CONFIGURATION等屬性 create '表名', '列族名1', '列族名2', '列族名3'

create '表名', {NAME => '列族名1', VERSIONS => 版本號, TTL => 過期時間, BLOCKCACHE => true}

3.示例

create 'tbl_user', 'info', 'detail' create 't1', {NAME => 'cf1', VERSIONS => 2}

4.3.2 修改(添加、刪除)表結構Schema alter

1 添加一個列簇

語法?alter '表名', '列族名'

?2.刪除一個列簇

語法:alter '表名', {NAME=> '列族名', METHOD=> 'delete'}

示例:alter 't1',{NAME => 'cf2', METHOD => 'delete'}

3. 修改列簇屬性

可以修改列族的VERSIONS、IN_MEMORY

alter 't1', NAME => 'f1', VERSIONS => 5

4.3.3 獲取表的描述describe

1.語法

describe '表名'

4.3.4 列舉所有表list

1.查看的是所有命名空間的表

4.3.5 表是否存在exists

語法:exists '表名'

4.3.6 啟用表enable和禁用表disable

1.通過enable和disable來啟用/禁用這個表,相應的可以通過is_enabled和is_disabled來檢查表是否被禁用。

2.語法:

enable '表名' is_enabled '表名'

disable '表名' is_disabled '表名'

4.3.7 啟用 禁用滿足正則表達式的所有表enable_all

1.相關概念

.匹配除“\n”和"\r"之外的任何單個字符 *匹配前面的子表達式任意次

2.語法

# 匹配以t開頭的表名 disable_all 't.*' # 匹配指定命名空間ns下的以t開頭的所有表 disable_all 'ns:t.*' # 匹配ns命名空間下的所有表 disable_all 'ns:.*'

4.3.8刪除表drop

1.需要先禁用表,然后再刪除表,啟用的表是不允許刪除的

2.語法:

disable '表名' drop '表名'

4.3.9 獲取某個表賦值給一個變量 get_table

1.通過 var = get_table ‘表名’ 賦值給一個變量對象,然后對象.來調用,就像面向對象編程一樣,通過對象.方法來調用,這種方式在操作某個表時就不必每次列舉表名了。

4.3.10 獲取rowKey所在的區(qū) locate_region

4.3.11 顯示hbase所支持的所有過濾器show_filters

1.過濾器用于get和scan命令中作為篩選數據的條件,類型關系型數據庫中的where的作用

4.4 namespace

hbase中沒有數據庫的概念 , 可以使用namespace來達到數據庫分類別管理表的作用

4.4.1 列舉命名空間 list_namespace

4.4.2 獲取命名空間描述 describe_namespace

1.語法?describe_namespace '命名空間'

??

4.4.3 查看命名空間下的所有表 list_namespace_tables

4.4.4 創(chuàng)建命名空間create_namespace

4.4.5 刪除命名空間drop_namespace

4.5 DML

4.5.1 插入或者修改數據put

1.語法:

當列族中只有一個列時'列族名:列名'使用'列族名' put '表名', '行鍵', '列族名', '列值' put '表名', '行鍵', '列族名:列名', '列值'

2.他寫入是一行寫入的

?

# 第一行數據

put 'users', 'rk1001', 'info:id', '1'

put 'users', 'rk1001', 'info:name', '張三'

put 'users', 'rk1001', 'info:age', '28'

put 'users', 'rk1001', 'detail:birthday', '1990-06-26'

put 'users', 'rk1001', 'detail:email', 'abc@163.com'

put 'users', 'rk1001', 'detail:create_time', '2019-03-04 14:26:10'

put 'users', 'rk1001', 'address', '上海市'

# 第二行數據

put 'users', 'rk1002', 'info:id', '2'

put 'users', 'rk1002', 'info:name', '李四'

put 'users', 'rk1002', 'info:age', '27'

put 'users', 'rk1002', 'detail:birthday', '1990-06-27'

put 'users', 'rk1002', 'detail:email', 'xxx@gmail.com'

put 'users', 'rk1002', 'detail:create_time', '2019-03-05 14:26:10'

put 'users', 'rk1002', 'address', '北京市'

# 第三行數據

put 'users', 'rk1003', 'info:id', '3'

put 'users', 'rk1003', 'info:name', '王五'

put 'users', 'rk1003', 'info:age', '26'

put 'users', 'rk1003', 'detail:birthday', '1990-06-28'

put 'users', 'rk1003', 'detail:email', 'xyz@qq.com'

put 'users', 'rk1003', 'detail:create_time', '2019-03-06 14:26:10'

put 'users', 'rk1003', 'address', '杭州市'

4.5.2 全表掃描scan

1.語法

scan '表名'

?2.掃描整個列簇

# 語法 scan '表名', {COLUMN=>'列族名'}

# 示例 scan 'users', {COLUMN=>'info'}

3.掃描整個列簇的某個列

# 語法 scan '表名', {COLUMN=>'列族名:列名'}

# 示例 scan 'users', {COLUMN=>'info:age'}

4.限制查幾行

語法

scan '表名',{LIMIT=>1}

意思是查一行

4.5.3 獲取數據get

1.可以獲取某一行,也可以獲取應該單元格

# 語法 get '表名', '行鍵'

# 示例 get 'users', 'xiaoming'

2.建表的時候確定了幾個版本的值,那么獲取的時候頁可以獲取幾個版本的值

例如?create 'test1', {NAME => 'cf1', VERSIONS => 4} 建表語句

get '表名','行名',{COLUMN=>'列簇',VERSIONS=>4}

4.5.4 刪除某個列族中的某個列delete

1.語法 delete '表名', '行鍵', '列族名:列名'

2.刪除的是最新的那一列

4.5.5 刪除某行數據deleteall

1.語法?deleteall '表名', '行鍵'

?

4.5.6 清空整個表的數據truncate

1.語法?truncate '表名'

4.5.7 自增incr

1.語法 incr '表名', '行鍵', '列族:列名', 步長值

2. # 示例? # 注意:incr 可以對不存的行鍵操作,如果行鍵已經存在會報錯,如果使用put修改了incr的值再使用incr也會報錯 # ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it's 2 bytes wide incr 'tbl_user', 'xiaohong', 'info:age', 1

?

4.5.8 計數器get_counter

create 'counters', 'daily', 'weekly', 'monthly' incr 'counters', '20240415', 'daily:hits', 1 get_counter 'counters', '20240415', 'daily:hits'? 獲取計數器的值

4.5.9 修飾詞

1.修飾詞

# 語法 scan '表名', {COLUMNS => [ '列族名1:列名1', '列族名1:列名2', ...]}

# 示例 scan 'tbl_user', {COLUMNS => [ 'info:id', 'info:age']}

2.TIMESTAMP 指定時間戳

scan '表名',{TIMERANGE=>[timestamp1, timestamp2]}

# 示例 scan 'tbl_user',{TIMERANGE=>[1551938004321, 1551938036450]}

區(qū)間是左閉右開的

3.VERSIONS

默認情況下一個列只能存儲一個數據,后面如果修改數據就會將原來的覆蓋掉,可以通過指定VERSIONS時HBase一列能存儲多個值。

create 'tbl_test', 'columnFamily1'

describe 'tbl_test'

# 修改列族版本號

alter 'tbl_test', { NAME=>'columnFamily1', VERSIONS=>3 }

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value2'

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value3'

# 默認返回最新的一條數據

get 'tbl_test','rowKey1','columnFamily1:column1'

# 返回3個

get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>3}

# 返回2個

get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>2}

4、STARTROW

ROWKEY起始行。會先根據這個key定位到region,再向后掃描

?

scan '表名', { STARTROW => '行鍵名'}

# 示例 scan 'users', { STARTROW => 'rk1002'}

5、STOPROW :截止到STOPROW行,STOPROW行之前的數據,不包括STOPROW這行數據

# 語法 scan '表名', { STOPROW => '行鍵名'}

5.ENDROW :截止到ENDROW 行,ENDROW 行之前的數據,不包括ENDROW 這行數據

scan '表名', {ENDROW => '行鍵名'}

?

6、LIMIT 返回的行數

# 語法 scan '表名', { LIMIT => 行數}

# 示例 scan 'tbl_user', { LIMIT => 2 }

4.5.10 FILTER條件過濾器

過濾器之間可以使用AND、OR連接多個過濾器。

1、ValueFilter 值過濾器

# 語法:binary 等于某個值 scan '表名', FILTER=>"ValueFilter(=,'binary:列值')"

scan 'users',FILTER=>"ValueFilter(=,'binary:張三')"

取出張三的所有信息

# 語法 substring:包含某個值 scan '表名', FILTER=>"ValueFilter(=,'substring:列值')"

scan 'users',FILTER=>"ValueFilter(=,'substring:2019')"

取里面包含2019的所有列

?

2、ColumnPrefixFilter 列名前綴過濾器

# 語法 substring:包含某個值 scan '表名', FILTER=>"ColumnPrefixFilter('列名前綴')"

scan 'users', FILTER=>"ColumnPrefixFilter('a')"

取出所有包含a的列的所有信息

?

3、rowKey字典排序

Table中的所有行都是按照row key的字典排序的

柚子快報激活碼778899分享:數據庫 Hbase的簡單學習一

http://yzkb.51969.com/

好文閱讀

評論可見,查看隱藏內容

本文內容根據網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/18798529.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄