大数据平台系列:hadoop HDFS HA集群搭建

01 前言   

   hadoop是由Apache基金会所开发的一个分布式的大数据计算与存储平台,特点是:可靠性高、易扩展、计算高效与成本低。

   它有两个核心项目,其中HDFS负责数据存储,MapReduce负责分布式计算。本文主要讲解HDFS项目的HA架构搭建

   本文转自我个人的公众号:天目星    ,请大家多多关注。


一、使用的软件版本与架构图。

    linux:CentOS 7.5.1804

    hadoop:hadoop-3.2.0.tar.gz

    zookeeper:zookeeper-3.4.14.tar.gz

    java:jdk-8u201-linux-x64.rpm

    在之前的架构中,namenode是HDFS集群的单点故障所在,所以官方推出使用JournalNode来管理namenode的edit log,并自动切换两个namenode节点的状态(Standby/Active)

官方文档路径:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

使用三台主机搭建测试环境,角色如下

角色 namenode datanode journalnode zookeeper
node1 ×
node2
node3 ×

NameNode:负责管理fsimage(文件系统目录)与edits log(操作日志)

DataNode:负责具体数据块存储,并向NameNode发送Blockreport

JournalNode:负责管理主备节点的fsimage与edits一致性

zookeeper:负责NameNode主备状态监控与故障转移

二、安装

三台节点配置好hosts文件,并配置ssh免密登录

三台主机都需要配置,并拷贝密匙到其他两台主机$ ssh-keygen$ ssh-copy-id $hostname

依赖包:需要安装JDK,本例使用了RPM包安装

$ rpm -ivh jdk-8u201-linux-x64.rpm$ java -versionjava version "1.8.0_201"Java(TM) SE Runtime Environment (build 1.8.0_201-b09)Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

1、安装zookeeper

在三台节点中安装zookeeper,安装方式之前有说过,请参考ELK集群组件-kafka这篇文章的zookeeper安装步骤。

2、安装hadoop

在官网下载hadoop并解压至相应的路径$ tar xvf hadoop-3.2.0.tar.gz -C /opt$ mv /opt/hadoop-3.2.0 /opt/hadoop新建以下文件夹,用于hadoop相关角色的使用$ mkdir -p /opt/data/{datanode,journal,namenode,tmp}

3、配置hadoop

配置环境设置:hadoop-env.sh

$ cat >> hadoop-env.sh <<EOFexport JAVA_HOME=/usr/java/latestEOF

配置:core-site.xml

$ vim /opt/hadoop/etc/hadoop/core-site.xml<configuration>  <!-- 默认的文件系统名称 -->  <property>     <name>fs.defaultFS</name>     <value>hdfs://tkscluster</value>  </property>    <!-- TMP存放路径,如不配置namenode.dir与datanode.dir将存放此处 -->  <property>     <name>hadoop.tmp.dir</name>     <value>/opt/data/tmp</value>  </property>    <!-- 回收站文件保留时间 -->  <property>     <name>fs.trash.interval</name>     <value>1440</value>  </property>    <!-- 提供故障转移的zookeeper列表 -->  <property>     <name>ha.zookeeper.quorum</name>     <value>node1:2181,node2:2181,node3:2181</value>  </property></configuration>

配置:hdfs-site.xml

