首页 > 其他分享 >hadoop部署2

hadoop部署2

时间:2023-03-10 23:45:03浏览次数:37  
标签:部署 zookeeper hadoop sh NameNode root localhost

 

完全分布式部署介绍

学习目标

完全分部式是真正利用多台Linux主机来进行部署Hadoop,对Linux机器集群进行规划,使得Hadoop各个模块分别 部署在不同的多台机器上。 能够了解完全分布式部署场景

二、NameNode HA+完全分布式部署

学习目标

能够了解HA+完成分布式部署场景 能够对HA+完全分布式部署架构规划 能够对HA+完全分布式部署进行配置 预备知识

1)什么是HA?

HA的意思是High Availability高可用,指当当前工作中的机器宕机后,会自动处理这个异常,并将工作无缝地转移到 其他备用机器上去,以来保证服务的高可用。 HA方式安装部署才是最常见的生产环境上的安装部署方式。Hadoop HA是Hadoop 2.x中新添加的特性,包括 NameNode HA 和 ResourceManager HA。因为DataNode和NodeManager本身就是被设计为高可用的,所以不用 对他们进行特殊的高可用处理。

2)NameNode HA切换实现方法

Hadoop2.X对NameNode进行一个抽象:NameService 一个NameService下面有两个NameNode,分别处于Active 和Standby状态。 通过Zookeeper进行协调选举,确保只有一个活跃的NameNode。 一旦主(Active)宕掉,standby会切换成Active。 作为一个ZK集群的客户端,用来监控NN的状态信息。每个运行NN的节点必须要运行一个zkfc。

zkfc提供以下功能:

Health monitoring

zkfc定期对本地的NN发起health-check的命令,如果NN正确返回,那么这个NN被认为是OK的。否则被认为是失效 节点。

ZooKeeper session management

当本地NN是健康的时候,zkfc将会在zk中持有一个session。如果本地NN又正好是active的,那么zkfc还有持有一 个"ephemeral"的节点作为锁,一旦本地NN失效了,那么这个节点将会被自动删除。

ZooKeeper-based election

如果本地NN是健康的,并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁,一旦成功,那么它 就需要执行Failover,然后成为active的NN节点。Failover的过程是:第一步,对之前的NN执行fence,如果需要的 话。第二步,将本地NN转换到active状态。

3)NameNode HA数据共享方法

Namenode主要维护两个文件,一个是fsimage,一个是editlog。 fsimage保存了最新的元数据检查点,包含了整个HDFS文件系统的所有目录和文件的信息。对于文件来说包括了数 据块描述信息、修改时间、访问时间等;对于目录来说包括修改时间、访问权限控制信息(目录所属用户,所在组) 等。 editlog主要是在NameNode已经启动情况下对HDFS进行的各种更新操作进行记录,HDFS客户端执行所有的写操作 都会被记录到editlog中。 上面在Active Namenode与StandBy Namenode之间的绿色区域就是JournalNode,当然数量不一定只有1个,作用 相当于NFS共享文件系统,Active Namenode往里写editlog数据,StandBy再从里面读取数据进行同步。 两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的 NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取 JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时, 命名空间状态已经完全同步了。 集群启动时,可以同时启动2个NameNode。这些NameNode只有一个是active的,另一个属于standby状态。 active状态意味着提供服务,standby状态意味着处于休眠状态,只进行数据同步,时刻准备着提供服务 部署规划

 

 

实施

1)系统时间同步
[root@localhost ~]#ntpdate time1.aliyun.com
12)设置主机IP及名称解析 把/etc/hosts文件复制到所有集群主机
[root@localhost ~]#vim /etc/hosts
192.168.208.5 hd1
192.168.208.10 hd2
192.168.208.20 hd3
192.168.208.30 hd4
192.168.208.40 hd5
192.168.208.50 hd6
3)关闭防火墙及Selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
4)部署JDK
[root@localhost ~]#firefox http://download.oracle.com
[root@localhost ~]#tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local
[root@localhost ~]#mv /usr/local/jdk1.8 /usr/local/jdk
5)SSH免密登录 把密钥复制到所有主机
[root@localhost ~]#ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
[root@localhost ~]#cd /root/.ssh
[root@localhost ~]#cp id_rsa.pub authorized_keys
[root@localhost ~]#for i in hd2 hd3 hd4 hd5 hd6;do scp -r /root/.ssh $i:/root;done
6)zookeeper部署 6.0)zookeeper作用 ZooKeeper 是为分布式应用程序提供高性能协调服务的工具集合,译名为“动物园管理员”。 分布式应用程序可以基于它实现配置维护、命名服务、分布式同步、组服务等。 是 Hadoop集群管理的一个必不可少的模块,它主要用来解决分布式应用中经常遇到的数据管理问题,如集群管理、 统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等。 在ZooKeeper集群当中,集群中的服务器角色有两种Leader和Learner,Learner角色又分为Observer和Follower Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协 议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。 当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Follower完成了和leader 的状态同步以后,恢复模式就结束了。状态同步保证了leader和Follower具有相同的系统状态。 如下图所示: 该ZooKeeper集群当中一共有5台服务器,有两种角色Leader和Follwer,5台服务器连通在一起,客户端又分别连在 不同的ZK服务器上。 如果当数据通过客户端1,在左边第一台Follower服务器上做了一次数据变更,它会把这个数据的变化同步到其他所 有的服务器,同步结束之后,那么其他的客户端都会获得这个数据的变化。 Zookeeper是一个由多个server组成的集群,一个leader,多个follower,每个server保存一份数据副本,全局数据 一致、分布式读写,更新请求转发,由leader实施。

