Hadoop集群节点规划与搭建
搭建多节点hadoop集群
1. 主机规划
编号 | 主机 | zookeeper | namenode | datanode | journalnode | resourcemanager |
---|---|---|---|---|---|---|
1 | master1 | 是 | 是 | 是 | 是 | |
2 | master2 | 是 | 是 | 是 | 是 | |
3 | slave1 | 是 | 是 | 是 | ||
4 | slave2 | 是 |
2. 关闭防火墙
-
查看防火墙状态:
systemctl status firewalld.service
-
关闭防火墙:
systemctl stop firewalld.service
-
禁用防火墙开机自启 :
systemctl disable firewalld.service
3. 配置ssh密码登录
-
在四台机器上执行
ssh-keygen -t rsa
,会在当前用户目录下的 .ssh文件夹下生成公钥和私钥 -
将master2,slave1,slave2的 id_rsa.pub复制副本,发送给master1
[hadoop@master2 ~]$ cp /root/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub.m2 [hadoop@master2 ~]$ scp /root/.ssh/id_rsa.pub.m2 master1:/root/.ssh
-
在master1上将创建authorized_keys ,追加密钥并授权
[hadoop@master2 ~]$ cat /root/.ssh/id_rsa.pub.* >> /root/.ssh/authorized_keys [hadoop@master2 ~]$ chmod 700 /root/.ssh/
-
将authorized_keys传输给master2, slave1 和 slave2(第一次传输需要输入密码)
-
登陆测试
[hadoop@master ~]$ ssh slave1
4. 安装zookeeper
-
解压zookeeper
-
进入zookeeper目录,创建data和logs文件夹
-
进入刚创建的data目录下,新建myid文件,并写入数字 ‘1’
-
进入conf目录下,复制zoo_simple.cfg为zoo.cfg
-
修改zoo.cfg
dataDir=${ZK_HOME}/data dataLogDir=${ZK_HOME}/logs server.1=master1:2888:3888 server.2=master2:2888:3888 server.3=slave1:2888:3888
-
分发zookeeper到其他节点,并且修改各个节点的myid
5. 安装hadoop
-
修改core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/src/hadoop/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>master1:2181,master2:2181,slave1:2181</value> </property> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>30000</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property>
-
修改hdfs-site.xml
<!--指定 hdfs 的 nameservice 为 mycluster,要和 core-site.xml 中的保持一致 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- mycluster 下面有两个 NameNode,分别是 master1,master2 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>master1,master2</value> </property> <!-- master 的 RPC 通信地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.master1</name> <value>master1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.master2</name> <value>master2:8020</value> </property> <!-- master 的 http 通信地址 --> <property> <name>dfs.namenode.http-address.mycluster.master1</name> <value>master1:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.master2</name> <value>master2:50070</value> </property> <!-- 指定 NameNode 的 edits 元数据的共享存储位置。也就是 JournalNode 列表,默认端口号是:8485 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master1:8485;master2:8485;slave1:8485/mycluster</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- 指定副本数 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 开启 NameNode 失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 --> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 指定 JournalNode 在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/src/hadoop/tmp/dfs/journal</value> </property> <!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <!-- 配置 sshfence 隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <!-- journalnode 集群之间通信的超时时间 --> <property> <name>dfs.qjournal.start-segment.timeout.ms</name> <value>60000</value> </property>
-
修改mapred-site.xml
<!-- 指定 mr 框架为 yarn 方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 指定 mapreduce jobhistory 地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>master1:10020</value> </property> <!-- 任务历史服务器的 web 地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master1:19888</value> </property>
-
修改yarn-site.xml
<!-- 开启 RM 高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定 RM 的 cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定 RM 的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定 RM 的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master1</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>master2</value> </property> <!-- 指定 zk 集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>master1:2181,master2:2181,slave1:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 启用自动恢复 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上 --> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property>
-
修改slaves
slave1 slave2
6. 启动集群(严格按照此步骤进行)
-
启动zookeeper集群
zkServer.sh start
-
先启动四台机器的journalnode
hadoop-daemons.sh start journalnode
-
格式化HDFS(必须关闭所有集群的防火墙)
hdfs namenode -format -
格式化ZKFC
hdfs zkfc -formatZK
-
在主节点上启动dfs与yarn
start-dfs.sh
start-yarn.sh
-
同步主节点的元数据
scp -r ${HADOOP_HOME}/tmp/dfs/name master2:${HADOOP_HOME}/tmp/dfs
-
在master2启动resourcemanager
yarn-daemon.sh start resourcemanager
-
在master2启动namenode
hadoop-daemon.sh start namenode
7. 查看节点情况
-
使用指令查看状态
hdfs haadmin -getServiceState master1
yarn rmadmin -getServiceState rm1
如有错误,欢迎私信纠正,谢谢支持!
本文来自博客园,作者:杨业壮,转载请注明原文链接:https://www.cnblogs.com/yangyezhuang/p/16896942.html