基本需求:搭建三台hadoop集群
扩展需求:datanode磁盘扩容和增加服务器扩容。
环境:CentOS6.8、hadoop-2.6.4、zookeeper-3.4.14
压缩包在结尾
文章目录
Centos6.8安装
- 三台虚拟机通用配置:
处理器数量、内核数量:1
内存:2G
网络:仅主机
LSI Logic 推荐
SCSI 推荐
创建新虚拟磁盘
磁盘大小:20G
将磁盘拆分为多个文件
自定义硬盘分区:/boot 200M
swap 2000
/ 剩余全部
配置参考网址:特别鸣谢DanielMaster同学的文章
- 三台虚拟机名称依次为:vm1、vm2、vm3
三台虚拟机用户密码:
root用户密码是一样的:root123
三台各有三个普通用户:hadoop
密码一样:hadoop - IP
vm1:192.168.76.135
vm2:192.168.76.129
vm3:192.168.76.130
IP相关:
vi /etc/sysconfig/network-scripts/ifcfg-eht0;
将onboot改为yes
将BOOTPROTO改为static
添加:
IPADDR=192.168.76.132
GATEWAY=192.168.76.1
DNS1=192.168.1.1
NETMASK=255.255.255.0
保存退出
重启服务:service network restart
安装java
tar -zxvf jdk-8u131-linux-x64.tar.gz
cd jdk1.8.0_131
pwd # 复制路径
vim /etc/profile
profile文件是系统环境变量的配置文件
在该文件的最后一行添加内容:
export JAVA_HOME=[path]
export PATH=$JAVA_HOME/bin:$PATH
保存退出
source /etc/profile
使环境变量生效
查看是否成功:
java -version
问题
jps报: command not found
jps与jdk有关,所以需要先安装jdk
Zookeeper安装
root用户下安装,非root用户运行:
- 解压Zookeeper的安装包
tar -xvf zookeeper-3.4.14.tar.gz - 进入安装目录的conf目录下:
cd zookeeper-3.4.14/conf - 复制:
cp zoo_sample.cfg zoo.cfg - 编辑zoo.cfg
vim zoo.cfg
修改
dataDir=/home/software/zookeeper-3.4.14/tmp
添加:(原有内容不用删除)
server.1=192.168.76.135:2888:3888
server.2=192.168.76.129:2888:3888
server.3=192.168.76.130:2888:3888
保存退出 - 创建dataDir指定的路径
cd …
mkdir tmp - 进入这个目录
cd tmp - 编辑文件myid
vim myid
添加当前节点的编号,对应的server. 之后的那个数字
保存退出 - 回到software目录下,远程拷贝给另外两个节点
scp -r zookeeper-3.4.14 root@192.168.76.129:/home/software/
scp -r zookeeper-3.4.14 root@192.168.76.130:/home/software/
密码:root123;
- 复制完成之后,需要修改myid(/zookeeper-3.4.14/tmp目录下)
- 赋予hadoop用户启动权限(三个节点都需要执行,如果使用root用户运行,可跳过)
chown -R hadoop:hadoop /home/software/zookeeper-3.4.14
- 切换到hadoop用户
su hadoop - 三个节点都进入bin目录启动Zookeeper
cd zookeeper-3.4.14/bin
sh zkServer.sh start
启动完成之后等待半分钟到一分钟,然后查看三个节点的状态
sh zkServer.sh status
如果配置成功,那么三个节点中应该出现1个leader以及2个follower
如果出错,则查看zookeeper.out文件(bin目录下)
Zookeeper的问题:
- sh zkServer.sh status 报错
Error contacting Service.It is probably not running.
查看zookeeper.out文件(文件位置:zookeeper的bin目录下)
发现报:
java.net.NoRouteToHostException: No route to host
往上翻有提示 binding to port 0.0.0.0/0.0.0.0:2181、cannot…ip…等
解决:
防火墙未关闭,关闭防火墙即可
进入三台家目录 cd ~
依次关闭防火墙
service iptables stop 关闭防火墙
chkconfig iptables off 永久关闭
service iptables status 查看防火墙状态
重新进入bin目录启动即可
Hadoop集群配置——root用户
root用户下:
- 三个节点关闭防火墙:
service iptables stop
chkconfig iptables off - 三个节点需要修改主机名:
vim /etc/sysconfig/network
修改HOSTNAME属性,例如:
HOSTNAME=hadoop01
重新生效:
source /etc/sysconfig/network - 三个节点需要进行IP和主机名的映射:
vim /etc/hosts
添加:
192.168.76.135 hadoop01
192.168.76.129 hadoop02
192.168.76.130 hadoop03
注意:映射完成之后,三个节点的hosts文件应该是一样的 - 三个节点重启
reboot - 三个节点之间来配置免密登陆:
ssh-keygen
注意:这三句话在三个节点上都需要执行
ssh-copy-id root@hadoop01
ssh-copy-id root@hadoop02
ssh-copy-id root@hadoop03
输入yes
密码:root123
执行完成之后,每一个节点测试一下是否能够免密登陆:
ssh hadoop01
ssh hadoop02
ssh hadoop03 - 安装JDK
- 安装Zookeeper
***** 在第一个节点上 ***** - 解压Hadoop的安装包:
tar -xvf hadoop-2.7.1_64bit.tar.gz - 进入Hadoop安装目录的子目录中:
cd hadoop-2.7.1/etc/hadoop/ - 编辑hadoop-env.sh:
vim hadoop-env.sh
修改:
export JAVA_HOME=/home/software/java/jdk1.8.0_161
export HADOOP_CONF_DIR=/home/software/hadoop-2.6.4/etc/hadoop
保存退出之后,重新生效:
source hadoop-env.sh
11. 编辑core-site.xml
vim core-site.xml
添加:
<!-- 指定在Zookeeper上注册的节点的名字 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!-- 指定Hadoop数据临时存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.6.4/tmp</value>
</property>
<!-- 指定zookeeper的存放地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
- 编辑hdfs-site.xml
vim hdfs-site.xml
添加:
<!-- 绑定在Zookeeper上注册的节点名 -->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!-- ns集群下有两个namenode,分别为nn1, nn2 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!--nn1的RPC通信-->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop01:9000</value>
</property>
<!--nn1的http通信-->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上存放的位置,这样,namenode2可以从journalnode集群里的指定位置上获取信息,达到热备效果-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/software/hadoop-2.6.4/tmp/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--配置namenode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/software/hadoop-2.6.4/tmp/hdfs/name</value>
</property>
<!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/software/hadoop-2.6.4/tmp/hdfs/data</value>
</property>
<!--配置副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
- 编辑mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
添加:
<!--告诉hadoop以后MR运行在YARN上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 编辑yarn-site.xml
vim yarn-site.xml
添加:
<!--配置yarn的高可用-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--指定两个resourcemaneger的名称-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--配置rm1的主机-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<!--配置rm2的主机-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop03</value>
</property>
<!--开启yarn恢复机制-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--执行rm恢复机制实现类-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--配置zookeeper的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!--执行yarn集群的别名-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>ns-yarn</value>
</property>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
- 编辑slaves:
vim slaves
添加三个节点的主机名,例如:
hadoop01
hadoop02
hadoop03
- 将第一个节点上Hadoop的安装目录整个拷贝给另外两个节点:
回到software目录下,然后拷贝:
scp -r hadoop-2.6.4 root@hadoop02:/home/software/
scp -r hadoop-2.6.4 root@hadoop03:/home/software/
***** 集群配置及启动 *****
17. 三个节点配置环境变量
vim /etc/profile
添加:
export HADOOP_HOME=/home/software/hadoop-2.6.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出,并且需要重新生效:
source /etc/profile
18. 三个节点启动Zookeeper
cd /home/software/zookeeper-3.4.14/bin
sh zkServer.sh start
启动完成之后,查看状态确认启动:
sh zkServer.sh status
19. 在第一个节点上格式化Zookeeper:
hdfs zkfc -formatZK
20. 在三个节点上启动JournalNode
hadoop-daemon.sh start journalnode
21. 在第一个节点上格式化NameNode
hdfs namenode -format
22. 在第一个节点上启动NameNode
hadoop-daemon.sh start namenode
23. 在第二个节点上格式化NameNode
hadoop namenode -bootstrapStandby
(表示将第二个namenode设置为备份状态)
24. 在第二个节点上启动NameNode
hadoop-daemon.sh start namenode
25. 在第一个和第二个节点上启动FailoverController切换节点状态
hadoop-daemon.sh start zkfc
26. 三个节点启动DataNode
hadoop-daemon.sh start datanode
27. 在第三个节点上启动yarn
start-yarn.sh
28. 在第一个节点上启动ResourceManager
yarn-daemon.sh start resourcemanager
***** 集群停止*****
- 先停止hdfs
stop-dfs.sh - 第三个节点停止yarn
stop-yarn.sh - 第一或者第二个节点停止resourcemanager
yarn-daemon.sh stop resourcemanager - 停止zookeeper
sh zkServer.sh stop
补充:
如果启动完成之后,节点个数发生缺少,可以试图单独启动
- 如果是缺少NameNode、DataNode、JournalNode、DFSZKFailoverController,利用hadoop-daemon.sh
start xxx- 如果是缺少ResourceManager、NodeManager,利用yarn-daemon.sh start XXXX
jps之后,第一个节点上:
Jps
QuorumPeerMain
NameNode
DataNode
JournalNode
NodeManager
ResourceManager
DFSZKFailoverController
第二个节点上:
Jps
QuorumPeerMain
NameNode
DataNode
JournalNode
NodeManager
DFSZKFailoverController
第三个节点上:
Jps
QuorumPeerMain
DataNode
JournalNode
ResourceManager
NodeManager
问题:
启动Hadoop完全分布式之前,一定要先启动Zookeeper
- hdfs zkfc -formatZK — HA is not available
- command not found:环境变量配置错了或者配置完之后没有source
- unkown host:hosts文件映射错误或者主机名写错
- already running as 2830 ,jps — kill -9 2830 重新启动
Hadoop集群配置——非root用户
非root用户下:
- 三个节点关闭防火墙:
service iptables stop
chkconfig iptables off - 三个节点需要修改主机名:
vim /etc/sysconfig/network
修改HOSTNAME属性,例如:
HOSTNAME=hadoop01(三台都修改)
重新生效:
source /etc/sysconfig/network - 三个节点需要进行IP和主机名的映射:
vim /etc/hosts
添加:
192.168.76.135 hadoop01
192.168.76.129 hadoop02
192.168.76.130 hadoop03
注意:映射完成之后,三个节点的hosts文件应该是一样的 - 三个节点重启
reboot - 三个节点之间来配置免密登陆:
(1)确认ssh服务开启
netstat -antp|grep sshd
端口是22,最好三台都确认一下
(2)root用户下:
打开文件:vim /etc/ssh/sshd_config
确保有以下配置,大概在50行:
AuthorizedKeysFile .ssh/authorized_keys
PubkeyAuthentication yes
(3)创建用户hadoop,并且passwd初始化密码:hadoop
(4)在第一个节点hadoop01上输入:
ssh hadoop@hadoop02,尝试登陆hadoop02,此时需要密码,因为尚未配置免密登录
(5)三个节点切换到hadoop用户:su - hadoop
生成秘钥(三个节点都执行):ssh-keygen
(知识点补充:ssh-keygen -t rsa中-t表示加密类型,此处ssh-keygen即可)
(6)配置秘钥授权文件
6.1 在hadoop01节点上以hadoop用户生成一个空白文件authorized_keys
touch ~/.ssh/authorized_keys
6.2 将hadoop01自己的公钥放入文件authorized_keys中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
6.3 以hadoop02节点的hadoop用户,将hadoop02的公钥传输到hadoop01节点,文件名为hadoop02.id_rsa.pub
scp ~/.ssh/id_rsa.pub hadoop@hadoop01:~/.ssh/hadoop02.id_rsa.pub
6.4 在hadoop01节点上,将hadoop02.id_rsa.pub的内容写入authorized_keys文件
cat ~/.ssh/hadoop02.id_rsa.pub >> ~/.ssh/authorized_keys
6.5 以hadoop03节点上的hadoop用户,将hadoop03的公钥传输到hadoop01节点,文件名为hadoop03.id_rsa.pub
scp ~/.ssh/id_rsa.pub hadoop@hadoop01:~/.ssh/hadoop03.id_rsa.pub
6.6 在hadoop01机器上,将hadoop03.id_rsa.pub的内容写入authorized_keys文件
cat ~/.ssh/hadoop03.id_rsa.pub >> ~/.ssh/authorized_keys
此时authorized_keys文件中已经有了hadoop01、hadoop02、hadoop03的公钥;
(7)同步秘钥授权文件
以hadoop用户登录hadoop01节点,执行以下命令将秘钥授权文件同步到hadoop02、hadoop03节点:
scp ~/.ssh/authorized_keys hadoop@hadoop02:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@hadoop03:~/.ssh/
至此,秘钥授权文件已经同步到所有节点。如果前面的所有操作用的是root用户,此时已经可以免密码登录成功了,
但是今天因为用的不是root账号,此时在hadoop01输入命令ssh hadoop@hadoop02,依然要求输入hadoop02的账号的密码,这是因为文件和文件夹权限的问题导致的,接下来解决权限问题:
(8)配置文件/夹的权限(三台都需要执行)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
至此,非root账号的SSH免密登录配置已经完成
(9)在三个节点上测试免密登录
ssh hadoop01
ssh hadoop02
ssh hadoop03
6. 切换回root用户
在/home/software/下解压hadoop-2.6.4压缩包
赋予hadoop用户安装权限:
chown -R hadoop:hadoop /home/software/hadoop-2.6.4
- 切换至hadoop用户
su hadoop - 进入Hadoop安装目录的子目录中:
cd hadoop-2.6.4/etc/hadoop/ - 编辑hadoop-env.sh:
vim hadoop-env.sh
修改:
export JAVA_HOME=/home/software/jdk1.8.0_161
export HADOOP_CONF_DIR=/home/software/hadoop-2.6.4/etc/hadoop
保存退出之后,重新生效:
source hadoop-env.sh
10. 编辑core-site.xml
vim core-site.xml
添加:
<!-- 指定在Zookeeper上注册的节点的名字 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!-- 指定Hadoop数据临时存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.6.4/tmp</value>
</property>
<!-- 指定zookeeper的存放地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
-
vim hdfs-site.xml编辑hdfs-site.xml——注:此文件只有一处与hadoop的root用户搭建不一样,即隔离机制免密登录的<value>
添加:
<!-- 绑定在Zookeeper上注册的节点名 -->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!-- ns集群下有两个namenode,分别为nn1, nn2 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!--nn1的RPC通信-->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop01:9000</value>
</property>
<!--nn1的http通信-->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上存放的位置,这样,namenode2可以从journalnode集群里的指定位置上获取信息,达到热备效果-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/software/hadoop-2.6.4/tmp/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!--配置namenode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/software/hadoop-2.6.4/tmp/hdfs/name</value>
</property>
<!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/software/hadoop-2.6.4/tmp/hdfs/data</value>
</property>
<!--配置副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
- 编辑mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
添加:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 编辑yarn-site.xml
vim yarn-site.xml
添加:
<!--配置yarn的高可用-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--指定两个resourcemaneger的名称-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--配置rm1的主机-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<!--配置rm2的主机-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop03</value>
</property>
<!--开启yarn恢复机制-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--执行rm恢复机制实现类-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--配置zookeeper的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!--执行yarn集群的别名-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>ns-yarn</value>
</property>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
- 编辑slaves:
vim slaves
添加三个节点的主机名,例如:
hadoop01
hadoop02
hadoop03
- 将第一个节点上Hadoop的安装目录整个拷贝给另外两个节点:
回到software目录下,然后拷贝:
scp -r hadoop-2.6.4 root@hadoop02:/home/software/
scp -r hadoop-2.6.4 root@hadoop03:/home/software/
-
vim /etc/profile三个节点配置环境变量
添加:
export HADOOP_HOME=/home/software/hadoop-2.6.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出,并且需要重新生效:
source /etc/profile
18. 赋予hadoop02、hadoop03的hadoop用户权限
chown -R hadoop:hadoop /home/software/hadoop-2.6.4
19. 三个节点启动Zookeeper
cd /home/software/zookeeper-3.4.14/bin
sh zkServer.sh start
启动完成之后,查看状态确认启动:
sh zkServer.sh status
20. 在第一个节点上格式化Zookeeper:
hdfs zkfc -formatZK
21. 在三个节点上启动JournalNode
hadoop-daemon.sh start journalnode
22. 在第一个节点上格式化NameNode
hdfs namenode -format
23. 在第一个节点上启动NameNode
hadoop-daemon.sh start namenode
24. 在第二个节点上格式化NameNode
hadoop namenode -bootstrapStandby
表示将第二个namenode设置为备份状态
25. 在第二个节点上启动NameNode
hadoop-daemon.sh start namenode
26. 三个节点启动DataNode
hadoop-daemon.sh start datanode
27. 在第一个和第二个节点上启动FailoverController切换节点状态
hadoop-daemon.sh start zkfc
28. 在第三个节点上启动yarn
start-yarn.sh
29. 在第一个节点上启动ResourceManager
yarn-daemon.sh start resourcemanager
启动顺序:
1、启动zookeeper(每台都执行)
zkServer.sh status
2、启动journalnode(每台都执行)
hadoop-daemon.sh start journalnode
3、启动hdfs
start-dfs.sh
4、hadoop03节点启动yarn
start-yarn.sh
5、hadoop01节点启动yarn进程
yarn-daemon.sh start resourcemanager
集群停止:
- 先停止hdfs
stop-dfs.sh - 第三个节点停止yarn
stop-yarn.sh - 第一或者第二个节点停止resourcemanager
yarn-daemon.sh stop resourcemanager - 停止zookeeper
sh zkServer.sh stop
hadoop集群增加服务器
- 创建一台虚拟机,可以ping通主机
- 配置ip
- 关闭防火墙
service iptables stop
chkconfig iptables off
service iptables status - 关闭selinux
vim /etc/selinux/config
SELINUX=disabled - 设置主机名为hadoop04
vim /etc/sysconfig/network - 配置主机名和ip对应关系—每个节点都要设置一致
vim /etc/hosts - 配置免密登录:
root用户下这么配置:
在hadoop04上:
ssh-keygen
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03
在hadoop01、02、03上依次执行:
ssh-copy-id hadoop04
hadoop用户配置免密登录(基于三台的基础):
su hadoop
ssh-keygen
以hadoop04节点的hadoop用户,将hadoop04的公钥传输到hadoop01节点,文件名为hadoop04.id_rsa.pub
scp ~/.ssh/id_rsa.pub hadoop@hadoop01:~/.ssh/hadoop02.id_rsa.pub
在hadoop01节点上,将hadoop04.id_rsa.pub的内容写入authorized_keys文件
cat ~/.ssh/hadoop04.id_rsa.pub >> ~/.ssh/authorized_keys
以hadoop用户登录hadoop01节点,执行以下命令将秘钥授权文件同步到hadoop02、hadoop03节点、hadoop04节点:
scp ~/.ssh/authorized_keys hadoop@hadoop02:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@hadoop03:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@hadoop04:~/.ssh/
配置文件/夹的权限(第四个节点)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
至此,非root账号的SSH免密登录配置已经完成
在三个节点上测试免密登录
ssh hadoop01
ssh hadoop02
ssh hadoop03
ssh hadoop04
8. 配置JDK
解压 tar -zxvf xxx
pwd 复制路径
vim /etc/profile
(还需要配置hadoop环境变量,可以直接从hadoop01上远程拷贝一个:scp -r /etc/profile root@hadoop04:/etc/profile)
export JAVA_HOME=[path]
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:PATH
source /etc/profile
测试:java -version
9. 解压hadoop安装包
10. 在主节点中拷贝所有的hadoop配置文件到新的节点
scp -r /home/software/hadoop-2.6.4/etc/hadoop/* root@hadoop04:/home/software/hadoop-2.6.4/etc/hadoop/
- 在主节点中设置白名单配置文件(两个namenode都需要)
touch /home/software/hadoop-2.6.4/etc/hadoop/dfs.hosts
vim /home/software/hadoop-2.6.4/etc/hadoop/dfs.hosts
将所有节点ip添加到dfs.hosts中
hadoop01、02、03、04
12. 在主节点添加配置到hdfs-site.xml中(两个namenode都需要)
<property>
<name>dfs.hosts</name>
<value>/home/software/hadoop-2.6.4/etc/hadoop/dfs.hosts</value>
</property>
- 将新节点的ip添加到slaves
(两个namenode都需要,最好四个节点都同步)
vim slaves
hadoop01、02、03、04
14.启动完成后,在第四个节点平衡
hdfs dfsadmin -setBalancerBandwidth 67108864
start-balancer.sh -threshold 5
启动
1、启动zookeeper(每台都执行)
zkServer.sh status
2、启动journalnode(每台都执行)
hadoop-daemon.sh start journalnode
3、启动hdfs
start-dfs.sh
4、hadoop03节点启动yarn
start-yarn.sh
5、hadoop01节点启动yarn进程
yarn-daemon.sh start resourcemanager
hadoop对datanode扩容
先停掉要扩容节点服务:
一、 扩展磁盘
- 关闭虚拟机-设置-磁盘-扩展
- 查看磁盘情况
fdisk -l 或者 df -h - 创建磁盘
fdisk /dev/sda
m 表示显示每个字母代表的含义
n
p
1
两次回车
wq 保存退出
如果提示重启,则重启 - 格式化
mkfs.ext3 /dev/sda4
可能出现的问题:
如果格式化失败,报“不是一个目录…不存在”的错
解决:
执行partprobe
命令,再格式化还是不行的话,可以重启下虚拟机。 - 创建挂载点
mkdir exapp
mount /dev/sda4 /exapp - df -h
- blkid 查看block设备id
- vim /etc/fstab
加上:/dev/sda4 /exapp ext3 defaults 0 0
补充知识点:
格式说明:/dev/sdb1 代表哪个分区; ext4是该分区的格式; defaults是挂载时所要设定的参数(只读,读写,启用quota等),输入defaults包括的参数有(rw、dev、exec、auto、nouser、async)
1是使用dump是否要记录,0是不要; 2是开机时检查的顺序,是boot系统文件就为1,其他文件系统都为2,如不要检查就为0。)
二、 扩展datanode
- 在挂载的磁盘/exapp下创建一个文件夹:
mkdir /exapp/datanode - 修改文件权限(在root用户下)
chown -R hadoop:hadoop /exapp/datanode - 修改etc/hadoop下的hdfs-site.xml文件:
在“dfs.datanode.data.dir”的value后加上:,/exapp/datanode
<!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/software/hadoop-2.6.4/tmp/hdfs/data,/exapp/datanode</value>
</property>
- su hadoop 重启datanode
hadoop-daemon.sh start datanode - 50070端口查看是否成功
问题:
启动datanode报指定目录加载失败,是因为没有给挂载目录权限,加上第二点即可。
资源下载:
提取码:0130