Leader主要有三个功能

1. 恢复数据; 2. 维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型; 3. Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进 行不同的处理。

Follower主要有四个功能

1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息); 2. 接收Leader消息并进行处理; 3. 接收Client的请求,如果为写请求,发送给Leader进行投票; 4. 返回Client结果。 zookeeper部署至hdfs集群的datanode节点,此案例共3台。

6.1)获取软件包

[root@localhost ~]#wget https://www-eu.apache.org/dist/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

6.2)部署软件包

每台服务器myid不同,需要分别修改,例如server.1对应的myid内容为1,server.2对应的myid内容为2, server.3对应的myid为3。 2888端口:follower连接到leader机器的端口 3888端口:leader选举端口
[root@localhost ~]#tar xf zookeeper-3.4.13.tar.gz -C /usr/local
[root@localhost ~]#mv /usr/local/zookeeper-3.4.13 /usr/local/zookeeper
[root@localhost ~]#mv /usr/local/zookeeper/conf/zoo.sample.cfg
/usr/local/zookeeper/conf/zoo.cfg
[root@localhost ~]#vim /usr/local/zookeeper/conf/zoo.cfg
data=/opt/data

server.1=hd4:2888:3888 server.2=hd5:2888:3888 server.3=hd6:2888:3888  
[root@localhost ~]#mkdir /opt/data
[root@localhost ~]#echo 1 > /opt/data/myid

6.3)添加环境变量

[root@localhost ~]#vim /etc/profile.d/hadoop.sh
export JAVA_HOME=/usr/local/jdk
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=${JAVA_HOME}/bin:${ZOOKEEPER_HOME}/bin:$PATH
[root@localhost ~]# source /etc/profile
在3台datanode节点上全部添加

6.4)验证zookeeper

需要把以上文件拷贝至3台datanode,然后全部执行开启命令
[root@localhost ~]#zkServer.sh start
[root@localhost ~]#zkServer.sh status
[root@localhost ~]#zkServer.sh stop

7)hadoop软件包获取

[root@localhost ~]#wget  http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz
[root@localhost ~]#tar xf hadoop-2.8.5.tar.gz -C /opt

8)完全分布式(HA)配置文件修改

8.1)hadoop-env.sh

修改hadoop-env.sh 25行,mapred-env.sh 16行,yarn-env.sh 23行,针对hadoop-2.8.5版本
[root@localhost ~]#vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk

8.2)core-site.xml

[root@localhost ~]#vim core-site.xml

<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>

<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>

<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hd4:2181,hd5:2181,hd6:2181</value>
</property>

8.3)hdfs-site.xml

[root@localhost ~]#vim hdfs-site.xml

<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
  <property>
  <name>dfs.nameservices</name>
  <value>ns1</value>
</property>

<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
  <property>
  <name>dfs.ha.namenodes.ns1</name>
  <value>nn1,nn2</value>
</property>

<!-- nn1的RPC通信地址 -->
<property>
  <name>dfs.namenode.rpc-address.ns1.nn1</name>
  <value>hd1:9000</value>
</property>

<!-- nn1的http通信地址 -->
<property>
  <name>dfs.namenode.http-address.ns1.nn1</name>
  <value>hd1:50070</value>
</property>

<!-- nn2的RPC通信地址 -->
<property>
  <name>dfs.namenode.rpc-address.ns1.nn2</name>
  <value>hd2:9000</value>
</property>

<!-- nn2的http通信地址 -->
<property>
  <name>dfs.namenode.http-address.ns1.nn2</name>
  <value>hd2:50070</value>
</property

<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hd4:8485;hd5:8485;hd6:8485/ns1</value>
</property>

<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/opt/data/journal</value>
</property>

<!-- 开启NameNode失败自动切换 -->
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>

<!-- 配置失败自动切换实现方式 -->
<property>
  <name>dfs.client.failover.proxy.provider.ns1</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 配置隔离机制 -->
