阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop 2.6.0 HA高可用集群配置详解(二)

30次阅读
没有评论

共计 10029 个字符,预计需要花费 26 分钟才能阅读完成。

Zookeeper 集群安装

Zookeeper 是一个开源分布式协调服务,其独特的 Leader-Follower 集群结构,很好的解决了分布式单点问题。目前主要用于诸如:统一命名服务、配置管理、锁服务、集群管理等场景。大数据应用中主要使用 Zookeeper 的集群管理功能。

本集群使用 zookeeper-3.4.5-cdh5.7.1 版本。首先在 Hadoop-slave1 节点安装 Zookeeper,方法如下:

// 新建目录

$ mkdir app/cdh

// 解压 zookeeper 安装包

$ tar -xvf zookeeper-3.4.5-cdh5.7.1.tar.gz -C app/cdh/

// 删除安装包

$ rm -rf zookeeper-3.4.5-cdh5.7.1.tar.gz

// 配置用户环境变量

$ vim .bash_profile

export ZOOKEEPER_HOME=/home/hadoop/app/cdh/zookeeper-3.4.5-cdh5.7.1

export PATH=$PATH:$ZOOKEEPER_HOME/bin

// 使修改的环境变量生效

$ source.bash_profile

// 修改 zookeeper 的配置文件

$ cd app/cdh/zookeeper-3.4.5-cdh5.7.1/conf/

$ cp zoo_sample.cfg zoo.cfg

$ vim zoo.cfg

# 客户端心跳时间 (毫秒)

tickTime=2000

# 允许心跳间隔的最大时间

initLimit=10

# 同步时限

syncLimit=5

# 数据存储目录

dataDir=/home/hadoop/app/cdh/zookeeper-3.4.5-cdh5.7.1/data

# 数据日志存储目录

dataLogDir=/home/hadoop/app/cdh/zookeeper-3.4.5-cdh5.7.1/data/log

# 端口号

clientPort=2181

# 集群节点和服务端口配置

server.1=hadoop-slave1:2888:3888

server.2=hadoop-slave2:2888:3888

server.3=hadoop-slave3:2888:3888

# 以下为优化配置

# 服务器最大连接数,默认为 10,改为 0 表示无限制

maxClientCnxns=0

# 快照数

autopurge.snapRetainCount=3

# 快照清理时间,默认为 0

autopurge.purgeInterval=1

// 创建 zookeeper 的数据存储目录和日志存储目录

$ cd ..

$ mkdir -p data/log

// 在 data 目录中创建一个文件 myid,输入内容为 1

$ echo "1" >> data/myid

// 修改 zookeeper 的日志输出路径 (注意 CDH 版与原生版配置文件不同)

$ vim libexec/zkEnv.sh

if ["x${ZOO_LOG_DIR}" = "x" ]

then

   ZOO_LOG_DIR="$ZOOKEEPER_HOME/logs"

fi

if ["x${ZOO_LOG4J_PROP}" = "x" ]

then

   ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

fi

// 修改 zookeeper 的日志配置文件

$ vim conf/log4j.properties

zookeeper.root.logger=INFO,ROLLINGFILE

// 创建日志目录

$ mkdir logs

将 hadoop-slave1 节点上的 Zookeeper 目录同步到 hadoop-slave2 和 hadoop-slave3 节点,并修改 Zookeeper 的数据文件。此外,不要忘记设置用户环境变量。// 在 hadoop-slave1 中将 zookeeper 目录复制到其它节点

$ cd ~

$ scp -r app/cdh/zookeeper-3.4.5-cdh5.7.1hadoop-slave2:/home/hadoop/app/cdh

$ scp -r app/cdh/zookeeper-3.4.5-cdh5.7.1 hadoop-slave3:/home/hadoop/app/cdh

// 在 hadoop-slave2 中修改 data 目录中的 myid 文件

$ echo "2" >app/cdh/zookeeper-3.4.5-cdh5.7.1/data/myid

// 在 hadoop-slave3 中修改 data 目录中的 myid 文件

$ echo "3" >app/cdh/zookeeper-3.4.5-cdh5.7.1/data/myid

最后,在安装了 Zookeeper 的各节点上启动 Zookeeper,并查看节点状态,方法如下:// 启动