$ vim /opt/hadoop/etc/hadoop/hdfs-site.xml<configuration>  <!-- Hadoop 3.x HA Configuration -->  <!-- hdfs集群名称 -->   <property>     <name>dfs.nameservices</name>     <value>tkscluster</value>  </property>    <!-- 设置两个namenode节点 -->  <property>     <name>dfs.ha.namenodes.tkscluster</name>     <value>nn1,nn2</value>  </property>    <!-- namedoe的rpc地址 -->  <property>     <name>dfs.namenode.rpc-address.tkscluster.nn1</name>     <value>node1:9820</value>  </property>  <property>     <name>dfs.namenode.rpc-address.tkscluster.nn2</name>     <value>node2:9820</value>  </property>    <!-- namedoe的http地址 -->  <property>     <name>dfs.namenode.http-address.tkscluster.nn1</name>     <value>node1:9870</value>  </property>  <property>     <name>dfs.namenode.http-address.tkscluster.nn2</name>     <value>node2:9870</value>  </property>    <!-- journalNode的URI地址 -->  <property>     <name>dfs.namenode.shared.edits.dir</name>     <value>qjournal://node1:8485;node2:8485;node3:8485/tkscluster</value>  </property>    <!-- journalNode存放edits目录 -->  <property>     <name>dfs.journalnode.edits.dir</name>     <value>/opt/data/journal</value>  </property>    <!-- 用于dfs客户端连接活动namenode -->  <property>     <name>dfs.client.failover.proxy.provider.tkscluster</name>     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  </property>    <!-- 用于ha故障转移时使用ssh方式 -->  <property>     <name>dfs.ha.fencing.methods</name>     <value>sshfence</value>  </property>    <!-- ssh登录时使用的密匙,配合上一条配置 -->  <property>     <name>dfs.ha.fencing.ssh.private-key-files</name>     <value>/root/.ssh/id_rsa</value>  </property>   <!-- 启动HA故障自动切换 -->  <property>     <name>dfs.ha.automatic-failover.enabled</name>     <value>true</value>  </property>    <!-- 数据块副本的数量,按实际情况设置 -->  <property>     <name>dfs.replication</name>     <value>3</value>  </property>    <!-- namenode文件的存储路径 -->  <property>     <name>dfs.namenode.name.dir</name>     <value>/opt/data/namenode</value>  </property>    <!-- datanode的数据存储路径 -->  <property>     <name>dfs.datanode.data.dir</name>     <value>/opt/data/datanode</value>  </property>     <!-- 测试环境关闭了权限管理,如生产环境需开启 -->  <property>     <name>dfs.permissions.enabled</name>     <value>false</value>  </property>    <!-- datanode故障时的replace方式 -->  <property>    <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>    <value>false</value>  </property>    <!-- datanode故障时的replace策略 -->  <property>    <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>    <value>DEFAULT</value>  </property>    <!-- 支持文件append,主要是支持hbase -->  <property>    <name>dfs.support.append</name>    <value>true</value>  </property></configuration>

配置:workers

添加datanode节点角色列表

$ vim /opt/hadoop/etc/hadoop/workersnode2node3

3、启动hadoop

初始化HDFS 

先启动三个节点的journalnode进程$ /opt/hadoop/bin/hdfs --daemon start journalnode初始化namenode$ /opt/hadoop/bin/hdfs namenode -format初始化ZKFC$ /opt/hadoop/bin/hdfs zkfc -formatZK

配置HDFS启动脚本的权限

PS:以下两个脚本都需要添加

$ vim /opt/hadoop/sbin/start-dfs.sh$ vim /opt/hadoop/sbin/stop-dfs.sh 在配置文件以下段添加# defined.  e.g., HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs#HDFS_NAMENODE_USER=rootHDFS_DATANODE_USER=rootHDFS_JOURNALNODE_USER=rootHDFS_ZKFC_USER=root

准备开启HDFS服务

先关闭三个节点之前开启的journalnode进程,因ZKFC服务未启动$ /opt/hadoop/bin/hdfs --daemon stop journalnode启动HDFS$ /opt/hadoop/sbin/start-dfs.sh关闭HDFS$ /opt/hadoop/sbin/stop-dfs.sh

启动后的状态检查

在node1使用java的jps命令$ jps43618 QuorumPeerMain  #zk服务69988 NameNode  #namenode服务70615 JournalNode  #journalnode服务71067 DFSZKFailoverController  #ZKFC服务71628 Jps在node2使用jps命令查看$ jps43324 QuorumPeerMain  #zk服务64563 NameNode  #namenode服务70654 JournalNode  #journalnode服务71342 DFSZKFailoverController  #ZKFC服务65726 DataNode  #datanode服务71642 Jps使用jps查询node3的情况  43214 QuorumPeerMain  #zk服务70512 JournalNode  #journalnode服务64365 DataNode  #datanode服务71428 Jps

登录网站查看状态

http://192.168.159.45:9870/

请关注我的微信公众号

猜你喜欢

转载自blog.csdn.net/Gordon_luo/article/details/93459908