<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>

8.4)配置datanode节点记录文件 slaves

[root@localhost ~]#vim slaves
hd4
hd5
hd6

8.5)mapred-site.xml

[root@localhost ~]#cp /opt/hadoop285/etc/hadoop/mapred-site.xml.template
/opt/hadoop285/etc/hadoop/mapred-site.xml
[root@localhost ~]#vim mapred-site.xml
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property

8.6)yarn-site.xml

[root@localhost ~]#vim yarn-site.xml
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hd3</value>
</property>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

9)复制修改后的hadoop目录到所有集群节点

[root@localhost ~]#scp -r hadoop hdX:/opt
[root@localhost ~]#scp /etc/profile.d/hadoop.sh hdX:/etc/profile.d/
[root@localhost ~]#source /etc/profile

10)在datanode节点(3台)启动zookeeper

[root@localhost ~]#zkServer.sh start

11)启动journalnode(在namenode上操作,例如hd1)

[root@localhost ~]#hadoop-daemons.sh start journalnode
分别到hd4、hd5、hd6节点上进行验证
[root@localhost ~]#jps

12)格式化hdfs文件系统(在namenode上操作,例如hd1)

[root@localhost ~]#hdfs namenode -format
1格式化完成后,请把/opt/data/tmp目录拷贝至hd2相应的位置,hd2将不再需要格式化,可以直接使用。

13)格式化zk(namenode上操作,例如hd1)

[root@localhost ~]#hdfs zkfc -formatZK

14)启动hdfs(namenode上操作,例如hd1)

[root@localhost ~]#start-dfs.sh

15)启动yarn(namenode上操作,例如想让hd2成为resourcemanager,需要在hd2上启动。)

[root@localhost ~]#start-yarn.sh

16)访问

NameNode1:http://hd1:50070 查看NameNode状态
NameNode2:http://hd2:50070 查看NameNode状态
NameNode3:http://hd3:8088 查看yarn状态

 

   

标签:部署,zookeeper,hadoop,sh,NameNode,root,localhost
From: https://www.cnblogs.com/machangwei-8/p/17205017.html

相关文章

  • Golang项目使用Dockerfile部署
    前言关于在构建golang编写的web项目中使用dockerfile的一些总结。通过查阅资料后,写下了如下配置:一般模式会安装golang编译环境,镜像文件包会比较大。#构建golang运行......
  • docker部署Jenkins
    可以去Jenkins官网DockerHub的GitHub仓库,拷贝最新的部署脚本:https://github.com/jenkinsci/docker/blob/master/README.mddockerrun-p8888:8080-p55551:50000--r......
  • vue部署在Apache上 刷新404问题
    //在项目根目录下新建.htaccess文件<IfModulemod_rewrite.c>RewriteEngineOnRewriteBase/RewriteRule^index\.html$-[L]RewriteCond%{REQUEST_......
  • Odoo 部署windows server 2012
    需要安装前置补丁#clearcompressionflag.exe、KB2919442、KB2919355、KB2932046、KB2959977、KB2937592、KB2938439、KB2934018。使用odoo14官网安装包#地址:https://ww......
  • CentOS 7 部署 HDP 3.3.1
    一、环境服务器名称配置IP地址备注hdp-161-1418核/16G内存/300GSSD硬盘10.32.161.141MGR/Agenthdp-161-1428核/16G内存/300GSSD硬盘10.32.161.142Age......
  • Docker 部署 zookeeper
    拉取ZooKeeper镜像最新版本dockerpullzookeeper:latest创建数据卷文件mkdir-pm700./zookeeper/{data,conf,logs} #指定目录下创建多个文件夹并授权700运行......
  • Docker部署mysql5.7与redis6.2.6
    Linux环境:centos7.6#首先创建docker相关数据卷挂载目录mkdir-pdocker/{nexus3,mysql,redis}一、部署mysql1.搜索版本dockersearchmysql2.安装mysql5.7dockerpu......
  • Docker部署gitlab
    Linux环境:centos7.6一、安装git1.安装git yuminstall-ygit2.查看git版本gitversion--3.设置git的账户信息gitconfig--globaluser.name"pss"gitconfig--gl......
  • API发布与部署-- .NET WebAPI 篇
    API发布-- .NET  WebAPI 篇1:准备工作:设置数据库链接字符串,打开一个正常的项目:首先注意所有的appsettings.json文件,包括生产环境配置子文件,注意里面的链......
  • 使用docker-compose 部署grafana + prometheus +node_exporter 实现监控
    主机环境:kali6.1(debian..)一、安装应用安装docker-compose  aptinstalldocker-compose-y安装dockersudoaptupdatesudoaptinstall-ydocker.iosudosystem......