day06(Hadoop分布式搭建)

本环境搭建,需要三台服务器,以及Hadoop和zk,jdk(centos6.5,hadoop-2.7.1,zookeeper-3.4.8)

1.关闭防火墙
service iptables stopchkconfig iptables off
2.修改主机名
修改主机名,Hadoop主机名中不能出现和-
vim /etc/sysconfig/network
修改其中的HOSTNAME属性的值
修改完成之后保存退出,然后需要重新生效
source /etc/sysconfig/network
3.需要将主机名和ip进行映射(三台服务都需要)
vim /etc/hosts
添加主机名 IP映射

192.168.253.129 hadoop01
192.168.253.130 hadoop02
192.168.253.131 hadoop03
注意,改完之后,三个节点中的hosts文件应该是一样的

4.重启reboot

5.三个节点之间配置免密互通,产生密钥
ssh-keygen
拷贝到三个节点上,注意是三个节点每一个节点都需要执行这三句话,保证任意两个节点之间能够免密互通

ssh-copy-id root@hadoop01
ssh-copy-id root@hadoop02
ssh-copy-id root@hadoop03
最好三个节点都ssh连接一下看一下是否需要密码,如果连接不需要密码就能登录,那就表示免密配置成功
logout 登出

6.安装jdk

7.安装zookeeper
现在第一个节点上配置,然后拷贝给其他节点
8.将伪分布式重命名
mv hadoop-2.7.1 hadoop-standalone

9.解压Hadoop的安装包
[root@hadoop01 presoftware]# tar -xvf hadoop-2.7.1.tar.gz 

10.进入安装目录的子目录
cd hadoop-2.7.1/etc/hadoop/

11.修改hadoop-env.sh

修改JAVA_HOME和HADOOP_CONF_DIR
export JAVA_HOME=/home/presoftware/jdk1.8.0_181
export HADOOP_CONF_DIR=/home/presoftware/hadoop-2.7.1/etc/hadoop
保存退出之后重新生效
source hadoop-env.sh

12.编辑core-site.xml
vim core-site.xml

<!--为集群起别名,以确定向Zookeeper注册的节点的名字-->
<property>
                <name>fs.defaultFS</name>
                <value>hdfs://ns</value>
        </property>
        <!--指定Hadoop数据I临时存放目录-->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/presoftware/hadoop-2.7.1/tmp</value>
                <!--指定zookeeper的连接地址-->
        </property>

<property>
                <name>ha.zookeeper.quorum</name>
               <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
        </property>

13.编辑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上存放的位置-->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns
</property>
<!--指定JournalNode在本地磁盘存放数据的位置-->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/home/presoftware/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存放元数据的目录,可以不配置,如果不配置则-->
<property>
	<name>dfs.namenode.name.dir</name>
	<value>file:///home/presoftware/hadoop-2.7.1/tmp/hdfs/name</value>
</property> 
<!--配置datanode存放元数据的目录,可以不配置,如果不配置则-->
<property>
	<name>dfs.datanode.data.dir</name>
	<value>file:///home/presoftware/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>

14.复制mapred-site.xml.template文件
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<property>
               <name>mapreduce.framework.name</name>
                <value>yarn</value>
 </property>

15.编辑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>



16.编辑slaves文件(这个文件是用于指定DataNode以及NodeManager的节点位置)
vim slaves
添加三个节点的名字,例如
hadoop01
hadoop02
hadoop03


17.需要将这个hadoop的安装目录拷贝给其他两个节点
[root@hadoop01 presoftware]# scp -r hadoop-2.7.1 root@192.168.253.130:/home/presoftware/
[root@hadoop01 presoftware]# scp -r hadoop-2.7.1 root@192.168.253.131:/home/presoftware/


或者
scp -r hadoop-2.7.1 root@hadoop02 : /home/presoftware/scp -r hadoop-2.7.1 root@hadoop03 :/home/presoftware/


18.三个节点需要配置环境变量
vim /etc/profile


在文件最后添加:
export HADOOP_HOME=/home/presoftware/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出之后需要重新生效
source /etc/profile

19.三个节点都需要启动zookeeper
cd /home/software/zookeeper-3.4.7/bin
sh zkServer.sh start
sh zkServer.sh status



20.在第一个节点上格式化Zookeeper -实际上就是在Zookeeper上去注册节点
hdfs zkfc -formatZK

在这里插入图片描述

21.在三个节点上启动JournalNode
hadoop-daemon.sh start journalnode

