一、准备工作
准备大数据集群 (三台或者四台服务器,推荐4台) 由于电脑内存不足 本人测试的时候只搭建3台
三台服务器的主机名分别是:qyl01,qyl02,qyl03
对以上三台服务器需要做一下操作,这些准备都是为了将来搭建hadoop集群做准备的
1、修改各服务器的主机名
vim /etc/sysconfig/network
2、配置各服务器的IP
3、配置各服务器的主机映射
vim /etc/hosts
4、添加hadoop用户,并且添加sudoer权限
添加用户 adduser username
加入密码 passwd username
修改用户权限 vim /etc/sudoers
5、关闭防火墙/关闭selinux
查看防火墙状态: service iptales status
关闭防火墙: service iptables stop
开机自动关闭防火墙 : chkconfig --del ipables 或者 chkconfig ipables off
关闭selinux:修改/etc/selinux/config配置文件中的 SELINUX=disabled
6、更改系统启动级别为3
vim /etc/inittab
7、安装JDK
1、 上传 jdk-8u73-linux-x64.tar.gz
2、 解压到/usr/local 目录下tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local
3、 配置环境变量a) vi /etc/profileb) 在最后加入两行:export JAVA_HOME=/usr/local/jdk1.8.0_export PATH=$PATH:$JAVA_HOME/binc) 保存退出
4、 source /etc/profile5、 检测是否安装成功,输入命:java -version
8、三台服务器做时间同步
ntpdate ntp1.aliyun.com
9、三台服务器配置SSH
1、输入命令 ssh-keygen 生产公钥文件
2、输入命令ssh-copy-id qyl02 发送公钥到qyl02中去
3、每个节点都操作一遍
二、搭建hadoop ha集群
1、集群的规划
| qyl01 | qyl02 | qyl03 |
hdfs | namenode | namenode | |
| zkfc | zkfc | |
| datanode | datanode | datanode |
| journalnode | journalnode | journalnode |
yarn | resourcemanager | resouragemanage | |
| nodemanager | nodemanager | nodemanager |
zookeeper | quorumpeermain | quorumpeermain | quorumpeermain |
2、版本的选择
1) hadoop版本的选择 : hadoop-2.7.6
2)zookeeper版本的选择:3.4.10 (zookeeper的搭建在下篇文章进行介绍)
3) jdk版本选择 : jdk1.8
3、具体步骤
一、上传安装包,并解压到相关目录
上传命令 :put F:/BaiduNetdiskDownload/hadoop-2.7.6.tar.gz
解压命令 : tar -zxvf hadoop-2.7.6.tar.gz -c /home/qyl/apps
二、修改配置文件
1、hadoop-env.sh
修改
export JAVA_HOME=/home/qyl/apps/jdk1.8.0_73
2、core-site.xml
<!-- 指定 hdfs 的 访问入口 namenode的入口 这里的qyl2018 就相当于两个namenode的组名-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://qyl2018/</value>
</property>
<!-- 指定 hadoop 数据存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/hadoopdata/</value>
</property>
<!-- 指定 zookeeper 集群访问地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
3、hdfs-site.xml
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定 hdfs 两个namenode的 nameservice 为 bd1807,需要和 core-site.xml 中保持一致-->
<property>
<name>dfs.nameservices</name>
<value>bd1807</value>
</property>
<!-- qyl2018 下面有两个 NameNode,分别是 nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.qyl2018</name>
<value>nn1,nn2</value>
</property>
<!-- nn1 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.qyl2018.nn1</name>
<value>qyl01:9000</value>
</property>
<!-- nn1 的 http 通信地址 web -->
<property>
<name>dfs.namenode.http-address.qyl2018.nn1</name>
<value>qyl0101:50070</value>
</property>
<!-- nn2 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.qyl2018.nn2</name>
<value>qyl02:9000</value>
</property>
<!-- nn2 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.qyl2018.nn2</name>
<value>qyl02:50070</value>
</property>
<!-- 指定 NameNode 的 edits 元数据在 JournalNode 上的存放位置 端口8485-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://qyl01:8485;qyl02:8485;qyl03:8485/qyl2018</value>
</property>
<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/qyl/data/hadoopdata/journaldata</value>
</property>
<!-- 开启 NameNode 失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<!-- 此处配置在安装的时候切记检查不要换行-->
<property>
<name>dfs.client.failover.proxy.provider.bd1807</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>
<!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/qyl/.ssh/id_rsa</value>
</property>
<!-- 配置 sshfence 隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
4、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>qyl01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>qyl02</value>
</property>
<!-- 指定 zk 集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>qyl01:2181,qyl02:2181,qyl03:2181</value>
</property>
<!-- 要运行 MapReduce 程序必须配置的附属服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启 YARN 集群的日志聚合功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- YARN 集群的聚合日志最长保留时长 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</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>
5、mapred-site.xml
<!-- 指定 mr 框架为 yarn 方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 设置 mapreduce 的历史服务器地址和端口号 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>qyl03:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>qyl03:19888</value>
</property>
6、slaves
<!--指定从节点-->
qyl01
qyl02
qyl03
三、配置环境变量
vim /etc/profile
四、将hadoop的安装包远程发送到其他节点
scp -r hadoop-2.7.6 qyl02:/home/qyl/apps/
scp -r hadoop-2.7.6 qyl03:/home/qyl/apps/
五、开始启动集群
1、先启动journalnode
qyl01 hadoop-daemon.sh start journalnode
qyl02 hadoop-daemon.sh start journalnode
qyl03 hadoop-daemon.sh start journalnode
2、格式化namenode 在一个namenode上执行格式化命令
在qyl01上执行: hadoop namenode -format
3、将qyl01上的namenode的相关数据文件发送到另一个namenode节点上
scp -r dfs qyl02:/home/qyl/data/hadoopdata/
4、先启动zookeeper(在每个节点上)
zkServer.sh start
5、格式化zkfc 选择一个namenode的节点
hdfs zkfc -formatZK
成功的标志: successfully created /hadoop-ha/qyl2018 in ZK
6、启动集群
启动hdfs
start-dfs.sh 任意节点执行
启动yarn
start-yarn.sh 最好在resourcemanager的节点上
注意:
单独启动zkfc的命令
hadoop-daemon.sh start zkfc
六、hadoop ha集群的验证
先验证hdfs的主备切换:
namenode 2个
http://qyl01:50070 http://qyl02:50070
yarn的测试
http://qyl01:8088
http://qyl02:8088
mr 切换yarn的主节点
关机:
先关闭集群:
1)关闭hdfs
stop-dfs.sh
2)关闭yarn
stop-yarn.sh
3)关闭zk
zkServer.sh stop
再关机
注意:在集群启动时,查看网页有两个namenode的状态都为standby
可以使用一下命令进行切换成active
hadoop haadmin -transitionToActive --forcemanual nn1