大数据集群之Hadoop集群(HA)

  1. 大数据集群之虚拟机集群
  2. 大数据集群之Hadoop集群(HA)

基本知识回顾

Hadoop大致是由三部分的组件组成的,分别为HDFS,MapReduce,yarn。

HDFS本质上是文件管理系统,HDFS大致又可以分为两个部分,NameNode(NN),DataNode(DN),NameNode为主节点或者说是Master节点,负责管理DataNode,NameNode同时只能有一个在工作,否则就会发生‘脑裂’。而DataNode则是具体存储数据的节点,DataNode可以是很多,数据是以块保存的,Hadoop2.x默认为128MB一块。

MapReduce为Hadoop的运算框架。

yarn为Hadoop的资源管理模块,负责资源分配和任务调度。yarn在dataNode节点上会有一个NodeManager线程,还自己配置的Master节点ResourceManager。

安装前提需要

配置目标

集群拓扑图在这里插入图片描述
补充:

  • JN代替了原来SecondaryNamenode的功能,并且成了集群,容错性提高了
  • ZK是指zookeeper,用于集群管理。
  • ZKFC是指Hadoop在HA中NN的监听程序。

集群原理示意图
在这里插入图片描述
具体原理这里就不详细解释了,不然更让人‘秃’。

设置免密钥登陆

集群之间的数据交互很频繁,但是不同机器之间要连接就需要密码,设置免密钥登陆可以使集群之间登陆免密登陆。

先用Xshell或其他方法连接上所有虚拟机。

在每个节点上运行以下代码:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa   # 生成密钥
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys   # 将密钥加入到密钥库

在Node1上:
将自己的公钥传给其他节点

scp ~/.ssh/id_rsa.pub node2:/tmp
scp ~/.ssh/id_rsa.pub node3:/tmp
scp ~/.ssh/id_rsa.pub node4:/tmp

在Node2,Node3,Node4上运行:

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys # 将传来的公钥加入到密钥库

参照上面的方法把其他节点上将自身的公钥传给其他节点,最好按上面步骤来,注意/tmp下被公钥覆盖的问题。

都传完之后测试Node1测试:

cd /
ssh node1
exit  # 退出当前登陆
ssh node2
exit  # 退出当前登陆
ssh node3
exit  # 退出当前登陆
ssh node4
exit  # 退出当前登陆

如果路径发生了变化则说明当前节点配置成功,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参照以上方法在其他的节点上进行测试

安装zookeeper

在node1,node2,node3上安装zookeeper

使用Xftp或其他方法将zookeeper-3.3.6.tar.gz上传至node1:/usr/software/目录下,运行:

cd :/usr/software
tar -zxvf zookeeper-3.3.6
mv zookeeper-3.3.6 zk336
mv zk336 /usr/local
cd /usr/local/zk366/conf
cp zoo_sample.cfg zoo.cfg  
vim zoo.cfg

在这里插入图片描述
server.X=A:B:C X代表server序号 A代表主机名 B:代表follower与leader通信端口 c:代表选举leader端口

在dataDir指定的文件中创建一个myid文件,写入这个服务器的id,即上面zoo.cfg中server后的数字

cd /opt
mkdir zookeeper
cd zookeeper
vi myid

写入1 保存退出, 在其他节点上同样 只要将myid中的值改为对应节点的值。

将这个安装好的zk同步到node2,node3下

scp  -r /usr/local/zk336/   node2:/usr/local/
scp  -r /usr/local/zk336/   node3:/usr/local/

在每个节点中添加环境变量

vim /etc/profile  # 添加环境变量
source /etc/profile  # 让修改后的环境变量立即生效

需要添加的环境变量
在这里插入图片描述
关闭所有节点的防火墙

systemctl stop firewalld   # 停止运行
systemctl disable firewalld    # 禁用,禁止开机启动

在node1,node2,node3节点启动zk服务

zkServer.sh start  # 启动zk服务
zkServer.sh stop   # 关闭zk服务
zkCil.sh  # 在当前节点启动客服端

启动后 jps 查看是否有zk线程,如何如下图则成功。
在这里插入图片描述
如果出现无法连接的情况可能是因为无法访问端口的错误,请关闭防火墙

安装Hadoop

将hadoop-2.9.2.tar.gz 上传到node1:/usr/software/目录下
具体配置信息参阅官方文档

cd /usr/software
tar -zxvf hadoop-2.9.2.tar.gz 
mv hadoop-2.9.2 hadoop292
mv hadoop292 /usr/local/
cd /usr/local/hadoop292/etc/hadoop
vim hadoop-env.sh

添加配置JAVA_HOME
在这里插入图片描述
配置 core-site.xml
添加以下配置

<configuration>
   <property>
     <name>fs.defaultFS</name>
     <value>hdfs://mycluster</value>
   </property>
   <property>
     <name>hadoop.tmp.dir</name>
     <value>/opt/hadoopdata</value>
   </property>

    <property>
   		<name>ha.zookeeper.quorum</name>
 		<value>node1:2181,node2:2181,node3:2181</value>>
    </property>

    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
         <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>

