目录
启动三台机器,并为克隆的两台机器修改相应名称和IP,以及检测内外网,修改完后重启(init 6),使主机名生效
修改主机(Windows)的hosts文件(不修改无法用主机名登录)
打开已创建好的centOS虚拟机
-
配置网络
1.vi 打开网络配置文件
2.修改配置文件
3.重启网络
-
测试网络(内网、外网都要测试)
- 修改主机名和映射
1.修改主机名(两种方法)
第一种
第二种
使用命令hostnamectl set-hostname master1-1(主机名),并用bash生效
2.映射(因为考试时要求是三台虚拟机,映射都要写,另外两台虚拟机的IP在克隆完master1-1时要修改)
-
关机并克隆
如上图操作在克隆一台虚拟机slave1-2
-
启动三台机器,并为克隆的两台机器修改相应名称和IP,以及检测内外网,修改完后重启(init 6),使主机名生效
-
重启后连接xshell(三台虚拟机都要连接)
-
回到master1-1,下载lrzsz,传输文件(两种)
- 第一种
按照要求:在/usr/local/src/下新建文件夹h3cu,此文件夹用于存放传输的文件
使用rz命令在h3cu下传输文件
按住ctrl选择以下包,点击打开
传输时乱码或毫无动静,则取消后再传一次
文件传输成功
第二种
打开xftp并连接
- 将传输的包分别解压到相应位置,并修改名称
-
配置环境变量
-
(环境变量配置错误后生效,许多命令无法使用,则输入export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin ,使其环境变量可修改)
-
Source一下使环境变量生效
检查Java版本,检测环境变量是否生效
ssh免密登录
查看是否已安装ssh服务
使用yum进行安装ssh服务
查看ssh进程
生成密钥
分发密钥
检验登录
配置zookeeper
复制并改名
编辑文件
建相关文件夹
在/usr/local/src/zookeeper/data下编辑myid
分发jdk
分发zookeeper
分发环境变量
在克隆的机器里source一下,并检查Java
分别到克隆的机器更改myid
配置Hadoop
hadoop-env.sh
core-site.xml
<configuration>
<!-- 指定 hdfs 的 nameservice 为 mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<!-- 指定 zookeeper 地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master1-1:2181,slave1-1:2181,slave1-2:2181</value>
</property>
<!-- hadoop 链接 zookeeper 的超时时长设置 -->
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>30000</value>
<description>ms</description>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- journalnode 集群之间通信的超时时间 -->
<property>
<name>dfs.qjournal.start-segment.timeout.ms</name>
<value>60000</value>
</property>
<!--指定 hdfs 的 nameservice 为 mycluster,需要和 core-site.xml 中的保持一致
dfs.ha.namenodes.[nameservice id]为在 nameservice 中的每一个 NameNode 设置唯一标示
符。配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。
如果使用"mycluster"作为 nameservice ID,并且使用"master"和"slave1"作为 NameNodes 标
示符 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- mycluster 下面有两个 NameNode,分别是 master,slave1 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>master1-1,slave1-1</value>
</property>
<!-- master 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.master1-1</name>
<value>master1-1:9000</value>
</property>
<!-- slave1 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.slave1-1</name>
<value>slave1-1:9000</value>
</property>
<!-- master 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.master1-1</name>
<value>master1-1:50070</value>
</property>
<!-- slave1 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.slave1-1</name>
<value>slave1-1:50070</value>
</property>
<!-- 指定 NameNode 的 edits 元数据的共享存储位置。也就是 JournalNode 列表
该 url 的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
journalId 推荐使用 nameservice,默认端口号是:8485 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master1-1:8485;slave1-1:8485;slave1-2:8485/mycluster</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>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/tmp/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/tmp/data</value>
</property>
<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/tmp/journal</value>
</property>
<!-- 开启 NameNode 失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 启用 webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- 配置 sshfence 隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
<value>60000</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<!-- 指定 mr 框架为 yarn 方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定 mapreduce jobhistory 地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master1-1:10020</value>
</property>
<!-- 任务历史服务器的 web 地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master1-1:19888</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 开启 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-1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1-1</value>
</property>
<!-- 指定 zk 集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master1-1:2181,slave1-1:2181,slave1-2:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</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>
<!-- 启用自动恢复 -->
<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>
</configuration>
Slaves
建立相关文件
分发Hadoop
启动zookeeper(三台都要关闭)
关闭防火墙(顺序:1.关闭防火墙 2.禁用防火墙 3.查看防火墙状态)
三台机器先启动再检查状态(顺序不能乱)
启动
检查状态(两个follwer,一个leader)
初始化(顺序不能乱)
初始化HA在zookeeper中的状态(master1-1)
启动journalnode进程(三台机器)
初始化namenode(master1-1)
状态为0表示成功
启动Hadoop
查看进程(三台)
分发tmp文件
在slave1-1下启动resourcemanager和namenode进程
查看jps(master1-1和slave1-1)
修改主机(Windows)的hosts文件(不修改无法用主机名登录)
两种方法:1.DOS命令修改 2.图像界面下修改权限(若无权限无法保存)
- win+r打开cmd
按ctrl+shift+回车进入管理员界面
进入目录,并用记事本打开hosts
修改并保存
- 进入C:\Windows\System32\drivers\etc目录下找到hosts文件
更改hosts文件的属性,使其可以修改内容
右击——属性
安全——编辑
添加
高级
编辑文件
打开网页
十八、杀死active的namenode
刷新页面
重启namenode
刷新页面(active变为standby)
至此HadoopHA部署完成