如何查看hbase在hdfs上的存儲路徑
A. hbase怎麼查看配置文件
hbase有本地模式和分布式模式
hbase-site.xml配置
hbase.tmp.dir
本地文件系統tmp目錄,一般配置成local模式的設置一下,但是最好還是需要設置一下,因為很多文件都會默認設置成它下面的
線上配置
<property>
<name>hbase.tmp.dir</name>
<value>/mnt/路徑</value>
</property>
默認值:
${java.io.tmpdir}/hbase-${user.name}
寫到系統的/tmp目錄
hbase.rootdir
HBase集群中所有RegionServer共享目錄,用來持久化HBase的數據,一般設置的是hdfs的文件目錄,如hdfs://master:9000/hbasedata
線上配置
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbasedata</value>
</property>
默認值:
${hbase.tmp.dir}/hbase
hbase.cluster.distributed
集群的模式,分布式還是單機模式,如果設置成false的話,HBase進程和Zookeeper進程在同一個JVM進程。
線上配置為true
默認值:false
hbase.zookeeper.quorum
zookeeper集群的URL配置,多個host中間用逗號分割
線上配置
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave,slave1</value>
</property>
默認值:localhost
hbase.zookeeper.property.dataDir
ZooKeeper的zoo.conf中的配置。 快照的存儲位置
線上配置:/home/hadoop/zookeeperData
默認值:${hbase.tmp.dir}/zookeeper
zookeeper.session.timeout
客戶端與zk連接超時時間
線上配置:1200000(20min)
默認值:180000(3min)
hbase.zookeeper.property.tickTime
Client端與zk發送心跳的時間間隔
線上配置:6000(6s)
默認值:6000
hbase.security.authentication
HBase集群安全認證機制,目前的版本只支持kerberos安全認證。
線上配置:kerberos
默認值:空
hbase.security.authorization
HBase是否開啟安全授權機制
線上配置: true
默認值: false
hbase.regionserver.kerberos.principal
regionserver的kerberos認證的主體名稱(由三部分組成:服務或用戶名稱、實例名稱以及域名)
線上配置:hbase/[email protected]
默認:無
hbase.regionserver.keytab.file
regionserver keytab文件路徑
線上配置:/home/hadoop/etc/conf/hbase.keytab
默認值:無
hbase.master.kerberos.principal
master的kerberos認證的主體名稱(由三部分組成:服務或用戶名稱、實例名稱以及域名)
線上配置:hbase/[email protected]
默認:無
hbase.master.keytab.file
master keytab文件路徑
線上配置:/home/hadoop/etc/conf/hbase.keytab
默認值:無
hbase.regionserver.handler.count
regionserver處理IO請求的線程數
線上配置:50
默認配置:10
hbase.regionserver.global.memstore.upperLimit
RegionServer進程block進行flush觸發條件:該節點上所有region的memstore之和達到upperLimit*heapsize
線上配置:0.45
默認配置:0.4
hbase.regionserver.global.memstore.lowerLimit
RegionServer進程觸發flush的一個條件:該節點上所有region的memstore之和達到lowerLimit*heapsize
線上配置:0.4
默認配置:0.35
hbase.client.write.buffer
客戶端寫buffer,設置autoFlush為false時,當客戶端寫滿buffer才flush
線上配置:8388608(8M)
默認配置:2097152(2M)
hbase.hregion.max.filesize
單個ColumnFamily的region大小,若按照ConstantSizeRegionSplitPolicy策略,超過設置的該值則自動split
線上配置:107374182400(100G)
默認配置:21474836480(20G)
hbase.hregion.memstore.block.multiplier
超過memstore大小的倍數達到該值則block所有寫入請求,自我保護
線上配置:8(內存夠大可以適當調大一些,出現這種情況需要客戶端做調整)
默認配置:2
hbase.hregion.memstore.flush.size
memstore大小,當達到該值則會flush到外存設備
線上配置:104857600(100M)
默認值: 134217728(128M)
hbase.hregion.memstore.mslab.enabled
是否開啟mslab方案,減少因內存碎片導致的Full GC,提高整體性能
線上配置:true
默認配置: true
hbase.regionserver.maxlogs
regionserver的hlog數量
線上配置:128
默認配置:32
hbase.regionserver.hlog.blocksize
hlog大小上限,達到該值則block,進行roll掉
線上配置:536870912(512M)
默認配置:hdfs配置的block大小
hbase.hstore.compaction.min
進入minor compact隊列的storefiles最小個數
線上配置:10
默認配置:3
hbase.hstore.compaction.max
單次minor compact最多的文件個數
線上配置:30
默認配置:10
hbase.hstore.blockingStoreFiles
當某一個region的storefile個數達到該值則block寫入,等待compact
線上配置:100(生產環境可以設置得很大)
默認配置: 7
hbase.hstore.blockingWaitTime
block的等待時間
線上配置:90000(90s)
默認配置:90000(90s)
hbase.hregion.majorcompaction
觸發major compact的周期
線上配置:0(關掉major compact)
默認配置:86400000(1d)
hbase.regionserver.thread.compaction.large
large compact線程池的線程個數
線上配置:5
默認配置:1
hbase.regionserver.thread.compaction.small
small compact線程池的線程個數
線上配置:5
默認配置:1
hbase.regionserver.thread.compaction.throttle
compact(major和minor)請求進入large和small compact線程池的臨界點
線上配置:10737418240(10G)
默認配置:2 * this.minFilesToCompact * this.region.memstoreFlushSize
hbase.hstore.compaction.max.size
minor compact隊列中storefile文件最大size
線上配置:21474836480(20G)
默認配置:Long.MAX_VALUE
hbase.rpc.timeout
RPC請求timeout時間
線上配置:300000(5min)
默認配置:60000(10s)
hbase.regionserver.region.split.policy
split操作默認的策略
線上配置: org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy(採取老的策略,自己控制split)
默認配置: org.apache.hadoop.hbase.regionserver.(在region沒有達到maxFileSize的前提下,如果fileSize達到regionCount * regionCount * flushSize則進行split操作)
hbase.regionserver.regionSplitLimit
單台RegionServer上region數上限
線上配置:150
默認配置:2147483647
hbase-env.sh配置
指定系統運行環境
export JAVA_HOME=/usr/lib/jvm/java-6-sun/ #JDK HOME
export HBASE_HOME=/home/hadoop/cdh4/hbase-0.94.2-cdh4.2.1 # HBase 安裝目錄
export HBASE_LOG_DIR=/mnt/dfs/11/hbase/hbase-logs #日誌輸出路徑
JVM參數調優
export HBASE_OPTS="-verbose:gc -XX:+PrintGCDetails -Xloggc:${HBASE_LOG_DIR}/hbase-gc.log -XX:+PrintGCTimeStamps -XX:+ -XX:+PrintGCApplicationStoppedTime \
-server -Xmx20480m -Xms20480m -Xmn10240m -Xss256k -XX:SurvivorRatio=4 -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15 \
-XX:ParallelGCThreads=16 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection \
-XX:+CMSClassUnloadingEnabled -XX:=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSMaxAbortablePrecleanTime=5000 \
"
B. 如何將hbase中的數據導出到hdfs
1 HBase本身提供的介面
其調用形式為:
1)導入
./hbase org.apache.hadoop.hbase.maprece.Driver import 表名 數據文件位置
其中數據文件位置可為本地文件目錄,也可以分布式文件系統hdfs的路徑。
當其為前者時,直接指定即可,也可以加前綴file:///
而當其偉後者時,必須明確指明hdfs的路徑,例如hdfs://mymaster:9000/path
2)導出
./hbase org.apache.hadoop.hbase.maprece.Driver export 表名 數據文件位置
同上,其中數據文件位置可為本地文件目錄,也可以分布式文件系統hdfs的路徑。
另外,該介面類還提供了一些其它的方法,例如表與表之間的數據拷貝,導入tsv文件等,可回車鍵查看
2 hadoop提供的工具(hadoop tool interface)
使用該工具的話,需要首先配置hadoop-env.sh,否則在執行時會提示缺少jar包或者class文件。
1)配置
切換到hadoop安裝目錄下,
vim hadoop-env.sh,加以下語句
export HADOOP_CLASSPATH="hbasejar包路徑:zookeeper的jar包路徑:hbase的config目錄"
2)使用
導入:
hadoop jar /../hbase/hbase-*.jar import mytest /export/mybakup
導出:
hadoop jar /../hbase/hbase-*.jar import mytest /import/mybackup
直接將數據導出到hdfs目錄中,當不指定file前綴時。
另外:
export,fs的參數為hdfs上的路徑時,該路徑必須不能已經存在,否則會報錯。
import的表必須是hbase中已經創建好的,否則會報錯。
C. hive 怎麼查詢hdfs系統的文件
hive的數據是無法更新的,除非去更改hdfs的原始文件,更改原始文件需要生成一個新的文件,十分費事。同時hive是進行海量數據統計分析,無法實時查詢。 而hbase可以進行數據更新和海量數據的快速查詢,彌補hive的不足,同時hbase的語法簡直蛋疼,無法友好的進行數據的統計分析,但是hive可以。 所以hive和hbase整合後,數據更新,實時查詢已經統計分析都可以。大致就是這么個原因
D. HBase的列式存儲在查詢時如何讀取
hbase的region是按行劃分,而非按列,如果你讀取指定一行的所有列數據,regionServer雖然無法保證你的所有數據都在一個HFile中,但是至少是在一個Region中。但是具體的HFile所在的hdfs的節點那就不是HBase關心的事了,因為HBase的存儲是依賴與hdfs,所以底層存儲讀取的事會由NameNode操心,NameNode會考慮就近原則,而提供最高效的數據讀取策略。
你的數據傳輸是必然,但是HBase不會計算,計算是發生在你將想要的數據獲取到之後再自行進行計算的。你讀取大量數據必然會有大量數據傳輸,HBase只是將提供了一種高效的數據讀取策略,盡量減小數據傳輸量
E. hbase root表和meta表存放在哪兒
如果hbase.zookeeper.property.clientPort不配的話,將會默認一個埠,可能就不是你的zookeeper提供的3351~3353這些有用的埠。選一個埠配置即可。hbase配置在此路徑下新建zookeeper_data和hbase_tmp》hbase-env.shexportJAVA_HOME=/home/hadoop/tools/jdk1.6.0_27/exportHBASE_OPTS="-XX:+UseConcMarkSweepGC"#exportHBASE_MANAGES_ZK=true這里如果我是用自己的zookeeper就把這句話注釋掉》hbase-site.xmlhbase.rootdirhdfs://localhost:8000/hbasehbase.masterlocalhosthbase.zookeeper.quorumlocalhosthbase.zookeeper.property.clientPort3351hbase.zookeeper.property.authProvider.1org.apache.zookeeper.server.auth..zookeeper.property.dataDir/home/hadoop/hbase-0.94.0-security/zookeeper_datahbase.cluster.distributedtruehbase.tmp.dir/home/hadoop/hbase-0.94.0-security/hbase_tmp
F. hbase 如何存儲數據
HBASE中的表示按column family來存儲的
建立一個有3個column family的表
create 't1', {NAME => 'f1', VERSIONS => 1}, {NAME => 'f2', VERSIONS => 1}, {NAME => 'f3', VERSIONS => 1}
定義表的時候只需要指定column family的名字,列名在put的時候動態指定
插入數據
下面插入沒有指定column的名字
put 't1', 'r1', 'f1', 'v1'
put 't1', 'r2', 'f2', 'v2'
put 't1', 'r3', 'f3', 'v3'
下面插入指定column的名字
put 't1', 'r4', 'f1:c1', 'v1'
put 't1', 'r5', 'f2:c2', 'v2'
put 't1', 'r6', 'f3:c3', 'v3'
hbase(main):245:0> scan 't1'
ROW COLUMN+CELL
r1 column=f1:, timestamp=1335407967324, value=v1
r2 column=f2:, timestamp=1335408004559, value=v2
r4 column=f1:c1, timestamp=1335408640777, value=v1
r5 column=f2:c1, timestamp=1335408640822, value=v2
r6 column=f1:c6, timestamp=1335412392258, value=v3
r6 column=f2:c1, timestamp=1335412384739, value=v3
r6 column=f2:c2, timestamp=1335412374797, value=v3
插入多列的數據
put 't1', 'r7', 'f1:c4', 'v9'
put 't1', 'r7', 'f2:c3', 'v9'
put 't1', 'r7', 'f3:c2', 'v9'
手工把memstore寫到Hfile中
flush 't1'
刪除所有CF3的數據
deleteall 't1','r7'
flush 't1'
每次flash都會建一個新的hfile
$ ../bin/hadoop dfs -lsr /hbase/t1
數據時直接存到CF目錄下的,每個CF目錄下有3到4個Hfile
f1
f1/
f1/321c683f48dd91e058179486587e
f1/
f2
f2/
f2/
f2/
f3
f3/
f3/
f3/
f3/
f3都數據雖然都被刪除了,由於沒有合並文件都存在
手工合並hfile
hbase(main):244:0> compact 't1'
0 row(s) in 0.0550 seconds
$ ../bin/hadoop dfs -lsr /hbase/t1
f1
f1/
f2
f2/
/f3
f1和f2下就只有一個hfile,f3下面沒有hfile因為數據都被刪除了
一次只能put一個column
一次只能delete一個column
刪除整行,用deleteall
deleteall 't1', 'r1'
了解更多開源相關,去LUPA社區看看吧。
G. hbase資料庫裡面的數據在hdfs的存儲問題
1、你的key是連續的還是離散的
2、空間減小也可能是短暫的,你插入的數據量大一點觀察一下
3、如果還不行,手動split試試
H. 如何在linux中查看hbase版本
一、這種方式有很多的優點:1. 如果我們一次性入庫hbase巨量數據,處理速度慢不說,還特別佔用Region資源, 一個比較高效便捷的方法就是使用 「Bulk Loading」方法,即HBase提供的HFileOutputFormat類。
2. 它是利用hbase的數據信息按照特定格式存儲在hdfs內這一原理,直接生成這種hdfs內存儲的數據格式文件,然後上傳至合適位置,即完成巨量數據快速入庫的辦法。配合maprece完成,高效便捷,而且不佔用region資源,增添負載。
二、這種方式也有很大的限制:
1. 僅適合初次數據導入,即表內數據為空,或者每次入庫表內都無數據的情況。
2. HBase集群與Hadoop集群為同一集群,即HBase所基於的HDFS為生成HFile的MR的集群.
I. HBase數據到底是怎麼存儲的
每個列簇對應HDFS中的一個單獨文件,hbase不是按行存儲,你想一行有多列族的情況下,就會把數據存在多個文件下,按行存儲的意思,是會把行數據存在一個文件中,所以hbase是按列存儲的。
應該說hbase和傳統關系型資料庫還是有些相似的地方,起碼在hfile中hbase列族下一行的列是相鄰存儲的,這點跟傳統關系型資料庫應該是類似的。