前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >颤抖吧Hadoop 、干碎大数据之Hadoop完全分布式平台搭建

颤抖吧Hadoop 、干碎大数据之Hadoop完全分布式平台搭建

作者头像
阿年、嗯啊
发布2021-04-29 18:12:13
5330
发布2021-04-29 18:12:13
举报
文章被收录于专栏:阿年的数据梦阿年的数据梦

Hadoop完全分布式平台搭建

在这里插入图片描述
在这里插入图片描述

【讲在前面】 Hadoop完全分布式集群的搭建需要多台虚拟机,每台虚拟机单独安装配置比较麻烦,因此我们可以在VMware中创建一个虚拟机后完成公共的基础配置然后直接创建完整克隆,这样效率比较高。 Hadoop完全分布式集群的搭建是典型的主从架构,即一台master节点多台slave节点,这里我采用三台虚拟机,一台作为master节点,另外两台作为slave1节点和slave2节点。

所需安装包:jdk安装包、Hadoop安装包(资源里面有我用的版本) 如果没有特殊说明本操作都是在Xshell中完成的。

安装建议:我这里安装统一在根目录下创建一个export文件夹,然后在export文件夹中创建两个文件夹servers(安装软件的文件夹),softwares(存放安装包的目录) or 在/usr/local/下安装。

代码语言:javascript
复制
mkdir -p /export/servers
mkdir -p /export/softwares

1. 静态IP的配置

centos7安装完成后网卡默认是不启动的首先 ifconfigip a查看网卡名称。然后修改相关的配置文件。

代码语言:javascript
复制
vi /etc/sysconfig/network-scripts/ifcfg-ens33
将BOOTPROTO修改为static
BOOTPROTO=static
最后一行ONBOOT改为yes
ONBOOT=yes
添加如下内容:
IPADDR=填IP地址
NETMASK=子网掩码
GATEWAY=网关IP
DNS1=8.8.8.8
DNS2=8.8.4.4

重启网络服务:

代码语言:javascript
复制
systemctl restart network

如果能ping同外网说明静态IP配置成功

代码语言:javascript
复制
ping www.qq.com

2. jdk的安装

将jdk安装包上传至softwares文件夹中,并解压缩至servers文件夹中。

代码语言:javascript
复制
  cd /export/softwares/
  rz

选中jdk压缩包,上传至当前目录下

代码语言:javascript
复制
  mv jdk-8u161-linux-x64.tar.gz jdk
  tar -zxvf jdk -C ../servers/ 

如果rz命令报错,则执行如下安装后再执行

代码语言:javascript
复制
  yum -y install lrzsz

配置jdk的环境变量

在/etc/profile文件的末尾添加如下环境变量:

代码语言:javascript
复制
export JAVA_HOME=/export/servers/jdk
export PATH=$PAHT:$JAVA_HOME/bin

保存后退出。

重新加载配置文件使刚才配置的环境变量生效。

代码语言:javascript
复制
  source /etc/profile

查看是否配置成功:

输入java -version出现jdk的版本信息即为安装配置成功。

上面的静态IP配置和jdk的安装在每台机器上都需要配置,所以在一台机器上配置成功后直接克隆该虚拟机(注意要创建完整克隆),注意,克隆完成后IP地址三台都相同,需要你把克隆的两台虚拟机在配置文件中把IP修改一下,修改完成后,重启网络服务,看看相互间能不能ping通,如果能ping通则说明IP修改成功。

重启网路服务:

代码语言:javascript
复制
systemctl restart network

————————————————

3. 修改虚拟机的主机名,并添加映射

修改/etc/hostname文件,将默认的第一行删掉,然后改为master,重启虚拟机,主机名修改生效。

同样的做法修改其他的两台虚拟机的主机名分别为:slave1、slave2,并重启虚拟机。

编辑/etc/hosts文件,追加如下内容(注意IP地址要改成自己的IP地址):