</configuration>

配置 hdfs-site.xml
添加以下配置

<configuration>

    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <property>
   		<name>dfs.permissions</name>
   		<value>false</value> 
    </property>
    <property>
   		<name>dfs.permissions.enabled</name>
   		<value>false</value> 
    </property>

    <property>
  		<name>dfs.nameservices</name>
  		<value>mycluster</value>
    </property>
    
    <property>
  		<name>dfs.ha.namenodes.mycluster</name>
  		<value>nn1,nn2</value>
    </property>

    <property>
  		<name>dfs.namenode.rpc-address.mycluster.nn1</name>
  		<value>node1:8020</value>
    </property>
    <property>
  		<name>dfs.namenode.rpc-address.mycluster.nn2</name>
  		<value>node2:8020</value>
    </property>

    <property>
  		<name>dfs.namenode.http-address.mycluster.nn1</name>
  		<value>node1:50070</value>
    </property>
    <property>
  		<name>dfs.namenode.http-address.mycluster.nn2</name>
  		<value>node2:50070</value>
    </property>

    <property>
  		<name>dfs.namenode.shared.edits.dir</name>
  		<value>qjournal://node2:8485;node3:8485;node4: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</value>
    </property>

    <property>
  		<name>dfs.ha.fencing.ssh.private-key-files</name>
  		<value>/root/.ssh/id_rsa</value>     
    </property>

    <property>
  		<name>dfs.journalnode.edits.dir</name>
  		<value>/opt/journal/node/local/data</value>
    </property>
    
    <property>
   		<name>dfs.ha.automatic-failover.enabled</name>
   		<value>true</value>
    </property>

    <property>
        <name>dfs.datanode.max.transfer.threads</name>
        <value>4096</value>
    </property>
</configuration>

指定DataNode vim slaves 在slaves添加如下三个节点
在这里插入图片描述

配置 yarn-site.xml 添加以下配置

<configuration>

<!-- Site specific YARN configuration properties -->

   
    
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    

    <property> 
  		<name>yarn.resourcemanager.ha.enabled</name> 
  		<value>true</value> 
    </property> 
    <property> 
  		<name>yarn.resourcemanager.cluster-id</name> 
  		<value>yc2yarn</value> 
    </property> 
    <property> 
  		<name>yarn.resourcemanager.ha.rm-ids</name> 
  		<value>rm1,rm2</value> 
    </property> 
    <property> 
  		<name>yarn.resourcemanager.hostname.rm1</name> 
  		<value>node3</value> 
    </property> 
    <property> 
  		<name>yarn.resourcemanager.hostname.rm2</name> 
  		<value>node4</value>
    </property>

     
    <property> 
  		<name>yarn.resourcemanager.webapp.address.rm1</name>
  		<value>node3:8088</value> 
    </property> 
    <property> 
  		<name>yarn.resourcemanager.webapp.address.rm2</name> 
  		<value>node4:8088</value> 
    </property> 
    

    <property> 
  		<name>yarn.resourcemanager.zk-address</name> 
  		<value>node1:2181,node2:2181,node3:2181</value> 
    </property>
</configuration>

添加环境变量

vim /etc/profile 

在这里插入图片描述

source /etc/profile

将node1配置好的Hadoop发送给其他节点

scp -r /usr/local/hadoop292 node2:/usr/local
scp -r /usr/local/hadoop292 node3:/usr/local
scp -r /usr/local/hadoop292 node4:/usr/local

将其他节点环境变量设置好

在node2,node3,node4 节点上云行JN

hadoop-daemon.sh start journalnode

在node1上运行

hdfs namenode -forma  # 格式化namenode
hadoop-daemon.sh start namenode  # 启动当前节点

在node2上运行

hdfs namenode -bootstrapStandby # 同步node1nameNode节点的数据

在任意一个NN节点上运行

hdfs zkfc -formatZK  # 格式化zk,这将在ZooKeeper中创建一个znode
zkCli.sh
ls /  # 查看是否注册成功
quit  # 退出客服端

在这里插入图片描述

启动集群

start-all.sh  # 一键启动hdfs和yarn
stop-all.sh   # 一键关闭
start-dfs.sh   # 启动hdfs
start-yarn.sh   # 启动yarn

yarn的resourcemanager需要手动去启动,在node3,node4中运行

yarn-daemon.sh start  resourcemanager

检查各个节点是否成功启动
运行 jps
node1结果
在这里插入图片描述
node2结果
在这里插入图片描述
node3结果
在这里插入图片描述
node4结果
在这里插入图片描述

在浏览器地址栏中输入 http://192.168.36.100:50070
在这里插入图片描述
在浏览器地址栏中输入 http://192.168.36.101:50070
在这里插入图片描述
两个nameNode节点一个是active状态,一个是standby状态。

测试HA
在node1节点运行

hadoop-daemon.sh stop namenode

刷新 http://192.168.36.101:50070, node2节点的nameNode变成active。
在这里插入图片描述

到此 Hadoop 集群完成,下一篇如何使用Hadoop。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值