【配置】Hadoop三节点分布式集群搭建

一、集群规划

1.主机规划

这里写图片描述

2.软件规划

jdk
centos
zookeeper
hadoop

3.用户规划
创建hadoop用户和用户组

4.目录规划
所有软件目录: /home/hadoop/app
所有数据和日志目录: /home/hadoop/data

二、安装前环境准备(所有节点)

1.禁用防火墙

[root@pc1 ~]#chkconfig iptables off
[root@pc1 ~]#reboot
[root@pc1 ~]#service iptables status

2.hosts文件检查

配置集群间的主机IP与hostname一一对应

[root@pc1 ~]# vi /etc/hosts

这里写图片描述

3.时钟同步:所有节点的时间要与当前时间一致

[root@pc1 ~]#yum install -y ntp //安装时钟同步工具

这里写图片描述

4.创建hadoop用户和用户组

这里写图片描述

设置密码

这里写图片描述

5.配置集群之间ssh免密码登录

①分别配置每个节点的免密码登录

这里写图片描述

②将所有节点的公钥id_rsa.pub拷贝到pc1节点的authorized_keys文件中

[hadoop@pc3 .ssh]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@pc1 'cat >> ~/.ssh/authorized_keys'
[hadoop@pc2 .ssh]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@pc1 'cat >> ~/.ssh/authorized_keys'

③然后将pc1的authorized_keys文件分发到所有节点

[hadoop@pc1 .ssh]$ scp -r authorized_keys hadoop@pc3:~/.ssh/

这里写图片描述

④赋予权限
这里写图片描述

⑥相互登录

这里写图片描述

这里写图片描述

6.在pc1安装脚本工具deploy.sh,runRemoteCmd.sh

参考http://blog.csdn.net/zoeyen_/article/details/78861971

7.创建程序安装目录和数据目录

这里写图片描述

三、集群搭建

1.安装jdk

①上传jdk1.7.0_79至/home/hadoop/app目录,解压。

②配置环境变量

这里写图片描述

③使环境变量文件生效,并查看jdk版本,出现以下信息说明安装成功

这里写图片描述

④将pc1的jdk文件分发到其他节点

[hadoop@pc1 app]$ deploy.sh jdk /home/hadoop/app/ slave // slave是pc2和pc3的共同标签

⑤在pc2和pc3上重复②③步骤

这里写图片描述

2.安装zookeeper

①上传,解压zookeeper-3.4.6.tar.gz。

②进入conf目录,修改配置文件

这里写图片描述

因为是上传在root目录下,还需要赋予zookeeper目录hadoop权限

[root@pc1 app]# chown -R hadoop:hadoop zookeeper

③修改数据目录和日志目录

这里写图片描述

这里写图片描述

④创建数据目录和日志目录

这里写图片描述

⑤创建文件 myid

进入 zkdata 文件夹,创建文件 myid ,填入 1 。这里写入的 1 ,是在 zoo.cfg 文本中的 server.1 中的 1 。
这里写图片描述

⑥添加环境变量

这里写图片描述

⑦分发到pc2,pc3节点

这里写图片描述

⑧在pc2,pc3上重复④⑤⑥步骤

⑨在主节点pc1上启动所有节点的zookeeper,查看状态和jps

这里写图片描述

这里写图片描述

这里写图片描述

3.安装配置hadoop
①上传,解压,重命名

②修改配置文件

core-site.xml

这里写图片描述

hadoop-env.sh

这里写图片描述

hdfs-site.xml

<configuration>
    <property>
                <name>dfs.replication</name>
                <value>3</value> < 数据块副本数3 >
        </property>
    <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
    <property>
                <name>dfs.permissions.enabled</name>
                <value>false</value>< 权限默认配置为false >
        </property>
    <property>
                <name>dfs.nameservices</name>
                <value>cluster1</value>
                < 命名空间,它的值与fs.defaultFS的值要对应,namenode高可用之后有两个namenodecluster1是对外提供的统一入口>
        </property>
    <property>
                <name>dfs.ha.namenodes.cluster1</name>
                <value>pc1,pc2</value>
                < 指定 nameServicecluster1 时的nameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.cluster1.pc1</name>
                <value>pc1:9000</value>< pc1 http地址>
        </property>
        <property>
                <name>dfs.namenode.http-address.cluster1.pc1</name>
                <value>pc1:50070</value>< pc1 http地址>
        </property>
    <property>
                <name>dfs.namenode.rpc-address.cluster1.pc2</name>
                <value>pc2:9000</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.cluster1.pc2</name>
                <value>pc2:50070</value>
        </property>
    <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>< 启动故障自动恢复>
        </property>
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://pc1:8485;pc2:8485;pc3:8485/cluster1</value>
        </property>
    <property>
                <name>dfs.client.failover.proxy.provider.cluster1</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>< 指定 cluster1 出故障时,哪个实现类负责执行故障切换>
        </property>
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/home/hadoop/data/journaldata/jn</value>
                < 指定JournalNode集群在对nameNode的目录进行共享时,自己存储数据的磁盘路径 >
        </property>
    <property>
                <name>dfs.ha.fencing.methods</name>
                <value>shell(/bin/true)</value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
    <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>10000</value>< 脑裂默认配置>
        </property>
        <property>
                <name>dfs.namenode.handler.count</name>
                <value>100</value>
        </property>