代码语言:javascript
复制
  192.168.200.200 maste
  192.168.200.201 slave1
  192.168.200.202 slave2

在其他两台机器上也追加同样的内容。

验证是否更改成功就看相互间能不能ping通。例如在任意一台机器上执行如下命令:

代码语言:javascript
复制
ping master
ping slave1
ping slave2

4. 配置SSH免密登录

检查SSH是否已经安装(centos7默认是安装了的)

rpm -qa | grep ssh

出现如下结果即为已经安装:

代码语言:javascript
复制
  openssh-7.4p1-21.el7.x86_64
  libssh2-1.8.0-3.el7.x86_64
  openssh-clients-7.4p1-21.el7.x86_64
  openssh-server-7.4p1-21.el7.x86_64

如果没有安装的话则需手动安装:

代码语言:javascript
复制
  yum -y install openssh-serve
  yum -y install openssh-clients

提示:如果没有安装openssh-clients的话,当执行ssh和scp命令的时候会报错,提示找不到该命令。

测试SSH是否可用(该IP地址为要登录目标机器的IP地址:也就是子节点的IP地址)

代码语言:javascript
复制
  ssh 192.168.200.201

按照提示输入目标机器的登录密码,登陆成功后说明ssh可用,然后执行如下命令返回最初的主机

代码语言:javascript
复制
  exit

生成密钥

代码语言:javascript
复制
  ssk-keygen

该过程需要反复确认,之间按回车就可以,注意:有时候需要回答yes或者no!!!

在master节点上对所有节点进行免密登录操作,包括master节点:

代码语言:javascript
复制
  ssh-copy-id maste
  ssh-copy-id slave1
  ssh-copy-id slave2

由于master需要启动slave节点上的服务,所以需要master登录slave,因此把在master节点上执行上面的命令。

5. 配置时间同步服务

检查是否安装ntp服务

代码语言:javascript
复制
 rpm -qa | grep ntp

没有安装的话安装ntp服务

代码语言:javascript
复制
 yum -y install ntp

设置master节点为NTP时间同步服务的主节点(即以master节点的时间为准)

编辑/etc/ntp.conf文件,注释掉以server开头的行,并添加如下代码:

代码语言:javascript
复制
 restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
 server 127.127.1.0
 fudge 127.127.1.0 stratum 10

配置节点时间同步(从master节点上获取时间)

在slave1、slave2节点中同样修改/etc/ntp.conf文件,注释掉以server开头的行,添加如下代码:

代码语言:javascript
复制
 server maste

设置子节点每10分钟和master(时间服务器)同步一次时间

代码语言:javascript
复制
 crontab -e

编写定时任务:

代码语言:javascript
复制
 */10 * * * * /usr/sbin/ntpdate maste

启动NTP服务

在master节点上启动ntp服务并加入开机自启

代码语言:javascript
复制
 service ntpd start & chkconfig ntpd on

在从节点上(slave1、slave2)上手动同步一次时间

代码语言:javascript
复制
 ntpdate maste

在从节点上(slave1、slave2)上启动ntp服务并加入开机自启

代码语言:javascript
复制
 service ntpd start & chkconfig ntpd on

查看ntp服务器有无和上层ntp连通

代码语言:javascript
复制
 ntpstat

这个命令可能会看到 unsynchronised 这是正常情况,因为配置完成后,需要等待一会儿才能和/etc/ntp.conf中配置的标准时间进行同步。

查看ntp服务器和上层ntp的状态

代码语言:javascript
复制
 ntpq -p

代码语言:javascript
复制
 参数说明:
 when:     多少秒前进行过时间同步
 poll:    下次更新在多少秒后
 reach:    已经向上层ntp服务器要求更新的次数
 delay:    网络延迟
 offser:    时间补偿值
 jitter:    系统时间与BIOS时间差

测试是否配置成功

在任意节点上修改时间:

代码语言:javascript
复制
 date -s "2011-11-11 11:11:11" 

