2019独角兽企业重金招聘Python工程师标准>>>
HBase简介
基于Hadoop的NoSql数据库,适合存储半结构化、非结构化的稀疏数据,提供增删改查能力。因为其底层是hdfs,所以具有存储海量数据,高容错,高可用等特点,可以达到关系型数据库(市面上分布式关系型数据库除外)无法企及的上亿记录毫秒级查询能力。
具备行级别的事务能力。
利用hdfs存储数据,mr处理数据,zk作为协调工具
安装与配置
单机模式
解压:
tar -zxvf xxxxx.tar.gz
修改conf/hbase-site.xml
配置hbase使用的数据文件的位置,默认在/tmp/hbase-[username],此目录是linux的临时目录,可能会被系统清空,所以最好修改一下
<property> <name>hbase.rootdir</name> <value>file:///<path>/hbase</value></property>
这种模式几乎不采用,建议学习使用伪分布模式
伪分布模式
解压:
tar -zxvf xxxxx.tar.gz
修改conf/hbase-env.sh
找到JAVA_HOME,将java的安装目录配置进去
修改hbase-site.xml
<property><name>hbase.rootdir</name><value>hdfs://hadoop00:9000/hbase</value></property><property><name>dfs.replication</name><value>1</value></property>
hbase.rootdir:hbase文件存放的目录,hadoop00是hostname(该值需先在/etc/hosts中配置)
dfs.replication:文件备份数,此配置需与hdfs中保持一致
启动:
进入到hbase的安装目录\bin
./start-hbase.sh
进入hbase操作界面:
./hbase shell
完全分布模式
解压:
tar -zxvf xxxxx.tar.gz
修改conf/hbase-env.sh
找到JAVA_HOME,将java的安装目录配置进去
export JAVA_HOME=/home/jionsvolk/proc/jdk1.8.0_65 #如果设置为TRUE会管理配置的ZK集群,这样会导致ZK集群管理的其他分布式组件失效,所以设置为FALSE export HBASE_MANAGES_ZK false
修改conf/hbase-site.xml
<property><name>hbase.rootdir</name><value>hdfs://hadoop00:9000/hbase</value></property><!-- 副本数一定要和使用的HDFS副本数配置一致,否则可能导致一些不可预料的问题 --><property><name>dfs.replication</name><value>1</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value></property>
修改conf/regionservers文件
此文件中配置所有的regionserver的列表
hadoop01 hadoop02 hadoop03
启动集群:
在启动hbase之前,先要启动zookeeper集群和hadoop集群(或者hadoop的伪分布式模式)
./zkServer.sh ##在zk每个机器上启动zk
./start-all.sh ##在hadoop每个机器上启动hadoop伪分布式模式
./start-hbase.sh ##启动hbase集群,该命令会启动其他机器上的所有regionserver和某一台机器上的HMaster。
可以使用jps查看启动的进程,三台主机中只有一台有HMaster进程
如果要设置HMaster的高可用,需要启动它的备用节点,需在非HMaster机器上的执行
./hbase-daemon.sh start master
关闭集群 stop-hbase.sh
基本操作
#帮助hbase>help#创建表,指定表名、列族,列不属于表的元数据,在添加数据的时候指定即可#test--表名;'colfam1','colfam2'--两个列族hbase>create 'test','colfam1','colfam2'#查看table列表hbase>list#查看表结构hbase>describe 'test'#插入数据#myrow-1 是行键;#q1 q2 q3就是列名;#value-1 value-2 value-3就是列对应的值hbase>put 'test','myrow-1','colfam1:q1','value-1'hbase>put 'test','myrow-2','colfam1:q2','value-2'hbase>put 'test','myrow-2','colfam1:q3','value-3'#查看表的数据hbase>scan 'test'#更新test表myrow-2行的colfam1:q3列对应的数据put 'test','myrow-2','colfam1:q3','value-33'#再次查看表的数据hbase>scan 'test'#根据行键查询数据,与scan的区别是可以查看列的所有版本数据hbase>get 'test','myrow-2'#删除列数据hbase>delete 'test','myrow-2','colfam1:q2'#查看表的数据hbase>scan 'test'#删除表全量数据hbase>truncate 'test'#使表失效hbase>disable 'test'#删除表、会将表结构一起删除hbase>drop 'test'#建表时可以指定VERSIONS,配置的是当前列族在持久化到文件系统中时,要保留几个最新的版本数据,这并不影响内存中的历史数据版本hbase>create 'test',{NAME=>'colfam1',VERSIONS=>3},{NAME=>'colfam2',VERSIONS=>1}hbase>put 'test','myrow-1','colfam1:q1','value-1'#直接使用scan而不加RAW=>true只能查询到最新版本的数据hbase>scan 'test'hbase>put 'test','myrow-1','colfam1:q1','value-2'hbase>scan 'test'hbase>put 'test','myrow-1','colfam1:q1','value-3'hbase>scan 'test'#可以在查询时加上RAW=>true来开启对历史版本数据的查询,VERSIONS=>3指定查询最新的几个版本的数据hbase>scan 'test',{RAW=>true,VERSIONS=>3}hbase>put 'test','myrow-1','colfam1:q1','value-4'hbase>scan 'test'hbase>scan 'test',{RAW=>true,VERSIONS=>3}hbase>put 'test','myrow-1','colfam2:x1','value-1'hbase>scan 'test'hbase>put 'test','myrow-1','colfam2:x1','value-2'hbase>scan 'test'hbase>scan 'test',{RAW=>true,VERSIONS=>3}