如何查看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列族下一行的列是相邻存储的,这点跟传统关系型数据库应该是类似的。