等待十分钟后查看时间是否同步(实验时可以把10分钟调整为1分钟,节省时间)

代码语言:javascript
复制
 date

扩展:如果需要和外网时间保持时钟同步的话就需要设置定时任务(其实虚拟机时间已经和网络上的时间同步了),我这里使用阿里云服务器的时间。----在master上操作

启动定时任务:

代码语言:javascript
复制
    crontab -e

添加如下代码:分别代表 分 时 日 月 周

代码语言:javascript
复制
    */1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com

6. Hadoop安装(master上操作)

注:有关更多详细的配置信息,可以去Hadoop官网查看,打开后滑到页面的最下方,左下角Configuration下就有各个配置文件详细信息的链接。

解压Hadoop安装包

进入到softwares目录

代码语言:javascript
复制
 tar -zxvf hadoop-2.7.2.tar.gz -C ../servers/
 cd ../servers/
 mv hadoop-2.7.2.tar.gz hadoop

配置环境变量

在/etc/profile文件中添加如下内容:

代码语言:javascript
复制
 export HADOOP_HOME=/export/servers/hadoop
 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存后记得source /etc/profile

修改配置文件

所有的配置文件都在如下路径中:

代码语言:javascript
复制
 hadoop/etc/hadoop/
1

slaves

该配置文件保存slave节点的信息即节点的机器名称,删掉localhost修改为如下内容:

代码语言:javascript
复制
 slave1
 slave2

代码语言:javascript
复制
core-site.xml

Hadoop的核心配置文件

代码语言:javascript
复制
在<configuration></configuration>之间添加如下内容:
 <property>
     <name>fs.defaultFS</name>
     <value>hdfs://master:9000</value>
 </property>
 <property>
     <name>hadoop.tmp.dir</name>
     <value>file:/export/servers/hadoop/tmp</value>
 </property>

fs.defaultFS属性是指定默认文件系统,他的值为hdfs以及master节点端口。

hadoop.tmp.dir属性是指定hdfs临时数据保存在哪个目录,默认值是Linux的tmp目录。

hdfs-site.xml

HDFS相关的配置文件

代码语言:javascript
复制
在<configuration></configuration>之间添加如下内容:
 <property>
        <name>dfs.replication</name>
        <value>1</value>
 </property>
 <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:/export/servers/hadoop/tmp/dfs/name</value>
 </property>
 <property>
         <name>dfs.datanode.data.dir</name>
         <value>file:/export/servers/hadoop/tmp/dfs/data</value>
 </property>

dfs.replication属性表示数据块副本的数量,它的值默认为3,这里我们为了方便测试将它设置为1。

dfs.namenode.name.dir属性表示NameNode的临时数据存放目录。

dfs.namenode.data.dir属性表示DataNode的临时数据存放目录。

mapred-site.xml

MapReduce的相关配置

对文件mapred-site.xml重命名,默认文件名为mapred-site.xml.template,并更改mapred-site.xml配置:

代码语言:javascript
复制
 mv mapred-site.xml.template mapred-site.xml

在<configuration></configuration>之间添加如下内容:

代码语言:javascript
复制
 <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
 </property>

mapreduce.framework.name属性表示MapReduce程序的运行框架,默认值为local,也就是本地运行,这里我们设置为yarn,让MapReduce程序运行在YARN框架上。

代码语言:javascript
复制
yarn-site.xml

YARN框架的配置

代码语言:javascript
复制
在<configuration></configuration>之间添加如下内容:

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

yarn.resourcemanager.hostname属性指定ResourceManager运行在哪个节点上。

yarn.nodemanager.aux-services属性指定YARN的默认混洗方式,设置为MapReduce的默认混洗算法。

hadoop-env.sh

代码语言:javascript
复制
Hadoop运行基本环境配置,自动化脚本启动的时候要用。
 export JAVA_HOME=/export/servers/jdk