</configuration>

slaves

这里写图片描述

mapred-site.xml

[hadoop@pc1 hadoop]$ vi mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <指定运行mapreduce的环境是Yarn,与hadoop1不同的地方>
</configuration>

yarn-site.xml

[hadoop@pc1 hadoop]$ vi yarn-site.xml
<configuration>
<property>
    <name>yarn.resourcemanager.connect.retry-interval.ms</name>
    <value>2000</value>
</property>
< 超时的周期>
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>
< 打开高可用>
<property>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<启动故障自动恢复>
<property>
    <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
    <value>true</value>
</property>

<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarn-rm-cluster</value>
</property>
<给yarn cluster 取个名字yarn-rm-cluster>
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>
<给ResourceManager 取个名字 rm1,rm2>
<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>pc1</value>
</property>
<配置ResourceManager rm1 hostname>
<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>pc2</value>
</property>
<配置ResourceManager rm2 hostname>
<property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
</property>
<启用resourcemanager 自动恢复>
<property>
    <name>yarn.resourcemanager.zk.state-store.address</name>
    <value>pc1:2181,pc2:2181,pc3:2181</value>
</property>
<配置Zookeeper地址>
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>pc1:2181,pc2:2181,pc3:2181</value>
</property>
<配置Zookeeper地址>
<property>
    <name>yarn.resourcemanager.address.rm1</name>
    <value>pc1:8032</value>
</property>
< rm1端口号>
<property>
    <name>yarn.resourcemanager.scheduler.address.rm1</name>
    <value>pc1:8034</value>
</property>
< rm1调度器的端口号>
<property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>pc1:8088</value>
</property>
< rm1 webapp端口号>
<property>
    <name>yarn.resourcemanager.address.rm2</name>
    <value>pc2:8032</value>
</property>
< rm2端口号>
<property>
    <name>yarn.resourcemanager.scheduler.address.rm2</name>
    <value>pc2:8034</value>
</property>
< rm2调度器的端口号>
<property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>pc2:8088</value>
</property>
< rm2 webapp端口号>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<执行MapReduce需要配置的shuffle过程>
</configuration>

③添加环境变量

这里写图片描述

④向其它节点分发hadoop文件,并添加相应节点的环境变量

[hadoop@pc1 app]$ deploy.sh hadoop /home/hadoop/app/ slave

四、启动集群

1.启动所有节点的zookeeper进程

[hadoop@pc1 app]$runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" all

2.启动所有节点的journalnode进程

[hadoop@pc1 app]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode" all

3.在主节点pc1格式化并启动namenode。

[hadoop@pc1 hadoop]$ bin/hdfs namenode -format //格式化namenode
[hadoop@pc1 hadoop]$ bin/hdfs zkfc -formatZK //格式化高可用
[hadoop@pc1 hadoop]$ bin/hdfs namenode  //启动namenode

4.同时在备节点pc2同步数据

[hadoop@pc2 hadoop]$ bin/hdfs namenode -bootstrapStandby

5.同步数据结束后,在pc1按Ctrl+z结束namenode进程,然后关闭所有节点journalnode

[hadoop@pc1 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh stop journalnode" all

6.以上步骤成功执行,一键启动hdfs相关进程

[hadoop@pc1 hadoop]$ sbin/start-dfs.sh

这里写图片描述

7.启动yarn
主节点:

[hadoop@pc1 hadoop]$ sbin/start-yarn.sh

这里写图片描述

其它节点:

[hadoop@pc2 hadoop]$ sbin/yarn-daemon.sh start resourcemanager

这里写图片描述

8.检查resourcemanager的状态

[hadoop@pc1 hadoop]$ bin/yarn rmadmin -getServiceState rm1
[hadoop@pc1 hadoop]$ bin/yarn rmadmin -getServiceState rm2

这里写图片描述

9.在web中查看
在本地浏览器中输入连接
pc1:57770 //hdfs
pc2:50070
pc1:8088 //yarn
pc2:8088

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zoeyen_/article/details/78935707