$ zkServer.sh start

// 查看状态

$ zkServer.sh status

// 关闭

$ zkServer.sh stop
Hadoop HA 配置
// 在 hadoop-master1 节点解压 hadoop 安装包
$ tar-xvf hadoop-2.6.0-cdh5.7.1.tar.gz -C /home/hadoop/app/cdh/

// 删除安装包
$ rmhadoop-2.6.0-cdh5.7.1.tar.gz

// 修改 hadoop-env.sh 文件
$ cd/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/etc/hadoop

$ vimhadoop-env.sh
exportJAVA_HOME=/home/hadoop/app/jdk1.7.0_79
// 配置 core-site.xml 文件
$ vim core-site.xml

<configuration>
  <!-- 指定 hdfs 的 nameservices 名称为 mycluster,与 hdfs-site.xml 的 HA 配置相同 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
  </property>
	
  <!-- 指定缓存文件存储的路径 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/data/tmp</value>
  </property>

  <!-- 配置 hdfs 文件被永久删除前保留的时间(单位:分钟),默认值为 0 表明垃圾回收站功能关闭 -->
  <property>
    <name>fs.trash.interval</name>
    <value>1440</value>
  </property>
  
  <!-- 指定 zookeeper 地址,配置 HA 时需要 -->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop-slave1:2181,hadoop-slave2:2181,hadoop-slave3:2181</value>
  </property>
</configuration>
// 配置 hdfs-site.xml 文件
$ vim hdfs-site.xml

<configuration>
  <!-- 指定 hdfs 元数据存储的路径 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/data/namenode</value>
  </property>

  <!-- 指定 hdfs 数据存储的路径 -->
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/data/datanode</value>
  </property>
  
  <!-- 数据备份的个数 -->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>

  <!-- 关闭权限验证 -->
  <property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
  </property>
  
  <!-- 开启 WebHDFS 功能(基于 REST 的接口服务)-->
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>
  
  <!-- ////////////// 以下为 HDFS HA 的配置 ////////////// -->
  <!-- 指定 hdfs 的 nameservices 名称为 mycluster -->
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>

  <!-- 指定 mycluster 的两个 namenode 的名称分别为 nn1,nn2 -->
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>

  <!-- 配置 nn1,nn2 的 rpc 通信端口 -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>hadoop-master1:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>hadoop-master2:8020</value>
  </property>

  <!-- 配置 nn1,nn2 的 http 通信端口 -->
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>hadoop-master1:50070</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>hadoop-master2:50070</value>
  </property>

  <!-- 指定 namenode 元数据存储在 journalnode 中的路径 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop-slave1:8485;hadoop-slave2:8485;hadoop-slave3:8485/mycluster</value>
  </property>
  
  <!-- 指定 journalnode 日志文件存储的路径 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/data/journal</value>
  </property>

  <!-- 指定 HDFS 客户端连接 active namenode 的 java 类 -->
  <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>

  <!-- 配置隔离机制为 ssh -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>

  <!-- 指定秘钥的位置 -->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/hadoop/.ssh/id_rsa</value>
  </property>
  
  <!-- 开启自动故障转移 -->
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
</configuration>
// 配置 mapred-site.xml 文件
$ vim mapred-site.xml

<configuration>
  <!-- 指定 MapReduce 计算框架使用 YARN -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

  <!-- 指定 jobhistory server 的 rpc 地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop-master1:10020</value>
  </property>

  <!-- 指定 jobhistory server 的 http 地址 -->
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop-master1:19888</value>
  </property>

  <!-- 开启 uber 模式(针对小作业的优化)-->
  <property>
    <name>mapreduce.job.ubertask.enable</name>
    <value>true</value>
  </property>

  <!-- 配置启动 uber 模式的最大 map 数 -->
  <property>
    <name>mapreduce.job.ubertask.maxmaps</name>
    <value>9</value>
  </property>

  <!-- 配置启动 uber 模式的最大 reduce 数 -->
  <property>
    <name>mapreduce.job.ubertask.maxreduces</name>
    <value>1</value>
  </property>
</configuration>
// 配置 yarn-site.xml 文件
$ vim yarn-site.xml