在文件的第25行位置,把前面的注释去掉,然后把后面的路径改为你JAVA_HOME的路径。

自此Hadoop就算配置完成了,这只是设置了正常启动所必须的设置项!!

7. Hadoop文件夹的分发

在master节点上配置好所有的配置文件后,将Hadoop文件夹分发给另外的两台子节点

代码语言:javascript
复制
scp -r /export/servers/hadoop slave1:/export/servers/
scp -r /export/servers/hadoop slave2:/export/servers/

8. 集群启动

启动集群前一定要关闭防火墙,注意,每台机器的防火墙都要关闭!!!

代码语言:javascript
复制
查看防火墙状态:
systemctl status firewalld
关闭防火墙:
systemctl stop firewalld

设置防火墙开机不启动(永久关闭防火墙,如果后面需要还可以手动打开):
systemctl disable firewalld

打开防火墙:
systemctl start firewalld

第一次启动前要格式化NameNode(后面启动的时候就不需要格式化了)

代码语言:javascript
复制
  hdfs namenode -format

如果忘记格式化启动后,需要关掉所有namenode和datanode进程,然后删掉data和log数据,然后重新格式化。

集群启动方式分为两种,一种是手动启动,一种是自动化脚本启动

手动启动

代码语言:javascript
复制
 1. 启动HDFS :

 启动NameNode(master节点):
 hadoop-daemon.sh start namenode
 启动DataNode(在Slave节点):
 hadoop-daemon.sh start datanode
 启动SecondaryNameNode(在任意节点):
 hadoop-daemon.sh start secondarynamenode

 2. 启动YARN :
 启动ResourceManager(在Master节点):
 yarn-daemon.sh start resourcemanage

 启动NodeManager(在Slave节点):
 yarn-daemon.sh start nodemanage

 3. 启动历史任务服务:
 mr-jobhistory-daemon.sh start historyserve
自动化脚本启动(master节点上执行)

1. 启动HDFS :

代码语言:javascript
复制
 
 start-dfs.sh

 2. 启动YARN :

 start-yarn.sh

3. 启动历史任务服务:

代码语言:javascript
复制
 mr-jobhistory-daemon.sh start historyserve

注:还有一个脚本是:start-all.sh,但是一般不建议使用,容易出错。

14

查看进程

jps

在master上看到如下进程即为启动成功:

代码语言:javascript
复制
  [root@master ~]# jps
  2016 ResourceManage
  2353 Jps
  1636 NameNode
  1845 SecondaryNameNode
  2310 JobHistoryServe
  [root@master ~]# 

在slave上看到如下进程即为启动成功:

代码语言:javascript
复制

  [root@slave1 ~]# jps
  1554 DataNode
  1830 Jps
  1671 NodeManage
  [root@slave1 ~]# 

说明:

NameNode、SecondaryNameNode是HDFS在master上的进程,DataNode是HDFS在slave上的进程,这三个进程存在,说明HDFS启动成功。

ResourceManager是YARN在master上的进程,NodeManager是YARN在slave上的进程,这两个进程存在,说明YARN启动成功。

JobHistoryServer是历史服务的进程。

查看网页

集群启动后可以在浏览器中输入IP地址加端口号,访问它的UI页面,查看集群的详细信息。

代码语言:javascript
复制
  查看HDFS集群详细信息:
  192.168.200.200:50070
  查看YARN集群详细信息:
  192.168.200.200:8088
  查看historyserver历史服务详细信息:
  192.168.200.200:19888

关闭进程

把开启服务命令中的start改为stop即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hadoop完全分布式平台搭建
    • 1. 静态IP的配置
      • 2. jdk的安装
        • 3. 修改虚拟机的主机名,并添加映射
          • 4. 配置SSH免密登录
            • 5. 配置时间同步服务
              • 6. Hadoop安装(master上操作)
                • 7. Hadoop文件夹的分发
                  • 8. 集群启动
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档