指导手册06:HBase安装部署
配置环境
1.参考文件:
https://www.cnblogs.com/lzxlfly/p/7221890.html
https://www.cnblogs.com/sixiweb/archive/2013/02/20/2919305.html
2.操作系统:centos
3.四台虚拟机:master :10.0.2.4, slave1:10.0.2.5,slave2:10.0.2.6,slave3:10.0.2.7
4.Hadoop系统己安装完成。
5.Java环境己配置,输入命令,source /etc/profile 使配置生效
分别输入命令,java 、 javac 、 java -version,查看jdk环境变量是否配置成功
Part 1:安装HBase
1. HBase下载
网址:http://hbase.apache.org/downloads.html建议下载稳定版本hbase-1.2.6.1-bin.tar.gz
稳定版下载地址:http://archive.apache.org/dist/hbase/stable/
2.Hbase安装步骤:
(1)安装Hadoop:
tar –zxf /opt/hbase-1.2.6.1-bin.tar.gz -C /opt
[root@master local]mv hbase-1.2.6.1 hbase-1.2.6
(2)在Hadoop配置的基础上,配置环境变量HBASE_HOME、hbase-env.sh
编辑 vim /etc/profile 加入
export HBASE_HOME=/opt/hbase-1.2.6
export PATH=$HBASE_HOME/bin:$PATH
编辑vim /opt/hbase-1.2.6/conf/hbase-env.sh 加入
export JAVA_HOME=/usr/java/jdk1.7.0_80(jdk安装路径)
去掉注释 # export HBASE_MANAGES_ZK=true,使用hbase自带zookeeper。
(3) 配置hbase-site.xml文件
<configuration>
<property>
<name>hbase.rootdir</name> <!-- hbase存放数据目录 -->
<value>hdfs://master:8020/hbase/hbase_db</value>
<!-- 端口要和Hadoop的fs.defaultFS端口一致-->
</property>
<property>
<name>hbase.cluster.distributed</name> <!-- 是否分布式部署 -->
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name> <!-- list of zookooper -->
<value>master,slave1,slave2</value>
</property>
<property><!--zookooper配置、日志等的存储位置 -->
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/hbase/zookeeper</value>
<!—如果目录不存在,需创建并给权限 -->
</property>
</configuration>
(4) 配置regionservers
编辑 vim /opt/hbase-1.2.6/conf/regionservers 去掉默认的localhost,
加入slave1、slave2,slave3保存退出 (因为用name出错,我改用了IP地址)。
然后把在master上配置好的hbase,通过远程复制命令
scp -r /opt/hbase-1.2.6 10.0.2.5/7:/opt/hbase-1.2.6
复制到slave1、slave2、slave3的位置
(5) 各节点关闭防火墙
Service iptables stop
(6) 启动与停止Hbase
(6.1)在Hadoop已经启动成功的基础上,输入start-hbase.sh。
输入jps命令查看进程是否启动成功,若 master上出现HMaster、HQuormPeer,
slave上出现HRegionServer、HQuorumPeer,就是启动成功了。
(6.2)输入hbase shell 命令 进入hbase命令模式
输入status命令可以看到如下内容,1个master,2 servers,3机器全部成功启动。
1 active master, 0 backup masters, 2 servers, 0 dead, 2.0000 average load
如果报slf4j-log4j12-1.7.5冲突错误,请删除/hbase-1.2.6.1/lib目录下的slf4j-log4j12-1.7.5包。原因:该包和hadoop下面的包冲突了。删掉一个即可。
(6.3)修改配置本地hosts。
编辑 etc\hosts文件,加入
127.0.0.1 localhost (需添加)
10.0.2.4 master master.centos.com
10.0.2.5 slave1 slave1.centos.com
10.0.2.6 slave2 slave2.centos.com
10.0.2.7 slave3 slave3.centos.com
在浏览器中输入http://master:16010就可以在界面上看到hbase的配置了
(6.4)当要停止hbase时输入stop-hbase.sh,过几秒后hbase就会被停止了。
注意:如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因。
这里启动关闭Hadoop和HBase的顺序一定是:
启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop
3.调试
(1) /bin/java 没有那个文件或目录 hbase
今天在启动HBase时发现如下错误:/bin/java: No such file or directory6/bin/../bin/hbase: line 412: /usr/local/jdk1.8.0_152/bin/java,而在我的hbase-env.sh中又JAVA_HOME,路径也是正确的,可为什么还会报这个错误呢?后来我才发现是因为我使用的hbase-env.sh文件是我自己创建的,而不是hbase目录中本身存在的那个配置文件,hbase不认可这种自己创建的配置文件因此才报错。
(2)启动hadoop时候报错:localhost: ssh: Could not resolve hostname localhost: Temporary failure in name resolution”
在hosts文件中添加
127.0.0.1 localhost
(3)出错时日志查看:hbase/logs
(4) HBase集群部署,创建表错误(Master is initializing),
http://blog.sina.com.cn/s/blog_af5a109b01018ezy.html
(5) 关于从节点的HRegionServer启动不起来的解决办法
启动时间同步
(6) hbase数据库错误——ERROR: Can't get master address from ZooKeeper; znode data == null
https://blog.csdn.net/u010022051/article/details/44176931
需新建一个zookeeper目录
Part 2: Hbase Shell操作
1. HBase中创建表
HBase中用create命令创建表,具体如下:
create 'student','name','sex','age','dept','course'
命令执行截图如下:
此时,即创建了一个“student”表,属性有:name,sex,age,dept,course。因为HBase的表中会有一个系统默认的属性作为行键,无需自行创建,默认为put命令操作中表名后第一个数据。创建完“student”表后,可通过describe命令查看“student”表的基本信息。命令执行截图如下:
2. HBase数据库基本操作
练习HBase的增、删、改、查操作。在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。
(1)添加数据
HBase中用put命令添加数据,注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。
当运行命令:put ‘student’,’18001’,’name’,’zhangsan’时,即为student表添加了学号为18001,名字为zhangsan的一行数据,其行键为18001。shell命令为:
put 'student','18001','name','zhangsan
命令执行截图如下,即为student表添加了学号为18001,名字为zhangsan的一行数据,其行键为18001。
Shell命令:
put 'student','18001','course:math','80'
即为18001行下的course列族的math列添加了一个数据。截图如下:
继续添加数据:
put 'student','18001','dept','software’
put 'student', '18001','age','18'
put 'student', '18001','sex','male'
(2)查看数据
HBase中有两个用于查看数据的命令:
- get命令,用于查看表的某一行数据;
- scan命令用于查看某个表的全部数据
(2.1). get命令
get 'student','18001'
命令执行截图如下, 返回的是‘student’表‘18001’行的数据。
(2.2) scan命令
scan 'student'
命令执行截图如下, 返回的是‘student’表的全部数据。
(3)删除数据
在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:1. delete用于删除一个数据,是put的反向操作;2. delete all操作用于删除一行数据。
(3.1) delete命令
delete 'student','18001','sex'
命令执行截图如下, 即删除了student表中95001行下的sex列的所有数据。
(3.2) deleteall命令
deleteall 'student','18001'
命令执行截图如下,即删除了student表中的18001行的全部数据。
(4)删除表
删除表有两步,第一步先让该表不可用,第二步删除表。删除表之前,可以使用list命令查看所有表。命令:
list
disable 'student'
drop 'student'
命令执行截图如下:
(5)查询表历史数据
查询表的历史版本,需要两步。
(5.1)在创建表的时候,指定保存的版本数(假设指定为5)
create 'teacher',{NAME=>'username',VERSIONS=>5}
(5.2)插入数据然后更新数据,使其产生历史版本数据,注意:这里插入数据和更新数据都是用put命令
put 'teacher','81001','username','zhangsan'
put 'teacher','81001','username','lisi'
put 'teacher','81001','username','wangwu'
put 'teacher','81001','username','zhaoliu'
put 'teacher','81001','username','xiaoming'
put 'teacher','81001','username','xiaoli'
(5.3) 查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)
get 'teacher','81001',{COLUMN=>'username',VERSIONS=>5}
查询结果截图如下:
(6)退出HBase数据库操作
最后退出数据库操作,输入exit命令即可退出,注意:这里退出HBase数据库是退出对数据库表的操作,而不是停止启动HBase数据库后台运行。
Shell 命令:exit