22.在第一个节点上格式化NameNode
hadoop namenode -format
23.在第一个节点上启动NameNode
hadoop-daemon.sh start namenode
24.在第二个节点上格式化NameNode
hdfs namenode -bootstrapstandby
25.在第二台节点上启动NameNode : hadoop-daemon.sh start namenode
26.在三台节点上启动DataNode : hadoop-daemon.sh start datanode
27.在第一台节点和第二节点上启动zkfc ( FailoverController ) : hadoop-daemon.sh start zkfc
28.在第三个节点上启动Yarn : start-yarn.sh
29.在第一个节点上来单独启动resourcemanager
yarn-daemon.sh start resourcemanager
如果启动成功,则各个节点的进程数量为8.7.6

一、

[root@hadoop01 hadoop]# jps
2448 QuorumPeerMain
3536 ResourceManager
2802 JournalNode
3186 DataNode
3046 NameNode
3419 NodeManager
3292 DFSZKFailoverController
3597 Jps

二、

[root@hadoop02 hadoop]# jps
2624 DFSZKFailoverController
2513 DataNode
2244 JournalNode
2758 NodeManager
2126 QuorumPeerMain
2398 NameNode
2879 Jps

三、

[root@hadoop03 hadoop]# jps
2496 QuorumPeerMain
3249 Jps
2726 DataNode
2856 ResourceManager
2633 JournalNode
2955 NodeManager

如果发现少了节点,可以试着单独启动一次:
hadoop-daemon.sh start namenode/datanode/journalnode/zkfc
yarn-daemon.sh start resourcemanager/nodemanager

关闭

[root@hadoop02 hadoop]# stop-all.sh

第二次启动开始可以使用

[root@hadoop02 hadoop]# start-all.sh

在这里插入图片描述

在这里插入图片描述

hdfs zkfc -formatZKHA is not enabled
1.Zookeeper启动失败
2.系统兼容性
重启
导包

Yarn

一、概述
1.产生原因:
a. Hadoop1.0中,JobTracker既要负责任务调度和监控还要负责集群的资源管理,任务比较多,就导致任务量增多的时候效率成倍下降甚至崩溃
b.外因︰随着Hadoopl以及分布式的发展,产生了越来越多的计算框架,这些框架之间的资源分配容易产生冲突,所以需要提供—套统一的资源分配的框架
2. YARN - Yet Another Resource Negotiator—迄今另一个资源调度器

3.Yarn负责资源管理和任务调度
a. ResourceManager:资源管理
b. ApplicationMaster:任务管理
c. NodeManager:执行任务

在这里插入图片描述

二、Job的执行流程
1.客户端将Job提交给ResourceManager
2. ResourceManager在收到ob任务之后会等待NodeManager的心跳
3..在ResourceManager收到NodeManager的心跳之后会将Job交给这个NodeManager,同时在这个NodeManager上开启一个ApplicationMaster,将Job分配给这个ApplicationMaster,在yarn中每一个job任务会对应一个单独的ApplicationMaster
4. ApplicationMaster收到ob之后会对这个Job进行划分,划分好之后会向ResourceManager请求执行资源,例如,如果一个任务划分成5个MapTask以及2个ReduceTask,那么默认情况下在申请资源的时候会申请17份资源,但是注意ResourceManager会只返回7份资源
5. ResourceManager收到请求之后会将资源封装成Container对象发送给ApplicationMaster

  1. ApplicationMaster收到container之后会对资源进行二次分配,分配给具体的子任务,然后ApplicationMaster会将子任务分发给NodeManager执行,并且会监控这些任务的执行情况。每一个ApplicationMaster只监控自己的任务,不监控其他的ApplicationMaster的任务

  2. ApplicationMaster会将子任务分发给NodeManager执行,并且会监控这些任务的执行情况。每一个ApplicationMaster只监控自己的任务,不监控其他的ApplicationMaster的任务
    8.当子任务执行失败的时候,这个子任务所占用的资源也会被释放。ApplicationMaster在监控到这个任务失败的时候会试图重启这个子任务,在重启之前,ApplicationMaster会向ResogrceManager重新为这个子任务来申请资源

9.注意︰
a.在Yarn体系结构中,ResourceManager管理ApplicationMaster ,ApplicationMaster管理子任务
b.默认情况下,每份资源中包含1G内存一个1个CPU核,即允许每一个子任务占用1G内存以及1个CPU核

在这里插入图片描述

资源调度策略
1.FCFS—先到先得
2.优先级
3.短任务优先

Hadoop配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Hadoop2.OJVM重用
在这里插入图片描述

Hadoop生态圈
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值