Hadoop3.2.1搭建分布式集群

Hadoop3.2.1在CentOs7搭建分布式集群

因为我这段时间刚刚接触Hadoop的学习,所以我就写一篇关于如何搭建分布式集群的文章来记录一下。(分布式集群为三台虚拟机构成,并且满足HA架构)

1,提前准备

(1)利用VMware建立三台操作系统是CentOs7的虚拟机。
(2)下载好hadoop–3.2.1.tar.gz。
(3)下载好zookeeper-3.4.14.tar.gz
(4)SecureCRT:终端服务,方便操作集群。

2, 三台虚拟机ip设置

(1),首先要确认虚拟机vmNET8网关(192.168.105.1)

在这里插入图片描述
(2)在每台虚拟机中分别对IP进行设置,必须保证网关一样,而每台的IP地址可以根据你的习惯来设置。
在这里插入图片描述
(3)利用Ping命令检查一下是否配置成功。
(4)修改每一台虚拟机的主机名,利用hostnamectl命令

[root@localhost ~]# hostnamectl set-hostname cone2

(5)每一台虚拟机都对/etc/hosts编辑,添加自己另外两台的IP地址与主机名。
在这里插入图片描述

3,JDK配置

因为Centos7会自带有相应的低版本JDK,所以我自己安装的JDK8不会起作用。会导致安装好的集群无法使用的情况。(JDK版本太高,hadoop3.2.1版本也可能会出问题)
(1)查看虚拟机是否带有自带的JDK

[root@cone2 ~]# rpm -qa | grep java

如果查询出来的有下面这种的形式就要需要删除:
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64

删除命令为:

[root@cone2 ~]#  rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64

(2)给自己下载好的JDK安装包解压

[root@cone2 ~]# tar -zxvf jdk-8u231-linux-x64.tar.gz -C app/

(3)配置JDK的路径
修改/etc/profile

[root@cone2 ~]# vi /etc/profile

添加JDK的bin文件夹的路径信息:

exportJAVA_HOME=/home/hadoop/app/jdk1.8.0_231
exportPATH= P A T H : PATH: PATH:JAVA_HOME/bin

(4)配置好以后,进行刷新以后才能生效。

[root@cone2 ~]# source /etc/profile

4,SSH免密登录

一定要记得这三台的虚拟机中的用户名要保持一致,我就是因为没有保持一致,导致SSH免密登录一直不成功。
(1)创建公钥

ssh-keygen -t rsa 每台虚拟机执行此命令然后一路回车

(2)然后分别用ssh命令登录另外的虚拟机,第一次登陆会让你记住密钥,yes即可。

ssh 另外的虚拟机

用户名保持一致避免了你需要修改其它权限的工作,至于为什么我也不是很清楚,希望大神能够解答一下。

5,zookeeper安装

(1)将每台虚拟机中解压好的zookeeper里面的conf文件下的zoo_sample.cfg改为zoo.cfg
(2)将zoo.cfg里面的dataDir路径改掉你自己创建的data临时文件的位置,然后再在zoo.cfg中添加三台虚拟机的IP配置信息。

dataDir=/home/hadoop/app/zookeeper-3.4.14/data
server.12=192.168.105.17:2888:3888
server.22=192.168.105.15:2888:3888
server.32=192.168.105.16:2888:3888

(3)在自己创建的data文件夹中创建一个myid文本文件,myid文本文件中输入一个对该台虚拟机的编号,可以随便输入,但是这三台虚拟机中不能重复。
在这里插入图片描述
注意:一定要保证这三台虚拟机的myid文本文件都赋予了不同的编号!
(4)每台虚拟机测试是否能启动zookeeper

./zkServer.sh start 这个命令必须在zookeeper的bin文件夹下才能使用,或者你已经配置好了zookeeper路径。

6,hadoop配置

hadoop 的配置也和zookeeper配置一样,每台虚拟机都需要进行相同的配置。
(1)配置hadoop路径
最好配置一下hadoop的路径,这样就可以每次都要到特定的文件夹中使用某些命令,不会的可以百度,这个和JDK配置路径大同小异。
(2)配置hadoop-env.sh

exportJAVA_HOME=/home/hadoop/app/jdk1.8.0_231

(3)配置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>g1:9000</value>
                         </property>
                         <!--  nn1的http的通信地址 -->
                         <property>
                         <name>dfs.namenode.http-address.ns1.nn1</name>
                         <value>g1:9870</value>
                         </property>
                          <!-- nn2的RPC通信地址  -->
                         <property>
                         <name>dfs.namenode.rpc-address.ns1.nn2</name>
                         <value>g2:9000</value>
                         </property>
                         <!--  nn2的http的通信地址 -->
                         <property>
                         <name>dfs.namenode.http-address.ns1.nn2</name>
                         <value>g2:9870</value>
                         </property>
                         
