前期准备
1.三台Centos7虚拟机
CentOS-7-x86_64-DVD-1511.iso下载
2.下载jdk,Hadoop,Zookeeper
3.第一台 虚拟机根目录的home文件夹中创建Java和software文件夹
4.Java中加入jdk;software中添加Hadoop,Zookeeper压缩包
Hadoop完全分布式配置步骤详解
1. 关闭防火墙
systemctl stop firewalld
2.改变主机名
vim /etc/sysconfig/network
重新生效
source /etc/sysconfig/network
3. 将ip和主机名进行映射
vim /etc/hosts
主机IP地址 主机名 例如:
192.168.202.130 hadoop01
192.168.202.131 hadoop02
192.168.202.132 hadoop03
注意:三个节点都如此不再符截图
注意:三个节点在映射完成之后的内容应该是一模一样的
4. 重启
reboot
5. 三个节点之间需要进行免密互通
ssh-keygen
ssh-copy-id root@hadoop01
ssh-copy-id root@hadoop02
ssh-copy-id root@hadoop03
验证:在任意一个节点上能够免密登录其他两个节点
ssh hadoop01
ssh hadoop02
ssh hadoop03
如果免密成功,则输入logout回到当前节点的命令界面
6. 如果已经配置了Hadoop伪分布式,将其备份,即 将第一个节点的伪分布式重新命名
mv hadoop-2.7.1 hadoop-alone
7. 解压安装包
tar -xvf hadoop-2.7.1_64bit.tar.gz
8. 进入hadoop安装目录的etc/hadoop目录
cd /home/software/hadoop-2.7.1/etc/hadoop/
9. 编辑hadoop-env.sh
vim hadoop-env.sh
修改属性:
export JAVA_HOME=/home/presoftware/jdk1.8
export HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
注意:= 后面的是对应的jdk1.8以及hadoop2.7.1的安装目录
重新生效
source hadoop-env.sh
10. 编辑core-site.xml
vim core-site.xml
添加:
<!--指定hdfs的nameservice,为整个集群起一个别名-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!--指定Hadoop数据临时存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.7.1/tmp</value>
</property>
<!--指定zookeeper的存放地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
11. 编辑hdfs-site.xml
vim hdfs-site.xml
添加:
<!--执行hdfs的nameservice为ns,注意要和core-site.xml中的名称保持一致-->
<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.7.1/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.7.1/tmp/hdfs/name</value>
</property>
<!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/software/hadoop-2.7.1/tmp/hdfs/data</value>
</property>
<!--配置复本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
12. 编辑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>
13. 编辑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>
14. 编辑slaves
vim slaves
添加:
hadoop01
hadoop02
hadoop03
15. 将第一个节点上的hadoop安装目录拷贝给第二个和第三个节点
回到software目录下:
scp -r hadoop-2.7.1 root@hadoop02:/home/software/
scp -r hadoop-2.7.1 root@hadoop03:/home/software/
16. 修改三个节点的环境变量
vim /etc/profile
添加:
export JAVA_HOME=/home/java/jdk1.8.0_51
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/software/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重新生效:
source /etc/profile
17. 三个节点启动Zookeeper
cd /home/software/zookeeper-3.4.8/bin
sh zkServer.sh start
需要确定状态:
sh zkServer.sh status
18. 在任意一个节点上格式化Zookeeper,实际上是在Zookeeper注册节点
hdfs zkfc -formatZK
如果成功,则最后几行的日志中会出现
Successfully created /hadoop-ha/ns in ZK
启动hadoop并验证部署成功
1. 在三个节点上启动JournalNode
hadoop-daemon.sh start journalnode
2. 在第一个节点上格式化NameNode
hadoop namenode -format
3. 在第一个节点上启动NameNode
hadoop-daemon.sh start namenode
4. 在第二个节点上格式化NameNode
hdfs namenode -bootstrapStandby
5. 在第二个节点上启动NameNode
hadoop-daemon.sh start namenode
6. 在三个节点上启动DataNode
hadoop-daemon.sh start datanode
7. 在第一个和第二个节点上启动FailOverController
hadoop-daemon.sh start zkfc
8. 在第三个节点上启动yarn
start-yarn.sh
9. 在第一个节点上启动ResourceManager
yarn-daemon.sh start resourcemanager