一.背景:
首先是为了配合开发同学搭建列数据库,Hbase环境作为测试,由于服务器资源有限,只能把所有组件都安装部署在同一台服务器上,同时需要启用zookeeper,所以为伪分布式集群模式。而大数据流行的今天,学习相关组件技术也是很有必要的。为了更好的了解每一个组件,甚至是每一条配置的具体作用和原理,这里我们采用每个不同组件单独部署,而非使用CDH(Cloudera)等集成环境安装包去进行一键式部署。
二.部署相关:
1.安装java环境
下载jdk1.8.0_131并配置好环境变量,linux环境写入/etc/profile,此处不详细介绍。
/etc/profile内容如下,其中自行根据实际jdk目录修改对应的文件路径,修改后用source /etc/profile使环境变量生效:
# Java
export JAVA_HOME=/usr/java/jdk1.8.0_131
export JRE_HOME=/usr/java/jdk1.8.0_131/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
2.安装hadoop
此处我选用的是非源码版本hadoop-2.9.1,软件压缩包文件大小约为340M。
(1)解压后,/etc/profile加入如下环境变量,同样,自行修改文件实际路径,修改后用source /etc/profile使环境变量生效:
# Hadoop
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.9.1
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
(2)然后修改etc/hadoop下的几个配置文件,新增或修改如下配置:
1.hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_131
# 指定ssh端口,顾名思义,不指定则默认为22
export HADOOP_SSH_OPTS="-p 63000"
2.core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://test6:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp/</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
3.hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>need not permissions</description>
</property>
</configuration>
4.mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>test6:9001</value>
</property>
</configuration>
说明:
①hadoop-env.sh脚本中,由于服务器自定义了ssh服务端口,所以需要添加变量HADOOP_SSH_OPTS="-p 63000"指向新端口63000
②core-site.xml中,test6为服务器的主机名hostname,可根据实际修改,由于该环境作测试用,所以hadoop的数据节点datanode和名称节点namenode不使用永久路径存放,而采用临时空间路径存放在/root/hadoop/tmp下,初始化hadoop前注意提前建立好相关目录
③hdfs-site.xml中,因为是伪分布式集群,所以dfs.replication只有一个分片,值为1
④mapred-site.xml,同样test6为主机名请对应自己的服务器主机名修改,注意此处没有启用hadoop的yarn框架
(3)执行bin/hadoop namenode -format 初始化hdfs数据
(4)执行bin/start-all.sh启动hadoop所有组件,接着运行jps命令会看到ResourceManager,SecondaryNameNode,NodeManager,NameNode,DataNode五个进程,并可在浏览器上查看hadoop的状态信息http://test6:50070
3.安装zookeeper
(1)开发同学提出要求用zookeeper接入hbase,且zookeeper集群推选主节点Master等几个角色要求服务器节点为奇数个1,3,5,7....,由于本次搭建的是伪分布式集群模式,所以只部署1台服务器
(2)下载zookeeper-3.4.12,同样不选用源码版,不自行编译,然后解压,进入conf目录并拷贝默认的配置文件模板zoo_sample.cfg,并命名为zoo.cfg,并修改该文件如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/root/zk/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=test6:2888:3888
说明:
①dataDir=/root/zk/data #指定zookeeper的数据存放目录,启动前需要建立好该目录
②server.1=test6:2888:3888 #此处需要按行分开指定所有的zookeeper集群节点,server后的数字 “1” 表示节点的id,范围为1-255,即zookeeper集群最多可以有255个节点,test6依然为节点服务器的主机名hostname,此处由于我们是伪分布式集群模式,只有一个节点,所以只有一行配置
(3)由于上述配置文件定义当前节点服务器的zookeeper的id为1,所以需要在dataDir目录下创建一个内容为id值 “1” ,文件名为myid的文件,表面当前节点的id为1
(4)最后执行bin目录下的zkServer.sh start ,启动zookeeper
4.安装hbase
(1)下载hbase-1.4.7并解压,同样不使用src源码包
(2)添加hbase的环境变量到/etc/profile,同时添加PATH变量便于直接使用各组件相关的工具:
# HBase
export HBASE_HOME=/usr/local/hadoop/hbase-1.4.7
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HBASE_HOME}/bin:$PATH
(3)修改hbase目录conf下的配置文件,更新或新增配置如下:
1.hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_131
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.9.1
export HBASE_HOME=/usr/local/hadoop/hbase-1.4.7
export HBASE_CLASSPATH=/usr/local/hadoop/hadoop-2.9.1/etc/hadoop
export HBASE_MANAGES_ZK=false
2.hbase-site.xml
<configuration>
<!-- 存储目录 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://test6:9000/hbase</value>
<description>The directory shared byregion servers.</description>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>test6</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/root/hbase/tmp</value>
</property>
<!-- false是单机模式,true是分布式模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>test6:60000</value>
</property>
</configuration>
说明:
①hbase-env.sh中的HBASE_CLASSPATH指定hadoop的配置文件目录以便hbase能探测到hadoop,否则hbase在使用hdfs数据源,非单机模式下的时候启动会报异常导致无法启动
②hbase-env.sh中的HBASE_MANAGES_ZK=false指定hbase不使用自带zookeeper而使用独立安装的
③hbase-site.xml中hbase.rootdir项指定hbase使用hadoop的hdfs数据存储,test6为hadoop所在节点服务器的主机名hostname,9000为hdfs的服务监听端口
④hbase-site.xml中hbase.zookeeper.quorum中指定zookeeper所在的节点主机名,当前为伪分布式集群模式,只有test6一个节点,如有多个zookeeper节点可以用逗号分隔开不同的主机名,如hostname1,hostname2,hostname3...
⑤hbase-site.xml中hbase.tmp.dir指定hbase的临时数据存储目录为/root/hbase/tmp,注意启动hbase前需要提前建立好对应目录
⑥hbase-site.xml中hbase.cluster.distributed中指定当前hbase为分布式还是单机模式,由于我们使用外部的zookeeper,所以此处要为分布式true,如为false,则hbase会使用自带的zookeeper,由于前面的步骤我们设置了hbase不启用自带zookeeper,所以会导致冲突出错无法启动hbase
⑦hbase-site.xml中hbase.master指定hbase的master角色所在的主机名hostname和所监听的端口,但实际情况下,在伪分布式集群模式中,启动hbase后发现60000端口没有启动监听,这个问题后续待探究
(4)拷贝zookeeper刚才conf目录下修改的zoo.cfg配置文件到hbase的conf目录下,告诉hbase去读取外部zookeeper的这个配置
(5)执行bin目录下的start-hbase.sh,启动hbase,注意启动前要先确保hadoop已经启动且可以写入数据
参考文章:
https://blog.csdn.net/xuedingkai/article/details/78816862
https://blog.csdn.net/xiaolin93/article/details/54985962