赞
踩
本文通过配置hadoop相关文件实现HDFS、YARN的集群以及高可用。其他例如:队列配置、simple安全认证等见我的其他文章。
队列配置:Hadoop(3.3.1): Capacity Scheduler:通过设置资源队列来满足不同业务之间的资源隔离、队列的弹性以及队列权限simple安全认证:Authentication for Hadoop(3.3.1) HTTP web-consoles : Hadoop的simple认证 不是银弹
三个节点的集群规划
注意:
因为 ZKFC 需要监控 NameNode 服务,从而完成故障自动转移,因此 ZKFC 需要和 NameNode 在同一台主机,如果它们不在同一台主机,那么 ZKFC 和 NameNode 可能出现网络故障,从而导致无法进行有效监控。
配置概述:
hadoop-env.sh:配置jdk环境变量
core-site.xml: 1. 指定hdfs的访问入口,namenode的访问入口;
2. 临时文件
hdfs-site.xml 1. 指定nn管理数据的存储目录
2. 指定dn数据存储的存储目录
3. 指定数据存储副本个数
4. 指定snn运行节点地址,和nn不同节点
mapred-site.xml 1.指定资源调用框架为yarn
yarn-site.xml 1.指定snn节点
2.指定Yarn集群为mr程序提供shuffle服务
workers 1.指定datanode节点
环境变量:
配置环境变量
/etc/profile
export HADOOP_HOME=${hadoop-3.3.1_home}
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop version
cd ${hadoop-3.3.1_home}/etc/hadoop
vi hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_73
core-site下有这些核心配置
- HA相关配置:nameservice、journalnode、zk等
- hdfs的权限检查、hadoop的临时路径等
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定hdfs的访问入口:1.分布式可以配置:hdfs://hadoop01:9000;
2.高可用中两个namenode:这里配置的代表两个namenode,nameservice 组名(访问时不一定是谁) -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>10.0.8.31:18127</value>
</property>
<property>
<name>hadoop.zk.address</name>
<value>10.0.8.31:18127</value>
</property>
<!--HA 相关配置-->
<property>
<name>ha.zookeeper.auth</name>
<value>@/uoms/app/hadoop-3.3.1/etc/hadoop/secret/zk-auth</value>
</property>
<property>
<name>hadoop.zk.auth</name>
<value>@/uoms/app/hadoop-3.3.1/etc/hadoop/secret/zk-auth</value>
</property>
<property>
<name>hadoop.zk.acl</name>
<value>@/uoms/app/hadoop-3.3.1/etc/hadoop/secret/zk-acl</value>
</property>
<property>
<name>ha.zookeeper.acl</name>
<value>@/uoms/app/hadoop-3.3.1/etc/hadoop/secret/zk-acl</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/uoms/appData/hadoop/journalnode</value>
<description>journalnode服务器存储目录</description>
</property>
<!-- 是否在HDFS中开启权限检查,默认为true-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!-- hadoop文件系统依赖的基本配置,很多配置路径都依赖它 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/uoms/appData/hadoop/tmp</value>
</property>
</configuration>
hdfs-site.xml主要配置了HDFS的一些功能
1.基础配置:namenode 、journalnode、datanode的数据存储目录、权限检查关闭、
2. HDFS的HA配置:namenodes相关:nameservices、端口、journalnode元数据存储位置,开启 NameNode 失败自动切换 (active的切换)等功能
3. Namenode向JournalNode发起的ipc连接请求的重试间隔时间和重试次数
4. 客户端对HDFS操作时,连接到ANN的方式
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 当为true时,namenode连接datanode的地址必须解析成主机名。 -->
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
<description>关闭权限检查</description>
</property>
<!--指定 hdfs 的 nameservice 为 mycluster,需要和 core-site.xml 中保持一致-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
<description>服务的逻辑名称</description>
</property>
<!-- mycluster 下面有两个 NameNode,分别是 nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
<description>服务中每个NameNode的唯一标识符</description>
</property>
<!-- 两个nn的http和rpc接口 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>10.0.8.31:18136</value>
<description>nn1的NameNode监听的标准RPC地址</description>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>10.0.8.32:18136</value>
<description>nn2的NameNode监听的标准RPC地址</description>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>10.0.8.31:18137</value>
<description>nn1的NameNode监听的标准HTTP地址</description>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>10.0.8.32:18137</value>
<description>nn2的NameNode监听的标准HTTP地址</description>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>hdfs文件副本数</description>
</property>
<!--配置namenode 、journalnode、datanode的数据存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/uoms/appData/hadoop/namenode</value>
<description>namenode数据地址</description>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/uoms/appData/hadoop/journalnode</value>
<description>journalnode服务器存储目录</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/uoms/appData/hadoop/datanode</value>
<description>datanode数据地址</description>
</property>
<!-- ========================================== -->
<!-- HA相关 -->
<!-- 指定 NameNode 的 edits 元数据在 JournalNode 上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://10.0.8.34:18138;10.0.8.31:18138;10.0.8.32:18138/mycluster</value>
<description>
该配置的机器是journalnode启动的机器。标识NameNode将在其中写入/读取编辑内容的JN组的URI,指定NameNode元数据在JournalNode上的存放位置
QJM方式是采用journalnode来共享edits文件
</description>
</property>
<!-- JournalNode HTTP服务器监听的地址和端口。如果端口为0,那么服务器将在自由端口启动。-->
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:18139</value>
</property>
<!-- JournalNode HTTPS服务器监听的地址和端口。如果端口为0,那么服务器将在自由端口启动。 -->
<property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:18138</value>
</property>
<!--Namenode向JournalNode发起的ipc连接请求的重试间隔时间和重试次数-->
<property>
<name>ipc.client.connect.max.retries</name>
<value>100</value>
<description>Indicates the number of retries a client will make to establish
a server connection.
</description>
</property>
<property>
<name>ipc.client.connect.retry.interval</name>
<value>10000</value>
<description>Indicates the number of milliseconds a client will wait for
before retrying to establish a server connection.
</description>
</property>
<!-- 开启 NameNode 失败自动切换 (active的切换)-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置隔离机制(防止脑裂)方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
<description>
这些列表将用于在故障转移期间隔离Active NameNode
配置隔离机制,即同一时刻只能有一台服务器对外响应
该sshfence选项SSH到目标节点,然后杀该服务的TCP端口上侦听的过程。
为了使该防护选项起作用,它必须能够在不提供密码的情况下SSH到目标节点。
因此,还必须配置dfs.ha.fencing.ssh.private-key-files
</description>
</property>
<!-- 使用 sshfence 隔离机制时需要 ssh 免登陆:即失效转移时使用的秘钥文件。 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/commonuser/.ssh/id_rsa</value>
<description>使用隔离机制时需要ssh无秘钥登录</description>
</property>
<!-- 客户端对HDFS操作时,连接到ANN的方式 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>访问代理类失败自动切换实现方式</description>
</property>
</configuration>
主要配置了一些yarn的功能:
1.基础配置:yarn的资源检查、内存和cpu等设置、
2. Yarn的HA相关:RM自动恢复、故障转移、rm相关ip/端口指定、zk、rm与ApplicationMaster、NodeManager通讯配置
3. nodemanager:失败重启、state目录、mapReduce等调度资源
<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- 基础配置 -->
<!-- ==================================== -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>是否在任务启动前检查实际资源是否足够</description>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>8</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>4</value>
<description>提交一个任务允许申请的最大cpu核数</description>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
<description>提交一个任务允许申请的最大内存</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
<description>虚拟内存使用率</description>
</property>
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>10</value>
<description>
application 最大的执行次数.
</description>
</property>
<!-- ==================================== -->
<!-- HA相关 -->
<!-- ==================================== -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
<description>开启rm的HA</description>
</property>
<property>
<description>启用RM Restart自动恢复功能</description>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--失败转移默认开启-->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
<description>开启故障转移</description>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>mycluster</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>10.0.8.34</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>10.0.8.31</value>
</property>
<!-- 指定 zk 集群地址:主备切换依赖于zk -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>10.0.8.31:18127</value>
</property>
<property>
<description>
用于resourcemanager状态存储(到zookeeper)的类,默认为org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore,
基于Hadoop文件系统的实现。还可以为org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore,
该类为基于ZooKeeper的实现
</description>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。-->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>10.0.8.34:18132</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>10.0.8.31:18132</value>
</property>
<!-- ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。-->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>10.0.8.34:18133</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>10.0.8.31:18133</value>
</property>
<!-- ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>10.0.8.34:18134</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>10.0.8.31:18134</value>
</property>
<!--ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。-->
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>10.0.8.34:18135</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>10.0.8.31:18135</value>
</property>
<!-- ==================================== -->
<!-- nodemanager相关设置 -->
<!-- ==================================== -->
<property>
<description>启用nodemanager Restart功能,默认false</description>
<name>yarn.nodemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<description>node manager可以保存state信息的本地文件系统目录</description>
<name>yarn.nodemanager.recovery.dir</name>
<value>/uoms/appData/hadoop/yarn/tmp/yarn-nm-recovery</value>
</property>
<property>
<description>明确设置yarn.nodemanager.address 端口号</description>
<name>yarn.nodemanager.address</name>
<value>${yarn.nodemanager.hostname}:18131</value>
</property>
<!-- 要运行 MapReduce 程序必须配置的附属服务,为shuffle提供资源调度 -->
<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>
</configuration>
安装包远程发送
scp -r hadoop-2.7.7 hadoop02:/opt/
scp -r hadoop-2.7.7 hadoop03:/opt/
1)启动zk (三台分别依次启动)
zkServer.sh start
2)三台分别启动journalnode QJM (hadoop内置的)(同步元数据的所以要先启动)
hadoop-daemon.sh start journalnode
3)格式化namenode 选择一个namenode节点
hadoop namenode -format
4)将hadoop01的元数据 远程发送到另一个namenode
scp -r /home/hadoop/data/hadoopdata/dfs hadoop02:/home/hadoop/data/hadoopdata
5)格式化zkfc
格式化的原因:使zkfc和zookeeper通信,在zookeeper中创建存储namenode状态信息的znode
在一个namenode上执行即可
a、删除所有无用的节点:
zkCli.sh
rmr /节点名
quit
b、格式化
hdfs zkfc -formatZK
Successfully created /hadoop-ha/bd1906 in ZK.
启动hdfs
start-dfs.sh 任意节点
启动yarn
其中一个rm节点启动
start-yarn.sh
另一个 resourcemanager单独启动 resourcemanager
yarn-daemon.sh start resourcemanager
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。