① HBase配置文件詳解(一)
HBase使用與Hadoop相同的配置系統,所有配置文件都位於 conf/ 目錄中,需要保持群集中每個節點的同步。
在對HBase進行配置,即編輯hbase-site.xml文件時,確保語法正確且XML格式良好。我們可以使用 xmllint 檢查XML格式是否正確,默認情況下, xmllint 重新流動並將XML列印到標准輸出。如果檢查格式是否正確,並且只在存在錯誤時才列印輸出,可以使用以下命令:
當在完全分布式環境下運行HBase時,在對HBase配置文件進行修改後,確保將 /conf/ 目錄下的配置文件同步到集群其他節點上,可以使用 rsync 、 scp 或其他安全機制將配置文件復制到其他節點上。(對於大多數配置,伺服器需要重新啟動配置才能生效)
② HBase創建,刪除,清空數據表
HBase shell窗口進入,執行命令hbase shell
語法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
例如:創建表t1,有兩個family name:f1,f2,且版本數前者為3,後者為1
disable表
drop表
③ HBase存儲架構
上圖是HBase的存儲架構圖。
由上圖可以知道,客戶端是通過Zookeeper找到HMaster,然後再與具體的Hregionserver進行溝通讀寫數據的。
具體到物理實現,細節包括以下這些:
首先要清楚HBase在hdfs中的存儲路徑,以及各個目錄的作用。在hbase-site.xml 文件中,配置項 <name> hbase.rootdir</name> 默認 「/hbase」,就是hbase在hdfs中的存儲根路徑。以下是hbase0.96版本的個路徑作用。1.0以後的版本請參考這里: https://blog.bcmeng.com/post/hbase-hdfs.html
1、 /hbase/.archive
HBase 在做 Split或者 compact 操作完成之後,會將 HFile 移到.archive 目錄中,然後將之前的 hfile 刪除掉,該目錄由 HMaster 上的一個定時任務定期去清理。
2、 /hbase/.corrupt
存儲HBase損壞的日誌文件,一般都是為空的。
3、 /hbase/.hbck
HBase 運維過程中偶爾會遇到元數據不一致的情況,這時候會用到提供的 hbck 工具去修復,修復過程中會使用該目錄作為臨時過度緩沖。
4、 /hbase/logs
HBase 是支持 WAL(Write Ahead Log) 的,HBase 會在第一次啟動之初會給每一台 RegionServer 在.log 下創建一個目錄,若客戶端如果開啟WAL 模式,會先將數據寫入一份到.log 下,當 RegionServer crash 或者目錄達到一定大小,會開啟 replay 模式,類似 MySQL 的 binlog。
5、 /hbase/oldlogs
當.logs 文件夾中的 HLog 沒用之後會 move 到.oldlogs 中,HMaster 會定期去清理。
6、 /hbase/.snapshot
hbase若開啟了 snapshot 功能之後,對某一個用戶表建立一個 snapshot 之後,snapshot 都存儲在該目錄下,如對表test 做了一個 名為sp_test 的snapshot,就會在/hbase/.snapshot/目錄下創建一個sp_test 文件夾,snapshot 之後的所有寫入都是記錄在這個 snapshot 之上。
7、 /hbase/.tmp
當對表做創建或者刪除操作的時候,會將表move 到該 tmp 目錄下,然後再去做處理操作。
8、 /hbase/hbase.id
它是一個文件,存儲集群唯一的 cluster id 號,是一個 uuid。
9、 /hbase/hbase.version
同樣也是一個文件,存儲集群的版本號,貌似是加密的,看不到,只能通過web-ui 才能正確顯示出來
10、 -ROOT-
該表是一張的HBase表,只是它存儲的是.META.表的信息。通過HFile文件的解析腳本 hbase org.apache.hadoop.hbase.io.hfile.HFile -e -p -f 可以查看其存儲的內容,如下所示:
以上可以看出,-ROOT-表記錄的.META.表的所在機器是dchbase2,與web界面看到的一致:
11、 .META.
通過以上表能找到.META.表的信息,該表也是一張hbase表,通過以上命令,解析其中一個region:
以上可以看出,adt_app_channel表的數據記錄在dchbase3這台reginserver上,也與界面一致,如果有多個region,則會在表名後面加上rowkey的范圍:
通過以上描述,只要找到-ROOT-表的信息,就能根據rowkey找到對應的數據,那-ROOT-在哪裡找呢?從本文一開始的圖中可以知道,就是在zookeeper中找的。進入zookeeper命令行界面:
可以看出-ROOT-表存儲在 dchbase3 機器中,對應界面如下:
以上就是HBase客戶端根據指定的rowkey從zookeeper開始找到對應的數據的過程。
那在Region下HBase是如何存儲數據的呢?
以下就具體操作一張表,查詢對應的HFile文件,看HBase的數據存儲過程。
在HBase創建一張表 test7,並插入一些數據,如下命令:
查看wal日誌,通過 hbase org.apache.hadoop.hbase.regionserver.wal.HLog --mp -p 命令可以解析HLog文件,內容如下:
查看HFile文件,內容如下:
由此可見,HFile文件就是存儲HBase的KV對,其中Key的各個欄位包含了的信息如下:
由於hbase把cf和column都存儲在HFile中,所以在設計的時候,這兩個欄位應該盡量短,以減少存儲空間。
但刪除一條記錄的時候,HBase會怎麼操作呢?執行以下命令:
刪除了rowkey為200的記錄,查看hdfs,原來的HFile並沒有改變,而是生成了一個新的HFile,內容如下:
所以在HBase中,刪除一條記錄並不是修改HFile裡面的內容,而是寫新的文件,待HBase做合並的時候,把這些文件合並成一個HFile,用時間比較新的文件覆蓋舊的文件。HBase這樣做的根本原因是,HDFS不支持修改文件。
④ hbase資料庫查詢命令有什麼
您好,對於你的遇到的問題,我很高興能為你提供幫助,我之前也遇到過喲,以下是我的個人看法,希望能幫助到你,若有錯誤,還望見諒!。展開全部
select
*
from
a
where
列名
<>0
--<>標示不等於
2.--not
in
select
*
from
a
where
列名
not
in(0)
--這樣是用索
不用。
3.--子
where
select
*
from
a
where
a
not
in
(select
列名from
a
where
a
='1')非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!
⑤ 如何獲取hbase數據查詢 語句
get命令和HTable類的get()方法用於從HBase表中讀取數據。使用 get 命令,可以同時獲取一行數據。它的語法如下:
get 』<table name>』,』row1』
下面的例子說明如何使用get命令。掃描emp表的第一行。
hbase(main):012:0> get 'emp', '1'
COLUMN CELL
personal : city timestamp=1417521848375, value=hyderabad
personal : name timestamp=1417521785385, value=ramu
professional: designation timestamp=1417521885277, value=manager
professional: salary timestamp=1417521903862, value=50000
4 row(s) in 0.0270 seconds
讀取指定列
下面給出的是語法,使用get方法讀取指定列。
hbase>get 'table name', 『rowid』, {COLUMN => 『column family:column name 』}
下面給出的示例,是用於讀取HBase表中的特定列。
hbase(main):015:0> get 'emp', 'row1', {COLUMN=>'personal:name'}
COLUMN CELL
personal:name timestamp=1418035791555, value=raju
⑥ hbase怎麼用
HBase安裝及簡單使用
通過之前的hadoop0.20.2的安裝並調試成功,接下來我們繼續安裝hbase0.90.5。在安裝hbase0.90.5之前,因為hbase0.90.5隻支持jdk1.6,所以,我把之前的jdk1.8卸載,重新安裝了jdk1.6。
第一步:
首先需要下載hbase0.90.5.tar.gz,並解壓到/home/hadoop/的目錄下,同時將目錄修改為hbase0.90.5
第二步:
替換hadoop核心jar包,主要母的是防止hbase和hadoop版本不同出現兼容問題,造成hmaster啟動異常
將hbase0.90.5/lib目錄中的hadoop-core-0.20-append-r1056497.jar包進行備份後刪除,再將/home/hadoop/hadoop下面的hadoop-0.20.2-core.jar賦值到/home/hadoop/hbase0.90.5目錄下即可
第三步:
編輯配置文件
①/home/hadoop/hbase0.90.5/conf/hbase-env.sh
我們對行鍵'1001'中列族info的列名age賦值24(1001:info:age=>24),插入兩次,會將最後一次的值進行合並,其中,用時間戳來區分。從圖片中的時間戳不同可以看出保存的是最後一次put的內容。
⑦ 如何啟動hbase 自帶了一個 zkcli
常用到的HBase啟動腳本有:
1.$HBASE_HOME/bin/start-hbase.sh
啟動整個集群
2.$HBASE_HOME/bin/stop-hbase.sh
停止整個集群
3.$HBASE_HOME/bin/hbase-daemons.sh
啟動或停止,所有的regionserver或zookeeper或backup-master
4.$HBASE_HOME/bin/hbase-daemon.sh
啟動或停止,單個master或regionserver或zookeeper
以start-hbase.sh為起點,可以看看腳本間的一些調用關系
start-hbase.sh的流程如下:
1.運行hbase-config.sh(作用後面解釋)
2.解析參數(0.96版本及以後才可以帶唯一參數autorestart,作用就是重啟)
3.調用hbase-daemon.sh來啟動master;調用hbase-daemons.sh來啟動regionserver zookeeper master-backup
hbase-config.sh的作用:
裝載相關配置,如HBASE_HOME目錄,conf目錄,regionserver機器列表,java_HOME目錄等,它會調用$HBASE_HOME/conf/hbase-env.sh
hbase-env.sh的作用:
主要是配置JVM及其GC參數,還可以配置log目錄及參數,配置是否需要hbase管理ZK,配置進程id目錄等
hbase-daemons.sh的作用:
根據需要啟動的進程,
如為zookeeper,則調用zookeepers.sh
如為regionserver,則調用regionservers.sh
如為master-backup,則調用master-backup.sh
zookeepers.sh的作用:
如果hbase-env.sh中的HBASE_MANAGES_ZK" = "true",那麼通過ZKServerTool這個類解析xml配置文件,獲取ZK節點列表(即hbase.zookeeper.quorum的配置值),然後通過SSH向這些節點發送遠程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop zookeeper
regionservers.sh的作用:
與zookeepers.sh類似,通過${HBASE_CONF_DIR}/regionservers配置文件,獲取regionserver機器列表,然後SSH向這些機器發送遠程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop regionserver
master-backup.sh的作用:
通過${HBASE_CONF_DIR}/backup-masters這個配置文件,獲取backup-masters機器列表(默認配置中,這個配置文件並不存在,所以不會啟動backup-master),然後SSH向這些機器發送遠程命令:
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop master --backup
hbase-daemon.sh的作用:
無論是zookeepers.sh還是regionservers.sh或是master-backup.sh,最終都會調用本地的hbase-daemon.sh,其執行過程如下:
1.運行hbase-config.sh,裝載各種配置(java環境、log配置、進程ID目錄等)
2.如果是start命令?
滾動out輸出文件,滾動gc日誌文件,日誌文件中輸出啟動時間+ulimit -a信息,如
「Mon Nov 26 10:31:42 CST 2012 Starting master on dwxx.yy.taobao」
"..open files (-n) 65536.."
3.調用$HBASE_HOME/bin/hbase start master/regionserver/zookeeper
4.執行wait,等待3中開啟的進程結束
5.執行cleanZNode,將regionserver在zk上登記的節點刪除,這樣做的目的是:在regionserver進程意外退出的情況下,可以免去3分鍾的ZK心跳超時等待,直接由master進行宕機恢復
6.如果是stop命令?
根據進程ID,檢查進程是否存在;調用kill命令,然後等待到進程不存在為止
7.如果是restart命令?
調用stop後,再調用start。。。
$HBASE_HOME/bin/hbase的作用:
最終啟動的實現由這個腳本執行
1.可以通過敲入$HBASE_HOME/bin/hbase查看其usage
DBA TOOLS
shell run the HBase shell
hbck run the hbase 'fsck' tool
hlog write-ahead-log analyzer
hfile store file analyzer
zkcli run the ZooKeeper shell
PROCESS MANAGEMENT
master run an HBase HMaster node
regionserver run an HBase HRegionServer node
zookeeper run a Zookeeper server
rest run an HBase REST server
thrift run the HBase Thrift server
thrift2 run the HBase Thrift2 server
avro run an HBase Avro server
PACKAGE MANAGEMENT
classpath mp hbase CLASSPATH
version print the version
or
CLASSNAME run the class named CLASSNAME
2.bin/hbase shell,這個就是常用的shell工具,運維常用的DDL和DML都會通過此進行,其具體實現(對hbase的調用)是用ruby寫的
3.bin/hbase hbck, 運維常用工具,檢查集群的數據一致性狀態,其執行是直接調用
org.apache.hadoop.hbase.util.HBaseFsck中的main函數
4.bin/hbase hlog, log分析工具,其執行是直接調用
org.apache.hadoop.hbase.regionserver.wal.HLogPrettyPrinter中的main函數
5.bin/hbase hfile, hfile分析工具,其執行是直接調用
org.apache.hadoop.hbase.io.hfile.HFile中的main函數
6.bin/hbase zkcli,查看/管理ZK的shell工具,很實用,經常用,比如你可以通過(get /hbase-tianwu-94/master)其得知當前的active master,可以通過(get /hbase-tianwu-94/root-region-server)得知當前root region所在的server,你也可以在測試中通過(delete /hbase-tianwu-94/rs/dwxx.yy.taobao),模擬regionserver與ZK斷開連接,,,
其執行則是調用了org.apache.zookeeper.ZooKeeperMain的main函數
7.回歸到剛才hbase-daemon.sh對此腳本的調用為:
$HBASE_HOME/bin/hbase start master/regionserver/zookeeper
其執行則直接調用
org.apache.hadoop.hbase.master.HMaster
org.apache.hadoop.hbase.regionserver.HRegionServer
org.apache.hadoop.hbase.zookeeper.HQuorumPeer
的main函數,而這些main函數就是了new一個了Runnable的HMaster/HRegionServer/QuorumPeer,在不停的Running...
8.bin/hbase classpath 列印classpath
9.bin/hbase version 列印hbase版本信息
10.bin/hbase CLASSNAME, 這個很實用,所有實現了main函數的類都可以通過這個腳本來運行,比如前面的hlog hfile hbck工具,實質是對這個介面的一個快捷調用,而其他未提供快捷方式的class我們也可以用這個介面調用,如Region merge 調用:
$HBASE_HOME/bin/hbase/org.apache.hadoop.hbase.util.Merge
⑧ 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沒有修改,都是追加
⑨ 如何用hive查詢hbase中的數據
第一步,啟動hadoop,命令:./start-all.sh
第二步,啟動hive,命令:
./hive --auxpath /home/dream-victor/hive-0.6.0/lib/hive_hbase-handler.jar,/home/dream-victor/hive-0.6.0/lib/hbase-0.20.3.jar,/home/dream-victor/hive-0.6.0/lib/zookeeper-3.2.2.jar -hiveconf hbase.master=127.0.0.1:60000
這里,-hiveconf hbase.master=指向自己在hbase-site.xml中hbase.master的值
第三步,啟動hbase,命令:./start-hbase.sh
第四步,建立關聯表,這里我們要查詢的表在hbase中已經存在所以,使用CREATE EXTERNAL TABLE來建立,如下:
CREATE EXTERNAL TABLE hbase_table_2(key string, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "data:1")
TBLPROPERTIES("hbase.table.name" = "test");
�0�2hbase.columns.mapping指向對應的列族;多列時,data:1,data:2;多列族時,data1:1,data2:1;
�0�2hbase.table.name指向對應的表;
�0�2hbase_table_2(key string, value string),這個是關聯表
我們看一下HBase中要查詢的表的結構,
⑩ hbase命令行方式插入一條數據到某個表中使用什麼命令
命令:disable 'tableName' --disable表。註:修改表結構時,必須要先disable表。
命令:enable 'tableName' --使表可用
命令:drop 'tableName' --刪除表