HBase搭建
HBase是大数据领域主流的开源数据库,应用较多。本报告从实际应用角度出发,主要阐述HBase分布式搭建的方法步骤和相关接口的开发情况。
- 分布式HBase
在实际使用环境中,HBase通常分布式搭建于多台主机之上。在真正搭建HBase之前,需要先在多个服务器主机间建立好分布式文件管理系统(HDFS),作为HBase的安装环境。此外,为了协调好HBase在各个主机间的任务分配,需要安装配置Zookeeper。总之,安装配置好HDFS和Zookeeper是正确搭建HBase的前提。在本研究中,创建了三台虚拟机作为服务器,实现HBase的分布式部署,虚拟机的系统均为CentOS 6.9。
1.1. 准备工作
1.1.1. 安装包的兼容性
在部署分布式HBase的过程中,需要用到JDK,Hadoop(HDFS),ZooKeeper和HBase四个安装包。需要强调的是HBase与JDK和Hadoop之间存在较多的兼容性要求,如果版本选择不合适,将出现进程无法启动或崩溃等现象。具体的版本搭配参考官网说明:http://hbase.apache.org/book.html#basic.prerequisites
本研究中采用的安装包版本分别为:
1.1.2. 集群的IP配置
将三台虚拟机的IP均设为静态IP。在设定好主机名后,分别编辑三台主机上的文件/etc/hosts,配置共同的IP和主机名的对应关系,如:
1.1.3. 文件权限管理
可以在三台主机上创建相同的用户组和用户,便于管理操作权限。本研究创建了Hadoop组中的Hadoop用户。利用chown命令将各个安装包的owner改为hadoop。
1.1.4. 配置SSH
在主节点master上生成秘钥,再将秘钥信息复制保存到两个从节点的~/.ssh目录中。配置SSH的目的是使主节点能够免密登录到两个从节点上完成操作。
1.1.5. 安装JDK
为了方便演示,将所有的安装包安装在/hadoop/目录下。在安装完JDK后,需要为用户hadoop设置java环境变量。具体步骤如图:
1.1.6. 同步
将安装好的JDK同步到其他两个节点的/hadoop路径中,同步命令为:
rsync -avz /hadoop/jdk1.8.0_211-amd64 slave1:/hadoop/
等JDK同步完成后,同样要设置相应节点上的.bash_profile环境变量。后续其他软件在主节点安装后,都需要用同样的方法同步到两个从节点上。
1.2. HDFS的搭建
1.2.1. 解压安装
官网下载的安装包为bin类型的压缩包hadoop-2.8.5.tar.gz。分别采用gunzip和tar命令将压缩包解压到/hadoop/路径中。
1.2.2. 配置java环境变量
在/hadoop/hadoop-2.8.5/etc/hadoop路径下找到hadoop-env.sh文件,编辑成:
1.2.3. 配置hadoop运行参数
1.2.3.1. /hadoop-2.8.5/etc/hadoop/core-site.xml
1.2.3.2. /hadoop-2.8.5/etc/hadoop/hdfs-site.xml
图中的namenodedata和data为自行创建的文件夹用来存放相应数据。图中的2表示允许HDFS在两个从节点上备份。最后的参数设置为true,用来开启HDFS的web接口。
1.2.3.3. /hadoop-2.8.5/etc/hadoop/slaves
输入两个从节点的节点名,以实现分布式部署。
1.2.4. 同步
利用rsync命令,将安装配置好的/hadoop/hadoop-2.8.5/文件夹整体分发到两个从节点的/hadoop/路径下。
1.2.5. 格式化HDFS的namenode
在主节点的/hadoop/hadoop-2.8.5路径下,执行命令bin/hdfs namenode -format 。
1.2.6. 检查安装结果
在主节点的/hadoop/hadoop-2.8.5路径下执行命令sbin/start-dfs.sh。然后分别在三个主机上执行jps命令,如果有如下进程,证明HDFS安装配置成功。
1.3. Zookeeper的配置
1.3.1. 解压安装
同样采用解压安装的方式,安装后的路径为/hadoop/zookeeper-3.4.14 。
1.3.2. 配置参数
1.3.2.1. 设置data路径
将/hadoop/zookeeper-3.4.14/conf路径下的zoo_sample.cfg复制到同路径下,并且名称改为zoo.cfg。然后编辑zoo.cfg,需要修改的参数如图:
图中的dataDir修改为自己创建的zkdata文件夹路径,最后added的内容配置了分布式部署下三台主机的信息。
1.3.2.2. myid
在dataDir=/hadoop/zookeeper-3.4.14/zkdata路径下创建myid文件用于设定本机在zookeeper集群中的IP。主机master的myid应当设置为0,与zoo.cfg中最后设置的server.0保持一致。注意:各个主机的myid一定要与zoo.cfg最后配置的信息保持一致,否则zookeeper无法正常工作。
1.3.3. 同步
同样使用rsync 命令将主机master上的/hadoop/zookeeper-3.4.14/同步到两个从节点上,并将myid内容分别改成1和2。
1.3.4. 验证安装
cd到/hadoop/zookeeper-3.4.14/路径下,在三个节点上分别执行命令bin/zkServer.sh start。待三节点都启动完成后,执行命令bin/zkServer.sh status,如果看到如下状态,则表示安装运行成功。
1.4. HBase的搭建
1.4.1. 解压安装
同样采用解压安装的方式,安装后的路径为/hadoop/hbase-2.0.5 。
1.4.2. 参数配置
1.4.2.1. hbase-env.sh
cd到/hadoop/hbase-2.0.5/conf路径下,编辑hbase-env.sh。需要编辑的内容为:
其中java路径设置为实际安装路径。将HBASE_MANAGES_ZK设置为false是为了防止HBase内置的zookeeper启动,造成冲突,导致HBase崩溃。
1.4.2.2. hbase-site.xml
进一步编辑/hadoop/hbase-2.0.5/conf/hbase-site.xml,添加4个属性,如图所示:
第一个属性设置hbase的根路径,设置到HDFS之上。第二个属性为hbase配置zookeeper。第三个属性设置hbase为分布式部署。第四个属性设置zookeeper运行过程中的数据保存路径。
1.4.2.3. regionservers
编辑/hadoop/hbase-2.0.5/conf/regionservers,将两个从节点的主机名添加进去。当hbase启动后,两个从节点上将运行regionserver进程。
1.4.3. 同步
用rsync命令,将主节点上的/hadoop/hbase-2.0.5/整体同步到两个从节点上。
1.4.4. 启动
在启动HBase之前需要先启动HDFS和zookeeper。其中HDFS只需在主节点上执行命令sbin/start-dfs.sh,相关进程自动分布式部署到各个节点上。Zookeeper需要在三个节点上分别执行命令bin/zkServer.sh start来启动。
cd到主节点的/hadoop/hbase-2.0.5/路径下,执行命令bin/start-hbase.sh,相关进程自动分布式部署到各个节点上。启动后,可用jps命令来查看各个节点上的进程,应该包括如下进程:
1.4.5. Shell验证
可以执行命令bin/hbase shell来操作hbase。具体的shell指令参考官网:
http://hbase.apache.org/book.html#quickstart
1.4.6. 特别注意
需要通过service iptables stop命令来关闭各个节点的防火墙,确保HBase正常运行以及可以通过Web UI访问HBase和HDFS。
1.5. 主要参考资料
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html
http://hbase.apache.org/book.html#getting_started
http://www.jikexueyuan.com/course/1802.html
- 接口开发
本研究重点研究了如何通过C++来实现HBase和HDFS的接口调用。HBase提供了REST和thrift通用接口。HDFS提供了C API和REST API。本研究针对REST API进行了初步开发,采用了第三方的libcurl库来实现http通信,同时适用于HBase和HDFS的接口调用。
2.1. 配置libcurl
将官网下载的libcurl.zip解压,将压缩包内的bin/路径下.dll文件和include/curl/路径中的.h文件都复制到demo工程路径下。将压缩包内的lib/路径下的libcurl.lib文件也复制到demo工程路径下,并且添加到链接器的依赖项中,如图:
2.2. HTTP指令
http中的基本操作主要包括GET,POST,PUT等指令,在类CREST_API中实现了这些指令功能,具体参考demo程序。
2.3 用法举例
要想通过REST和HBase进行交互,需要先开启HBase的rest服务进程。cd到/hadoop/hbase-2.0.5/路径后,执行命令:bin/hbase rest start。此时,服务器默认开启了8080端口来进行通信。也可自己指定端口号,具体方法见官网文档:
http://hbase.apache.org/book.html#_rest
在rest服务开启后,可以参照官方文档中的接口描述,来组织代码。比如:
要查询正在运行的HBase版本,可以在linux直接上执行curl命令,也可以在demo程序中作如下配置:
运行demo,可得结果如下,显示HBase版本为2.0.5。
总之,先参考官方文档中对于REST API的描述,再在demo程序中修改配置相应参数值,就可实现接口调用。
HBase官方接口文档:
http://hbase.apache.org/book.html#_rest
HDFS官方接口文档:
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
Libcurl库中函数的用法: