博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小白也会搭的hadoop集群
阅读量:3927 次
发布时间:2019-05-23

本文共 11477 字,大约阅读时间需要 38 分钟。

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

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

文章目录

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

1. 配置虚拟机环境

1.1 配置yum源

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

#1.首先下载wgetyum 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 allyum makecache#7.测试yum list | grep firefox#会显示如下效果:yum -y install firefox.x86_64

1.2 安装辅助工具

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

#直接复制到命令行即可,复制的时候记得一行一行复制sudo yum install -y epel-releasesudo 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 hadoop100192.168.1.101 hadoop101192.168.1.102 hadoop102192.168.1.103 hadoop103192.168.1.104 hadoop104192.168.1.105 hadoop105192.168.1.106 hadoop106192.168.1.107 hadoop107192.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 hadoop100192.168.1.101 hadoop101192.168.1.102 hadoop102192.168.1.103 hadoop103192.168.1.104 hadoop104192.168.1.105 hadoop105192.168.1.106 hadoop106192.168.1.107 hadoop107192.168.1.108 hadoop108

1.6关闭防火墙

systemctl stop 	firewalldsystemctl disable firewalld

1.7添加root权限的用户

useradd wukong        添加用户passwd  wukong		   为新用户设置密码配置wukong用户具有root权限vi /etc/sudoers修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:## Allow root to run any commands anywhereroot    ALL=(ALL)     ALLwukong   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_HOMEJAVA_HOME=/opt/module/jdk1.8.0_212#HADOOP_HOMEHADOOP_HOME=/opt/module/hadoop-3.1.3PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbinexport 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/hadoopvim core-site.xml文件内容如下:
fs.defaultFS
hdfs://hadoop102:9820
hadoop.data.dir
/opt/module/hadoop-3.1.3/data
  • 配置HDFS:配置hdfs-site.xml
vim hdfs-site.xml
dfs.namenode.name.dir
file://${hadoop.data.dir}/name
dfs.datanode.data.dir
file://${hadoop.data.dir}/data
dfs.namenode.checkpoint.dir
file://${hadoop.data.dir}/namesecondary
dfs.client.datanode-restart.timeout
30s
dfs.namenode.http-address
hadoop102:9870
dfs.namenode.secondary.http-address
hadoop104:9868
  • 配置Yarn:配置yarn-site.xml
vim yarn-site.xml文件内容如下:
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop103
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
  • MapReduce配置文件:配置mapred-site.xml

vim mapred-site.xml

文件内容如下:

mapreduce.framework.name
yarn

2.3 配置ssh免密登录

1.生成公钥和私钥:ssh-keygen -t rsa2.将公钥拷贝到要免密登录的目标机器上ssh-copy-id hadoop102ssh-copy-id hadoop103ssh-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 hadoop104do  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  donedone

编写完成之后给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上面格式namenodeehdfs  namenode  -format#在hadoop102上面启动namenodehdfs --daemon start namenode#在hadoop103上面启动resourcemanageryarn --daemon start resourcemanager#在hadoop104上面启动secondarynamenodehdfs --daemon start secnodarynamenode#并分别在hadoop102,hadoop103,hadoop104上面启动datanode以及nodemanagerhdfs --daemon start datanodeyarn --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/bashif [ $# -lt 1 ] then   echo "No Args Input Error!!!!!"   exitficase $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在该文件里面增加如下配置。
mapreduce.jobhistory.address
hadoop102:10020
mapreduce.jobhistory.webapp.address
hadoop102:19888
  • 分发配置

    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在该文件里面增加如下配置。    
yarn.log-aggregation-enable
true
yarn.log.server.url
http://hadoop102:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
  • 分发配置
    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 VERSIONclusterID=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 VERSIONclusterID=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

转载地址:http://ycugn.baihongyu.com/

你可能感兴趣的文章
蓝牙基带数据传输机理分析
查看>>
各种文件后缀名与打开方式大全
查看>>
利用Java的Properties 类读取配置文件信息
查看>>
用java读写ini配置文件
查看>>
java读取和修改ini配置文件实例代码
查看>>
网络字节序与主机字节序
查看>>
inet_aton和inet_network和inet_addr三者比较-《别怕Linux编程》之五
查看>>
组播通信
查看>>
setsockopt 设置socket 详细用法
查看>>
在局域网中实现多播功能
查看>>
什么叫组播地址(Multicast Address )?
查看>>
掌握IP地址知识 子网掩码与子网划分
查看>>
组播地址,IP组播地址
查看>>
什么是组播
查看>>
组播通信
查看>>
Linux网络编程一步一步学-UDP组播
查看>>
Linux C编程---网络编程
查看>>
在Linux创建库函数(1)
查看>>
在Linux创建库函数(2)
查看>>
在Linux创建库函数(3)
查看>>