```<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
                         <property>
                         <name>dfs.namenode.shared.edits.dir</name>
                         <value>qjournal://g1:8485;g2:8485;g3:8485/ns1</value>
                         </property>
  <!--指定journalNode在本地磁盘存放数据的位置  -->
                         <property>
                         <name>dfs.journalnode.edits.dir</name>
                         <value>/home/group1/app/hadoop-3.2.1/journaldata</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
  shell(/bin/true)
          </value>
                         </property>
                         <!-- 使用sshfence隔离机制时需要ssh免登录 -->
                         <property>
                         <name>dfs.ha.fencing.ssh.private-key-files</name>
                         <value>/home/group1/.ssh/id_rsa</value>
                         </property>
<!--  配置sshfence隔离机制超时时间-->
                         <property>
                         <name>dfs.ha.fencing.ssh.connect-timeout</name>
                         <value>30000</value>
                          </property>

(4)配置core-site.xml

<!-- 指定hdfs的nameservice为ns1-->
                <property>
                <name>fs.defaultFS</name>
                <value>hdfs://ns1/</value>                     
                </property>
                <!-- 只当hadoop临时目录-->
                <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/group1/app/hadoop-3.2.1/tmp</value>
                </property>
                <!--指定zookeeper地址 -->
                <property>
                <name>ha.zookeeper.quorum</name>
                <value>g1:2181,g2:2181,g3:2181</value>
                </property>

(6)配置mapred-site.xml

<!--指定mr框架为yarn方式-->
 			 <property>
                          <name>mapreduce.framework.name</name>
                          <value>yarn</value>
                          </property>
                          //解决yarn类路径出错的问题
  <property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property>
  <property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property>
   <property>
           <name>mapreduce.reduce.env</name>
            <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
          </property>

(7)配置yarn-site.xml


<!--开启RM高可用-->
  <property>
                          <name>yarn.resourcemanager.ha.enabled</name>
                          <value>true</value>
                          </property>  
                          <!-- 指定RM的cluster id-->
  <property>
                          <name>yarn.resourcemanager.cluster-id</name>
                          <value>yrc</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>g1</value>
                          </property> 
                          <property>
                          <name>yarn.resourcemanager.hostname.rm2</name>
                          <value>g2</value>
                          </property>  
                          <!--指定zk集群地址-->
			  <property>
                          <name>yarn.resourcemanager.zk-address</name>
                          <value>g1:2181,g2:2181,g3:2181</value>
                          </property> 
                          <property>
                          <name>yarn.nodemanager.aux-services</name>
                          <value>mapreduce_shuffle</value>
                          </property> 
                          //解决三台机器搭建的HA		框架的mapreduce不能工作的额外配置
 			  <property>
         		<name>yarn.resourcemanager.address.rm1</name>
         <value>cone2:8032</value>
 			 </property>
 			 <property>     
   <name>yarn.resourcemanager.scheduler.address.rm1</name>      
     <value>cone2:8030</value>
  </property>
  <property>
   <name>yarn.resourcemanager.webapp.address.rm1</name>  
    <value>cone2:8088</value>
  </property>
  <property>
   <name>yarn.resourcemanager.resource-tracker.address.rm1</name>  
  <value>cone2:8031</value>
  </property>
  <property> 
  <name>yarn.resourcemanager.admin.address.rm1</name>    
   <value>cone2:8033</value>
  </property>
  <property>
  <name>yarn.resourcemanager.ha.admin.address.rm1</name>  
   <value>cone2:23142</value>
  </property> 
  <property> 
       <name>yarn.resourcemanager.address.rm2</name>  
    <value>ctwo:8032</value>
  </property>
  <property> 
    <name>yarn.resourcemanager.scheduler.address.rm2</name>    
      <value>ctwo:8030</value>
   </property>

<property>
     <name>yarn.resourcemanager.webapp.address.rm2</name>   
  <value>ctwo:8088</value>
  </property>
<property>
     <name>yarn.resourcemanager.resource-tracker.address.rm2</name> 
  <value>ctwo:8031</value>
  </property>
  <property>
     <name>yarn.resourcemanager.admin.address.rm2</name>  
    <value>ctwo:8033</value>
  </property>
  <property> 
    <name>yarn.resourcemanager.ha.admin.address.rm2</name>
   <value>ctwo:23142</value>
  </property>
                  

上面的几个配置文件都是在hadoop-3.2.1/etc/hadoop中。

7,启动zookeeper

./zkServer.sh start

8,启动journalnode

./hadoop-daemon.sh start journalnode - -在hadoop的sbin下进行手动启动

7,hadoop格式化

再三台虚拟机的随便一台执行格式化操作,格式化只能进行一次,多次格式化会导致集群启动失败。

hadoop namenode -format --hadoop格式化命令

9,格式化ZKFC(在zookeeper实现状态管理)

在hadoop下的bin文件下输入:

./hdfs zkfc -formatZK

查看初始化成功:在zookeeper下的bin文件输入 ./zkCli.sh :查看是否有创建的数据节点

10,hadoop启动

start-dfs.sh --启动hadoop中的hdfs来检查集群是否创建成功

9,启动成功

(1)第一台虚拟机
在这里插入图片描述
(2)第二台虚拟机
在这里插入图片描述
(3)第三台虚拟机
在这里插入图片描述

上面是我学习搭建hadoop的分布式集群的搭建流程,希望能为像我这样的新手提供到一些方便。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值