搭建Hadoop完全分布式
一、完全分布式结构图

二、完全分布式简易图

三、实现步骤:
1、三个节点需要关闭防火墙
①临时关闭:sudo systemctl stop firewalld
②永久关闭:sudo systemctl disable firewalld
2、三个节点需要修改主机名称
①编辑文件:vim /etc/hostname
②修改主机名称为对应的名称:hadoop01/hadoop02/hadoop03
3、三个节点需要进行IP地址与主机名称的映射
①编辑文件:vim /etc/hosts
②添加配置
1 2 3
| 192.168.232.128 hadoop01 192.168.232.129 hadoop02 192.168.232.130 hadoop03
|
4、三个节点重新启动用于加载系统配置:reboot
5、三个节点需要进行免密互通
①生成公钥和秘钥,生成的公钥和秘钥将会自动存储在/root/.ssh目录下:ssh-keygen
②三个节点需要进行执行注册
1 2 3
| ssh-copy-id root@hadoop01 ssh-copy-id root@hadoop02 ssh-copy-id root@hadoop03
|
6、上传JDK的安装包并且解压
1
| tar -xvf jdk-8u131-linux-x64.tar.gz -C /home/software/
|
7、配置环境变量
①编辑文件:vim /etc/profile
②添加配置
1 2
| JAVA_HOME=/home/software/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin:
|
③配置完成之后保存退出并且需要重新生效
8、上传并解压Hadoop压缩包
1
| tar -xvf hadoop-2.7.6.tar.gz -C /home/software/
|
9、配置Hadoop环境变量
①编辑文件:vim /etc/profile
②添加配置
1 2 3
| JAVA_HOME=/home/software/jdk1.8 HADOOP_HOME=/home/software/hadoop-2.7.6 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
|
③配置完成之后保存退出并且需要重新生效
===============================配置阶段=================================
进入Hadoop的安装目录下的子目录:cd /home/software/hadoop-2.7.6/etc/hadoop/
1、编辑hadoop-env.sh文件
添加配置
1 2
| export JAVA_HOME=/home/software/jdk1.8 export HADOOP_CONF_DIR=/home/software/hadoop-2.7.6/etc/hadoop
|
保存退出并且重新生效:source hadoop-env.sh
2、编辑slaves文件
添加配置(添加从节点的主机名称)
1 2 3
| hadoop01 hadoop02 hadoop03
|
3、编辑core-site.xml文件
添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <property> <!-- 指定在Zookeeper上注册的节点名称 --> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <property> <!-- 指定Hadoop数据存储的目录 --> <name>hadoop.tmp.dir</name> <value>/home/software/hadoop-2.7.6/tmp</value> </property> <property> <!-- 指定Zookeeper的链接地址 --> <name>ha.zookeeper.quorum</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property>
|
4、编辑mapred-site.xml文件
①复制模版文件并且重命名:cp mapred-site.xml.template mapred-site.xml
②添加配置
1 2 3 4 5
| <property> <!-- MapReduce程序基于Yarn运行 --> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
|
5、编辑hdfs-site.xml文件
添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| <property> <!-- 绑定在Zookeeper上注册节点的名称 --> <name>dfs.nameservices</name> <value>ns</value> </property> <property> <!-- ns集群下两个NameNode,分别是nn1和nn2 --> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <property> <!-- nn1的RPC通信 --> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hadoop01:9000</value> </property> <property> <!-- nn1的http通信 --> <name>dfs.namenode.http-address.ns.nn1</name> <value>hadoop01:50070</value> </property> <property> <!-- nn2的RPC通信 --> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hadoop02:9000</value> </property> <property> <!-- nn2的http通信 --> <name>dfs.namenode.http-address.ns.nn2</name> <value>hadoop02:50070</value> </property> <property> <!-- 指定JournalNode在本地磁盘上存储数据目录 --> <name>dfs.journalnode.edits.dir</name> <value>/home/software/hadoop-2.7.6/tmp/journal</value> </property> <property> <!-- 指定NameNode的元数据在journalNode存储位置,这样子备份状态的NameNode就可以 从journalnode集群中的指定位置获取信息达到热备效果 --> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value> </property> <property> <!-- 开启NameNode故障时的自动切换 --> <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> <property> <!-- 使用隔离机制需要SSH免密登录 --> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <property> <!-- 配置NameNode存放元数据的目录 --> <name>dfs.namenode.name.dir</name> <value>file:///home/software/hadoop-2.7.6/tmp/hdfs/name</value> </property> <property> <!-- 配置DataNode存放元数据的目录 --> <name>dfs.datanode.data.dir</name> <value>file:///home/software/hadoop-2.7.6/tmp/hdfs/data</value> </property> <property> <!-- 配置副本数量 --> <name>dfs.replication</name> <value>3</value> </property> <property> <!-- 设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作 --> <name>dfs.permissions</name> <value>false</value> </property>
|
6、编辑yarn-site.xml文件
添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <property> <!-- 配置Yarn的高可用 --> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <!-- 指定两个ResourceManager的名称 --> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <!-- 配置rm1的主机名称 --> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop01</value> </property> <property> <!-- 配置rm2的主机名称 --> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop03</value> </property> <property> <!-- 开启Yarn的恢复机制 --> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <!-- 执行rm恢复机制实现类 --> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <!-- 配置Zookeeper的链接地址 --> <name>yarn.resourcemanager.zk-address</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property> <property> <!-- 指定yarn集群的别名 --> <name>yarn.resourcemanager.cluster-id</name> <value>ns-yarn</value> </property> <property> <!-- 指定NodeManager启动加载服务的方式为shuffle server --> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <!-- 指定ResourceManager的地址 --> <name>yarn.resourcemanager.hostname</name> <value>hadoop03</value> </property>
|
10、将第一个节点上的Hadoop安装包远程拷贝给另外的两个节点
1 2
| scp -r hadoop-2.7.6/ root@hadoop02:/home/software/ scp -r hadoop-2.7.6/ root@hadoop03:/home/software/
|
=======================Hadoop集群的格式化与启动=============================
1、三个节点启动Zookeeper
1 2 3
| cd /home/software/zookeeper-3.4.7/bin/ sh zkServer.sh start sh zkServer.sh status
|
2、在第一个节点上格式化Zookeeper
3、在三个节点上启动JournalNode
1
| hadoop-daemon.sh start journalnode
|
4、在第一个节点上格式化NameNode
5、在第一个节点上启动NameNode
1
| hadoop-daemon.sh start namenode
|
6、在第二个节点上格式化NameNode
1
| hadoop namenode -bootstrapStandby
|
7、在第二个节点上启动NameNode
1
| hadoop-daemon.sh start namenode
|
8、三个节点上启动DataNode
1
| hadoop-daemon.sh start datanode
|
9、在第一个节点上和第二个节点上启动
1
| hadoop-daemon.sh start zkfc
|
10、在第三个节点上启动Yarn
11、在第一个节点上启动ResourceManager
1
| yarn-daemon.sh start resourcemanager
|
完全分布式启动之后如果出现进程数量的情况,解决方案如下:
1、如果NameNode没有 —> hadoop-daemon.sh start namenode
2、如果DataeNode没有 —> hadoop-daemon.sh start datanode
3、如果ZKFailOverController没有 —> hadoop-daemon.sh start zkfc
1
| NameNode、DataeNode、ZKFailOverController ---> hadoop-daemon.sh start xxxx
|
1、如果ResouceManager没有 —> yarn-daemon.sh start resourcemanager
2、如果NodeManager没有 —> yarn-daemon.sh start nodemanager
1
| ResouceManager、NodeManager ---> yarn-daemon.sh start xxxx
|