您的位置:首页 > 运维架构

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

2017-12-30 00:07 375 查看

一、集群规划

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高可用之后有两个namenode,cluster1是对外提供的统一入口>
</property>
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>pc1,pc2</value>
< 指定 nameService 是 cluster1 时的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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: