小白也会搭的hadoop集群

搭建hadoop完全分布式集群(版本:3.13)

前言:最近在学习大数据的知识,hadoop集群作为大数据入门知识,一定要非常熟悉,现在我将我自己搭建hadoop集群的步骤以及遇到的问题进行一个汇总。做到一个温故知新的作用。

一、准备一台安装Linux系统的虚拟机

1. 配置虚拟机环境

1.1 配置yum源

由于yum的网站在国外,因此访问的时候,比较耗时,因此我们可以选择配置国内的镜像文件,可以使用阿里云或者网易163都可以。为防止权限问题,前期练习时可以使用root用户,以下操作均是在root用户下进行的。

#1.首先下载wget
yum install wget
#2.然后移动位置到/etc/yum.repos.d文件目录下
cd /etc/yum.repos.d
#3.将该文件夹下的CentOS-Base.repo拷贝一份,以防万一失败能够改回来
cp CentOS-Base.repo   CentOS-Base.repo.backup
#4.下载网易163的景象,或者阿里云的镜像
wget http://mirrors.aliyun.com/repo/Centos-7.repo  //阿里云
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo //网易163
#5.使用下载好的repos文件替换默认的repos文件,我用的是网易的镜像
mv CentOS7-Base-163.repo  CentOS-Base.repo
#6.配置完需要清理旧缓存数据,缓存新数据 
yum clean all
yum makecache
#7.测试
yum list | grep firefox
#会显示如下效果:
yum -y install firefox.x86_64

1.2 安装辅助工具

我用的是CentOS7最小化版。因此要先安装一系列我们开发过程中所需要的工具。

#直接复制到命令行即可,复制的时候记得一行一行复制
sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop

1.3设置静态ip

修改ip地址的时候建议大家,按照虚拟机的名字来进行修改,如我的虚拟机名称为hadoop100,那么我的静态ip就可设置为192.168.xxx.100这样方便大家记忆。

如何确认192.168.xxx.100中间的xxx呢? 大家可以在自己的windows系统中输入ipconfig查看自己的ip地址,中间有一项vmnet8的如下图所示:

1586615239667

那那么你就可以设置为 192.168.182.100 虚拟机名更改为hadoop100

具体修改方法为:

vim /etc/sysconfig/network-scripts/ifcfg-ens33

具体修改的内容可以参考下图

1586615534951

ip地址就按照上面的修改即可

至于GATEWAY,以及DNS1可以设置为自己vmnet8的ip地址然后加1

1.4 修改主机名

注意主机名是局域网内部大家互相称呼的名字

vim /etc/hostname

如果那你设置的ip地址为192.168.182.100
那么建议你设置主机名为hadoop100这样方便我们记忆

1.5 配置hosts文件

1.5.1 linux
vim /etc/hosts

添加,(注意中间那个1你要替换为你自己的ip网段)
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107
192.168.1.108 hadoop108

配置hosts文件的目的是:为了是你的主机名和ip地址形成映射关系,当你访问另外一台主机时输入ip地址会不太方便,那么你只需要输入相对好记忆的主机名即可。具体使用可参考下图所示:

image-20200412120137692

1.5.2 windows
  1. 进入C:\Windows\System32\drivers\etc路径
  2. 打开hosts文件并添加如下内容
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107
192.168.1.108 hadoop108

1.6关闭防火墙

systemctl stop 	firewalld
systemctl disable firewalld

1.7添加root权限的用户

useradd wukong        添加用户
passwd  wukong		   为新用户设置密码
配置wukong用户具有root权限

vi /etc/sudoers
修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
wukong   ALL=(ALL)  NOPASSWD:ALL

在/opt目录下创建文件夹
(1)在/opt目录下创建module、software文件夹
 mkdir module
 mkdir software

(2)修改module、software文件夹的所有者 
 mkdir /opt/module /opt/software
 chown wukong:wukong /opt/module /opt/software


2. 安装JDK和hadoop

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
将你上传的java文件包解压到module下

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
将你上传的hadoop文件包解压到module下

配置环境变量

vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_212
#HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-3.1.3
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export JAVA_HOME PATH HADOOP_HOME

配置完成之后

source /etc/profile

3. 克隆

​ 接着克隆三台电脑,每台电脑需要修改ip地址以及hostname

二、配置hadoop的各项配置文件

我们的规划是

hadoop102 namenode datanode nodemanager

hadoop103 resourcemanager datanode nodemanager

hadoop104 secondarynamenode datanode nodemanager

在第二项的时候,我们既可以切换自己的具有管理员权限的用户了

2.1 配置:hadoop-env.sh

Linux系统中获取JDK的安装路径:
[wukong@ hadoop101 ~]# echo $JAVA_HOME
/opt/module/jdk1.8.0_212

修改JAVA_HOME 路径(直接添加到最后一行就行,强迫症可以搜索JAVA_HOME然后在下面进行配置):
export JAVA_HOME=/opt/module/jdk1.8.0_212

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m9mVUTOJ-1586668519684)(assets/1586667723787.png)]

2.2 核心配置文件

  • 配置整体:配置core-site.xml
cd $HADOOP_HOME/etc/hadoop

vim core-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>


<configuration>

    <!-- 指定NameNode的地址 -->
    
    <property>
    
        <name>fs.defaultFS</name>
    
       <value>hdfs://hadoop102:9820</value>

</property>

<!-- 指定hadoop数据的存储目录  

      官方配置文件中的配置项是hadoop.tmp.dir ,用来指定hadoop数据的存储目录,此次配置用的hadoop.data.dir是自己定义的变量, 因为在hdfs-site.xml中会使用此配置的值来具体指定namenode 和 datanode存储数据的目录

-->

    <property>
    
        <name>hadoop.data.dir</name>
    
        <value>/opt/module/hadoop-3.1.3/data</value>

</property>


</configuration>
  • 配置HDFS:配置hdfs-site.xml

vim hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

 

<configuration>

 <!-- 指定NameNode数据的存储目录 -->

  <property>

    <name>dfs.namenode.name.dir</name>
    
    <value>file://${hadoop.data.dir}/name</value>

  </property>

 <!-- 指定Datanode数据的存储目录 -->

 

  <property>

    <name>dfs.datanode.data.dir</name>
    
    <value>file://${hadoop.data.dir}/data</value>

  </property>

   

   <!-- 指定SecondaryNameNode数据的存储目录 -->

 

  <property>
    
    <name>dfs.namenode.checkpoint.dir</name>

    <value>file://${hadoop.data.dir}/namesecondary</value>

   </property>

   

   <!-- 兼容配置,先跳过 -->

    <property>
    
    <name>dfs.client.datanode-restart.timeout</name>
    
    <value>30s</value>

  </property>

 

  <!-- nn web端访问地址-->

<property>

  <name>dfs.namenode.http-address</name>

  <value>hadoop102:9870</value>

</property>

  <!-- 2nn web端访问地址-->

 

  <property>

    <name>dfs.namenode.secondary.http-address</name>
    
    <value>hadoop104:9868</value>

  </property>

</configuration>
  • 配置Yarn:配置yarn-site.xml
vim yarn-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

 

<configuration>

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

</property>

     <!-- 指定ResourceManager的地址-->
    
    <property>
    
        <name>yarn.resourcemanager.hostname</name>
    
        <value>hadoop103</value>

</property>

<!-- 环境变量的继承 -->

    <property>
    
        <name>yarn.nodemanager.env-whitelist</name>
    
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    
    </property>

</configuration>
  • MapReduce配置文件:配置mapred-site.xml

vim mapred-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

 

<configuration>

 <!—指定MapReduce程序运行在Yarn上 -->

  <property>

    <name>mapreduce.framework.name</name>
    
    <value>yarn</value>

  </property>

</configuration>

2.3 配置ssh免密登录

1.生成公钥和私钥:
ssh-keygen -t rsa
2.将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

2.4 编写分发文件的shell脚本

在/home/wukong 目录下创建bin目录,并在bin目录下创建xsync文件

*将下面的文件拷贝进xsync中,编写完xsync后一定要将上述的hadoop安装和jdk安装分发给各个用户,然后在给各个用户配置环境变量。分发的具体命令在下面:

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
  echo ====================  $host  ====================
  #3. 遍历所有目录,挨个发送
  for file in $@
  do
    #4 判断文件是否存在
    if [ -e $file ]
    then
      #5. 获取父目录
      pdir=$(cd -P $(dirname $file); pwd)
      #6. 获取当前文件的名称
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done

编写完成之后给xsync运行权限,为了方便我直接给了全部权限

chmod 777 xsync

具体分发hadoop和java的命令为

xsync /opt/module/hadoop-3.1.3

2.5 群起集群

2.5.1配置workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
#在该文件中增加如下内容:
    hadoop102
    hadoop103
    hadoop104
#注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
#同步所有节点配置文件:
	xsync  workers

​ 在确保每台机器都安装了hadoop以及java文件,并且配置了相关的环境变量之后,就可以对集群进行格式化了注意格式化操作一般只在集群第一次启动的时候操作一下,文章后面的注意事项会详细说明为什么。

#在hadoop102上面格式namenodee
hdfs  namenode  -format

#在hadoop102上面启动namenode
hdfs --daemon start namenode

#在hadoop103上面启动resourcemanager

yarn --daemon start resourcemanager

#在hadoop104上面启动secondarynamenode

hdfs --daemon start secnodarynamenode

#并分别在hadoop102,hadoop103,hadoop104上面启动datanode以及nodemanager

hdfs --daemon start datanode
yarn --nodemanager



是不是感觉命令挺多的 如果不想操作 那么我们编写一个shell脚本来进行群起集群,这样能够大大方便我们的启动效率。

2.5.2启动集群

  • 格式化
hdfs namenode -format

如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有 namenode和datanode进程,然后再删除data和log数据)

  • 启动HDFSstart-dfs.sh
start-dfs.sh
  • 在配置了ResourceManager的节点(hadoop103)启动YARN
start-yarn.sh

编写群起集群的shell脚本

脚本的位置放在和xsync同一个位置,即/home/wukong/bin wukong是你的用户名

#!/bin/bash
if [ $# -lt 1 ]
 then
   echo "No Args Input Error!!!!!"
   exit
fi
case $1 in
"start")
   echo "======================== start hdfs ========================== "
   ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
   echo "======================== start yarn ========================== "
   ssh hadoop104 /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
   echo "======================== start historyserver ========================== "
   ssh hadoop103 mapred --daemon start historyserver
;;
"stop")
   echo "======================== stop yarn ========================== "
   ssh hadoop104 /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
   echo "======================== stop hdfs ========================== "
   ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
   echo "======================== stop historyserver ========================== "
   ssh hadoop103 mapred --daemon stop historyserver
;;
"restart")
   echo "======================== stop yarn ========================== "
   ssh hadoop104 /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
   echo "======================== stop hdfs ========================== "
   ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
   echo "======================== stop historyserver ========================== "
   ssh hadoop103 mapred --daemon stop historyserver
    echo "======================== start hdfs ========================== "
   ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
   echo "======================== start yarn ========================== "
   ssh hadoop104 /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
   echo "======================== start historyserver ========================== "
   ssh hadoop103 mapred --daemon start historyserver
;;
*)
  echo "Input Args Error!!!!!"
;;
esac

2.6 配置历史服务器

  • 配置mapred-site.xml

vi mapred-site.xml
在该文件里面增加如下配置。
<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>

  • 分发配置
    xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

  • 在hadoop102启动历史服务器
    mapred --daemon start historyserver

  • 查看历史服务器是否启动
    jps

  • 查看JobHistory:http://hadoop102:19888/jobhistory

2.7 配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
开启日志聚集功能具体步骤如下:日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。

开启日志聚集功能具体步骤如下:

  • 配置yarn-site.xml
vim yarn-site.xml
在该文件里面增加如下配置。
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>  
        <name>yarn.log.server.url</name>  
        <value>http://hadoop102:19888/jobhistory/logs</value>  
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>

  • 分发配置
    xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
  • 关闭NodeManager 、ResourceManager和HistoryServer
    在103上执行: stop-yarn.sh
    在102上执行: mapred --daemon stop historyserver
  • 启动NodeManager 、ResourceManager和HistoryServer
    在103上执行:start-yarn.sh
    在102上执行:mapred --daemon start historyserver
  • 删除HDFS上已经存在的输出文件
    hdfs dfs -rm -R /user/atguigu/output
  • 执行WordCount程序
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output
  • 查看日志
    http://hadoop102:19888/jobhistory

三,注意事项

1.格式化namenode

在格式化namenode之后,hadoop-3.1.3文件目录下,会出现data以及logs两个文件目录


格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式

NameNode时,一定要先删除data数据和logs日志,然后再格式化NameNode。



[wukong@hadoop101 hadoop-3.1.3]$ cd data/tmp/dfs/name/current/
[wukong@hadoop101 current]$ cat VERSION
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837

[wukong@hadoop101 hadoop-3.1.3]$ cd data/tmp/dfs/data/current/
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837

gu/output

  • 执行WordCount程序
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output
  • 查看日志
    http://hadoop102:19888/jobhistory

三,注意事项

1.格式化namenode

在格式化namenode之后,hadoop-3.1.3文件目录下,会出现data以及logs两个文件目录


格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式

NameNode时,一定要先删除data数据和logs日志,然后再格式化NameNode。



[wukong@hadoop101 hadoop-3.1.3]$ cd data/tmp/dfs/name/current/
[wukong@hadoop101 current]$ cat VERSION
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837

[wukong@hadoop101 hadoop-3.1.3]$ cd data/tmp/dfs/data/current/
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值