本文共 11477 字,大约阅读时间需要 38 分钟。
前言:最近在学习大数据的知识,hadoop集群作为大数据入门知识,一定要非常熟悉,现在我将我自己搭建hadoop集群的步骤以及遇到的问题进行一个汇总。做到一个温故知新的作用。
由于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
我用的是CentOS7最小化版。因此要先安装一系列我们开发过程中所需要的工具。
#直接复制到命令行即可,复制的时候记得一行一行复制sudo yum install -y epel-releasesudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop
修改ip地址的时候建议大家,按照虚拟机的名字来进行修改,如我的虚拟机名称为hadoop100,那么我的静态ip就可设置为192.168.xxx.100这样方便大家记忆。
如何确认192.168.xxx.100中间的xxx呢? 大家可以在自己的windows系统中输入ipconfig查看自己的ip地址,中间有一项vmnet8的如下图所示:
那那么你就可以设置为 192.168.182.100 虚拟机名更改为hadoop100
具体修改方法为:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
具体修改的内容可以参考下图
ip地址就按照上面的修改即可
至于GATEWAY,以及DNS1可以设置为自己vmnet8的ip地址然后加1
注意主机名是局域网内部大家互相称呼的名字
vim /etc/hostname
如果那你设置的ip地址为192.168.182.100
那么建议你设置主机名为hadoop100这样方便我们记忆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地址会不太方便,那么你只需要输入相对好记忆的主机名即可。具体使用可参考下图所示:
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
systemctl stop firewalldsystemctl disable firewalld
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
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
接着克隆三台电脑,每台电脑需要修改ip地址以及hostname
我们的规划是
hadoop102 namenode datanode nodemanager
hadoop103 resourcemanager datanode nodemanager
hadoop104 secondarynamenode datanode nodemanager
在第二项的时候,我们既可以切换自己的具有管理员权限的用户了
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)]
cd $HADOOP_HOME/etc/hadoopvim core-site.xml文件内容如下:fs.defaultFS hdfs://hadoop102:9820 hadoop.data.dir /opt/module/hadoop-3.1.3/data
vim hdfs-site.xmldfs.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
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
vim mapred-site.xml
文件内容如下:
mapreduce.framework.name yarn
1.生成公钥和私钥:ssh-keygen -t rsa2.将公钥拷贝到要免密登录的目标机器上ssh-copy-id hadoop102ssh-copy-id hadoop103ssh-copy-id hadoop104
在/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
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脚本来进行群起集群,这样能够大大方便我们的启动效率。
hdfs namenode -format
如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有 namenode和datanode进程,然后再删除data和log数据)
start-dfs.sh
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
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
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。 注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。 开启日志聚集功能具体步骤如下:日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
开启日志聚集功能具体步骤如下:
vim yarn-site.xml在该文件里面增加如下配置。yarn.log-aggregation-enable true yarn.log.server.url http://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800
在格式化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
在格式化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/