<configuration>
  <!-- NodeManager 上运行的附属服务,需配置成 mapreduce_shuffle 才可运行 MapReduce 程序 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 配置 Web Application Proxy 安全代理(防止 yarn 被攻击)-->
  <property>
    <name>yarn.web-proxy.address</name>
    <value>hadoop-master2:8888</value>
  </property>
  
  <!-- 开启日志 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 配置日志删除时间为 7 天,- 1 为禁用,单位为秒 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>

  <!-- 修改日志目录 -->
  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/logs</value>
  </property>

  <!-- 配置 nodemanager 可用的资源内存 -->
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2048</value>
  </property>

  <!-- 配置 nodemanager 可用的资源 CPU -->
  <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>2</value>
  </property>
  
  <!-- ////////////// 以下为 YARN HA 的配置 ////////////// -->
  <!-- 开启 YARN HA -->
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>

  <!-- 启用自动故障转移 -->
  <property>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>

  <!-- 指定 YARN HA 的名称 -->
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarncluster</value>
  </property>

  <!-- 指定两个 resourcemanager 的名称 -->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>

  <!-- 配置 rm1,rm2 的主机 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop-master1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop-master2</value>
  </property>

  <!-- 配置 YARN 的 http 端口 -->
  <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>hadoop-master1:8088</value>
  </property>	
  <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>hadoop-master2:8088</value>
  </property>

  <!-- 配置 zookeeper 的地址 -->
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop-slave1:2181,hadoop-slave2:2181,hadoop-slave3:2181</value>
  </property>

  <!-- 配置 zookeeper 的存储位置 -->
  <property>
    <name>yarn.resourcemanager.zk-state-store.parent-path</name>
    <value>/rmstore</value>
  </property>

  <!-- 开启 yarn resourcemanager restart -->
  <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>

  <!-- 开启 yarn nodemanager restart -->
  <property>
    <name>yarn.nodemanager.recovery.enabled</name>
    <value>true</value>
  </property>

  <!-- 配置 nodemanager IPC 的通信端口 -->
  <property>
    <name>yarn.nodemanager.address</name>
    <value>0.0.0.0:45454</value>
  </property>
</configuration>
// 配置 slaves 文件
$ vimslaves
hadoop-slave1
hadoop-slave2
hadoop-slave3

// 创建配置文件中涉及的目录
$ cd/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/

$ mkdir-p data/tmp

$ mkdir-p data/journal

$ mkdir-p data/namenode

$ mkdir-p data/datanode

// 将 hadoop 工作目录同步到集群其它节点
$ scp-r /home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/hadoop-master2:/home/hadoop/app/cdh/
scp -r/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/ hadoop-slave1:/home/hadoop/app/cdh/
scp -r/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/ hadoop-slave2:/home/hadoop/app/cdh/
scp -r/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/ hadoop-slave3:/home/hadoop/app/cdh/

// 在集群各节点上修改用户环境变量
$ vim .bash_profile
export HADOOP_HOME=/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

// 使修改的环境变量生效
$ source.bash_profile

// 解决本地库文件不存在的问题
在 apache 官网下载 hadoop-2.6.0.tar.gz,解压后将 lib/native 下所有文件复制到 $HADOOP_HOME/lib/native 中。
Hadoop 集群的初始化
// 启动 zookeeper 集群(分别在 slave1、slave2 和 slave3 上执行)$ zkServer.shstart

// 格式化 ZKFC(在 master1 上执行)$ hdfszkfc -formatZK

// 启动 journalnode(分别在 slave1、slave2 和 slave3 上执行)$ hadoop-daemon.shstart journalnode

// 格式化 HDFS(在 master1 上执行)$ hdfsnamenode -format

// 将格式化后 master1 节点 hadoop 工作目录中的元数据目录复制到 master2 节点
$ scp-r app/cdh/hadoop-2.6.0-cdh5.7.1/data/namenode/*hadoop-master2:/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/data/namenode/

// 初始化完毕后可关闭 journalnode(分别在 slave1、slave2 和 slave3 上执行)$ hadoop-daemon.shstop journalnode

  • Hadoop 2.6.0 HA 高可用集群配置详解(一)
  • Hadoop 2.6.0 HA 高可用集群配置详解(二)
  • Hadoop 2.6.0 HA 高可用集群配置详解(三)

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计10029字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中