Hadoop及HBase集群部署html
1、 集群环境java
虚拟机:内存 16G CPU 双核心node
系统: CentOS-7 64位linux
系统下载地址:web
http://124.202.164.6/files/417500000AB646E7/mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.isoshell
hadoop-2.8.1.tar.gzapache
hbase-1.3.1-bin.tar.gzvim
zookeeper-3.4.10.tar.gzcentos
jdk-8u144-linux-x64.tar.gzsession
物理机:Window Server 2012 R2
虚拟机:VMware Workstation Pro 12
=======Hamster======
I P:192.168.0.10
用户名:hadoop
=======hslave-1======
I P:192.168.0.11
用户名:hadoop
=======hslave-2======
I P:192.168.0.12
用户名:hadoop
一共创建了三台虚拟机
Ip节点名称为:
Master节点
192.168.0.10 hmaster.hcluster
Slave节点
192.168.0.11 hslave-1.hcluster
192.168.0.12 hslave-2.hcluster
三个虚拟机上都必须安装zookeeper
注意:操做说明,命令前面有#号表明root用户登入的
书写时间:2017-10-19
第一次更新时间:2017-10-22
2、 安装基础集群环境
为了配置方便,集群中防火墙已经所有关闭,而且禁止开机启动
因为新版的CentOS-7 默认采用的firewalld防火墙,不是iptables,关闭命令为
systemctl stop firewalld
systemctl mask firewalld
若是想切换成iptables防火墙请以下操做:
安装:yum install iptables-services
设置开机启动 systemctl enable iptables
具体使用请看iptables基础操做
注意:在集群中全部节点上执行相同的操做
编辑/etc/host文件,加入集群节点的IP与Hostname对应关系
192.168.0.10 hmaster hmaster.hcluster
192.168.0.11 hslave-1 hslave-1.hcluster
192.168.0.12 hslave-2 hslave-2.hcluster
注意:在集群中全部节点上执行相同的操做
1) 解压jdk-8u144-linux-x64.tar.gz至/opt目录
/opt
2) 添加Java环境变量到文件/etc/profile的最后
export
JAVA_HOME="/opt/jdk1.8.0_144"
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export
CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH
3) 导入环境变量
4) 验证安装结果
执行java -version验证是否安装成功
结果:
注意:在集群中全部节点上执行相同的操做
在Hadoop集群中, 须要保证各节点的时钟同步
1) 在全部节点安装ntp服务
2) Master节点配置
在Master节点,编辑配置文件/etc/ntp.conf,
添加以下配置,使Master节点的ntp服务接受来自集群网段的时间同步请求
restrict 192.168.1.0 mask 255.255.255.0
nomodify notrap
3) 启动Master节点的ntpd服务,并设置为开机启动
4) Slave节点配置
在Slave节点,编辑配置文件/etc/ntp.conf,
添加以下配置,使之与Master节点的时钟进行同步
server hamster
第一次启动Slave节点上的ntpd前,先手动与Master节点进行时钟同步
5) 启动Slave节点的ntpd服务,并设置为开机启动
注意:Ntpd启动的时候一般须要一段时间大概5分钟进行时间同步,因此在ntpd刚刚启动的时候还不能正常提供时钟服务,报错"no server
suitable for synchronization found"
经过rsync工具,hadoop控制脚本可以将配置文件分发到集群的各个节点中。 默认该功能未启用,能够经过设置hadoop-env.sh中的HADOOP_MASTER变量启动。 启用rsync后,当工做节点的守护进程启动后,会把以HADOOP_MASTER为根的目录树与本地的HADOOP_INSTALL目录同步
rsync
注意:在集群中全部节点上执行相同的操做
前提: 集群各节点使用相同的登陆用户名,且不建议使用root用户,本文中使用用户名hadoop。
在全部节点上建立用户hadoop
New password:
Retype new password:
passwd: all authentication tokens updated
successfully.
1) 在Master节点上生成主机密钥
在Master 第一个机器节点上,切换hadoop用户进行设置
$ ssh-keygen -t rsa -P ‘’
一路回车,最后输入y回车
执行上述命令后,一路回车,会在.ssh下生成私钥id_rsa和公钥id_rsa.pub两个文件
2) 复制Master公钥到被登陆节点的authorized_keys文件中
首先配置Master到Master的无密码登陆
注意:如下步骤必须在hadoop(只要不是root用户就能够)用户下进行建立.ssh文件夹,而后复制authorized_keys文件,在hadoop用户下设置对应的权限
.ssh/authorized_keys
而后配置Master到Slave的无密码登陆,将Master节点id_rsa.pub中的内容复制到Slave节点的${HOME}/.ssh/authorized_keys文件中
3) 首先将公钥文件传到Slave节点
4) 在Slave节点上建立文件.ssh/authorized_keys
.ssh/authorized_keys
5) 依次在全部Slave节点上执行相同的操做,并在Master节点登陆Slave进行验证
6) 若是不能链接
在root用户下打开Terminal
输入命令 cat /etc/passwd
从上图能够看出hadoop用户,缺乏了一个定义,而后用gedit或者vim编辑
gedit /etc/passwd
在1001: 这里添加hadoop 保存便可
这样就能够免密登陆了:
1) 这个配置针对HBase
参照HBase官方文档
由于HBase 会在同一时间打开大量的文件句柄和进程,超过 Linux 的默认限制,致使可能会出现以下错误。
因此编辑/etc/security/limits.conf文件,添加如下两行,提升能打开的句柄数量和进程数量
hadoop - nofile 32768
hadoop - nproc 32000
还须要在/etc/pam.d/common-session 加上这一行:
不然在/etc/security/limits.conf上的配置不会生效。
最后还要注销(logout或者exit)后再登陆,这些配置才能生效
判断是否生效:
登陆hadoop用户以后,在命令行中输入:ulimit -n -u
查看最大文件和进程数量是否改变了。
返回结果以下:就成功了
注意:在集群中全部节点上执行相同的操做
至此, 集群及Hadoop的依赖配置已经完成,下面进行Hadoop的安装。
3、 安装Hadoop
1) 将hadoop软件包上传至集群各节点并解压
本文中将hadoop-2.5.1.tar.gz上传至hadoop用户的主目录/home/hadoop下。
注意:在集群中全部节点上执行相同的操做
2) 设置hadoop文件的权限普通用户
chown -R Hadoop:Hadoop /home/Hadoop/hadoop
3) 配置hadoop各配置文件
hadoop的配置文件位于/home/hadoop/etc/hadoop下
a) 修改jdk路径
b) core-site.xml
用于定义系统级别的参数,如HDFS URL、Hadoop的临时目录以及用于rack-aware集群中的配置文件的配置等
Slave主机修改hmaster为相应的节点名称例如第一台:hslave-1
c) hdfs-site.xml
HDFS的相关设定,如文件副本的个数、块大小及是否使用强制权限等
d) mapred-site.xml.template
HDFS的相关设定,如reduce任务的默认个数、任务所可以使用内存的默认上下限等
Slave主机修改hmaster为相应的节点名称例如第一台:hslave-1
e) yarn-site.xml
Slave主机修改hmaster为相应的节点ip地址例如第一台:192.168.0.11
f) slaves
Hadoop集群的slave主机列表,master启动时会经过SSH链接至此列表中的全部主机并为其启动DataNode和NodeManager
文件在:hadoop/etc/hadoop/slaves
hslave-1
hslave-2
Master 主机特有的配置
g) 若是这个文件不存在就新建一个文件名字为masters,里面写入hmaster这个主机节点
Master 主机特有的配置
4) 配置环境变量
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH :$HADOOP_HOME/bin
5) 格式化HDFS存储
进入hadoop下的bin目录(只在主机上操做)
namenode -format
在格式化过程当中注意输出结果,成功后会有相似下面的输出:
出现上图就是成功了
6) 启动Hadoop服务
启动和中止脚本位于hadoop下sbin目录
a) 启动HDFS
b) 启动Yarn
c) 启动MapReduce JobHistory Server
historyserver
d) 启动全部一句话就能够
sbin/start-all.sh
e) 验证服务是否正常运行 查看Master节点上服务:
新打开一个Terminal,而后输入jps查看结果
节点机输入jps
7) 中止Hadoop服务
a) 中止HDFS
b) 中止Yarn
c) 中止MapReduce JobHistory Server
historyserver
d) 中止全部一句话就能够
sbin/stop-all.sh
端口为50070
4、 安装ZooKeeper
注意:zookeeper安装在全部节点
a) 在全部节点上解压zookeeper
b) zookeeper配置文件zoo.cfg位于zookeeper下的conf目录下,默认不存在,可根据zoo_sample.cfg生成
c) zoo.cfg配置后内容以下:
tickTime=2000
initLimit=10
acknowledgement
syncLimit=5
stored.
just
dataDir=/home/hadoop/zookeeper/data
connect
clientPort=2181
clients
of the
autopurge.
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
dataDir
purge feature
server.1=0.0.0.0:2888:3888
server.2=192.168.0.11:2888:3888
server.3=192.168.0.12:2888:3888
将zoo.cfg同步到zookeeper全部节点
d) 建立zookeeper数据目录,并创建节点标识文件myid
在hmaster节点建立标识为1的文件myid
/home/hadoop/zookeeperdata/data/myid
同理,与zoo.cfg中配置相对应,在hslave-1和hslave-2节点上分别建立标识为2和3的标识文件。
e) hslave-1
/home/hadoop/zookeeperdata/data/myid
f) hslave-2
/home/hadoop/zookeeperdata/data/myid
zookeeper启动脚本位于zookeeper下的bin目录下
启动ZooKeeper
在ZooKeeper集群的每一个结点上,执行启动ZooKeeper服务的脚本,以下所示:
每个节点机都得须要执行下面命令
zookeeper的日志zookeeper.out默认位于zookeeper主目录下,可经过修改${zkhome}/bin/zkEnv.sh中的ZOO_LOG_DIR变量来改变日志路径。
a) 安装完成以后,新打开一个Terminal,输入jps进行查看,是否有QuorumPeerMain线程存在,如下图片是没有此线程,
b) 而后在刚才bin目录下输入指令:cat zookpeer.out
若是返回结果为:
c) 而后结果是java的环境变量可能没有起做用
输入命令 source /etc/profile
d) 防火墙问题,须要关闭防火墙
systemctl disable firewalld
service iptables stop
e) 看到下图红色框内进程有了就表明成功了
f) 输入命令查看状态是否启动成功
./zkServer.sh status
很是大的注意:
若是遇到第一个启动以后,可是输入:# ./zkServer.sh status
出现
表明其余节点上的尚未启动,要接着去启动其余节点机上的zookeeper,
启动以后在输入查看
就正常了
5、 HBase安装
HBase集群架构分为1个HMaster(hmaster)和2个HRegionServer(hslave-1,
hslave-2)。
如下称hbase主目录为${HBASE_HOME}。
hbase配置文件位于${HBASE_HOME}/conf目录下。
1) hbase-env.sh
主要改两个配置:
export JAVA_HOME=/opt/jdk1.8.0_79
export HBASE_MANAGES_ZK=false
2) hbase-site.xml
这里要特别注意的是hbase.rootdir里面的HDFS地址是要跟Hadoop 的core-site.xml里面的fs.defaultFS 的HDFS的IP地址或者域名、端口必须一致。其次是hbase.zookeeper.property.dataDir,其中a01513是个人操做系统用户名,根据你本身的状况改吧,或者放到其余目录也是能够的。hbase.cluster.distributed 是启用分布式模式,这里必须为true哦。hbase.zookeeper.quorum是配置集群IP地址集或者域名集,逗号分隔。hbase.master配置HBase的主节点端口,web端口是60010,经过web UI你能够确认你是否访问成功了。
3) 配置regionservers主机列表
hslave-1
hslave-2
4) 节点机列表都为
hslave-1
hslave-2
注意:将上述配置同步到集群中全部节点。
HBase脚本位于${HBASE_HOME}/bin目录下。
出错地方
注释的代码
这个错误是时间没有同步
注意:每个节点机都配置
主机节点
节点机一、节点机2
注意:若是节点机HRegionServer进程,时间同步出现了问题,能够把时间同步加大
能够进入hbase shell,使用命令查看hbase状态
查询出表
出现下图就表示真正成功了
端口为16010
6、 总结
至此:彻底分布式Hadoop+Zookeeper+HBase集群测试环境基本圆满完成,若有问题继续研究,经过这3天的时间研究获得了不少的知识。