RICH-ATONE

Hadoop2.7.1完全分布式配置(10min搞定)

Hadoop完全分布式配置
前言
Hadoop的安装分为单机方式、伪分布式方式和完全分布式方式。
a. 单机模式是Hadoop的默认模式。当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置。在这种默认模式下所有3个XML文件均为空。当配置文件为空时,Hadoop会完全运行在本地。因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。
b. 伪分布模式 Hadoop守护进程运行在本地机器上,模拟一个小规模的的集群。可以使用HDFS和MapReduce。
c. 完全分布模式 Hadoop守护进程运行在一个集群上。启动所有的守护进程,具有hadoop完整的功能,可以使用HDFS、MapReduce和Yarn,并且这些守护进程运行在集群中,可以真正的利用集群提供高性能,在生产环境下使用。

本文主要讲解在CentOS6.5环境下Hadoop的完全分布式安装。在这个过程中,需要准备三台云主机,下载好Hadoop的压缩包 hadoop-2.7.1_64bit.tar.gz;

 

1. 关闭防火墙

临时关闭:

service iptables stop

永久关闭:

chkconfig iptables off

2. 改变主机名
vim /etc/sysconfig/network
重新生效

source /etc/sysconfig/network
3. 将ip和主机名进行映射
vim /etc/hosts
主机IP地址 主机名 例如:

192.168.195.132 hadoop01
192.168.195.133 hadoop02
192.168.195.134 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

6. 如果已经配置了Hadoop伪分布式,将其备份,即 将第一个节点的伪分布式重新命名

mv hadoop-2.7.1 hadoop-alone  (没有伪分布式,忽略此步)

7. 解压安装包

tar -xvf hadoop-2.7.1_64bit.tar.gz

8. 进入hadoop安装目录的etc/hadoop目录

cd 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 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

19. 在三个节点上启动JournalNode

hadoop-daemon.sh start journalnode

20. 在第一个节点上格式化NameNode

hadoop namenode -format

21. 在第一个节点上启动NameNode

hadoop-daemon.sh start namenode  

22. 在第二个节点上格式化NameNode

hdfs namenode -bootstrapStandby  

23. 在第二个节点上启动NameNode

hadoop-daemon.sh start namenode

24. 在三个节点上启动DataNode

hadoop-daemon.sh start datanode 

25. 在第一个和第二个节点上启动FailOverController

hadoop-daemon.sh start zkfc 

26. 在第三个节点上启动yarn

start-yarn.sh  

27. 在第一个节点上启动ResourceManager

yarn-daemon.sh start resourcemanager

  

如果所有的配置都成功了,并且所有的进程都启动了,那么结果应该如下:
     第一个节点:

Jps
NameNode
DataNode
JournalNode
DFSZKFailoverController
NodeManager
ResourceManager
QuorumPeerMain	

  第二个节点:

Jps
NameNode
DataNode
JournalNode
DFSZKFailoverController
NodeManager
QuorumPeerMain

  第三个节点:

Jps
DataNode
JournalNode
ResourceManager
NodeManager
QuorumPeerMain

  注:只要不是第一次启动Hadoop,只需要执行start-all.sh就可以

————————————————
原文链接:https://blog.csdn.net/cm15835106905/article/details/102913754

posted on 2022-09-04 23:52  RICH-ATONE  阅读(358)  评论(0编辑  收藏  举报

导航