hadoop集群搭建遇见的一些问题
Posted m0_54226055
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop集群搭建遇见的一些问题相关的知识,希望对你有一定的参考价值。
第一,下载centos后可能链接不上xhell7,可以下载一个cleaner来进行清除以前下载过centos但是没有清理完成的数据
第二,当输入密码的时候还是不能链接上centos可能i静态ip地址没有配置好。
从VMware安装建centos7虚拟机到hadoop集群搭建详细图文过程;以及安装中的一些问题
目录
一、安装VMware虚拟机centos7
链接里面是xshell,jdk,hadoop压缩包:
链接:https://pan.baidu.com/s/1CU2AmJcViBg5IUzobFCjuw
提取码:bd18)创建centos7虚拟机
激活密钥自己百度搜一下随便都是。
创建centos7虚拟机
点击创建新的虚拟机,自定义创建,然后具体步骤如下图,没出现在图中的步骤走默认推荐就行。
虚拟机最好放在一个单独创建的文件夹,一个虚拟机一个文件夹;
处理配置根据自己电脑来选,打开任务管理器,点击性能就能看见逻辑处理器个数就是你虚拟机内核处理总数可选的的最大值;
虚拟最大磁盘大小选50G,也可以根据自己电脑调整大小;
放在刚刚存放虚拟机的问价夹里面;
如下点击
然后点击开启虚拟机;最下面点击我已安装centos7...;最下面出现安装工具,直接点取消就行。
等待。。。。。。
然后安装过程具体如下图:
软件选择:最小化安装(之后可以连接xhsell,不在VWware下操作,最小化安装占内存小)
安装位置:选我要配置分区,创建/,/boot,swap分区挂载;取消KWUMP ;开启网络NAT
主要修改下面四个地方
为了节省空间,选择最小化安装,因为后期可以连接xshell,操作一样方便;当然也可以选择带桌面的。
然后关闭KWUMP,取消勾选 ;
开启网络,下面可以看到IP地址和DNS,下面的主机名可以在这直接修改,也可以后面通过命令在文件中修改。然后点击完成,进入安装位置
勾选我要配置分区,点击完成,进入分区界面
点击加号,添加三个挂载点分别是
“/boot” 容量1G 标准分区 文件系统 :ext4;
"swap"容量2G 标准分区 文件系统 :swap;
"/" 剩余内存全给它 标准分区 文件系统 :ext4;
点击确定,接受更改,安装即可。到此界面,填写root密码;可以在这创建用户之后修改权限就行,也可以安装后用命令创建用户,这里我直接在这创建了。
安装好之后点击重启,就创建好虚拟机了。
二、搭建集群准备工作
注意:
1.我的模板机器为hadoop106,克隆三台虚拟机后就可删;三台主机名是hadoop102,hadoop103,hadoop104;用户名为bigdata。大家与我不一样时,要把我主机或者用户名位置替换成自己的;区分主机名,虚拟机名,用户名在第四大标题(五)内;
2.链接xshell时,模板机器用root用户xshell链接;三台虚拟机用bigtata用户连接;
3.修改文件时,显示没用权限在vim命令前加上sudo
(一)准备模板机
1.首先通过root用户登录;
2.查看虚拟网络编辑器IP地址和网关;
a.开虚拟网络编辑器,查看IP地址,网关和IP地址范围,IP地址范围点击DHCP设置即可看见;
b.打开ifcfg-ens33文件,因为最小化安装,vim不能用;也可ifcfg-ens然后按Tab,以防不同虚拟机最后三位名字不同。
快捷键:Tab:目录或者文件打出前几个字母,按Tab建即可自动补全。
(进入文件后,点击“i”进入编辑模式才能改;退出:先Esc键退出编辑模式,再点击“:”,冒号后面输入“wq”表示退出并保存;“wq!”表示强制退出并保存;“q”表示退出;“q!”表示强制退出)
#修改ip地址
[root@hadoop106 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
c.将BOOTPROTO改为静态;
d.再根据自己IP地址在ifcfg-ensxxx文件的最下面写入三行IP地址,网关,域名解析服务器;
其中IPADDR要在虚拟网络编辑器范围内,自己写最后三位,在范围内就行;
e.网关要跟上图网关地址填写一样;
f.域名解析服务器也跟网关填写一样即可。
g.重启一下虚拟机
重启之后尝试ping一下百度,若能ping通过则成功;Ctrl+c停止
h.若是ping不同百度。首先查看新加入三行字母是否写错;再查看ONBOOT是否改为yes;再看自己的IP地址是否在虚拟网络编辑器所写的范围内。详情见第四大标题下的(四)
#把dhcp改为static
BOOTPROTO="static"
#ONBOOT改为yes,若是no则连不上网
ONBOOT="yes"
IPADDR=192.168.234.102 #IP地址
GATEWAY=192.168.234.2 #网关
DNS1=192.168.234.2 #域名解析服务器
#重启
[root@hadoop106 ~] reboot
#查看能否联网
[root@hadoop106 ~] ping www.baidu.com
3.连接xshell
安装xshell选免费版就好。
点击文件->新建->连接(由于现在还没改映射主机位置应该写ip地址)->用户身份验证(填写用户名和密码)->外观(根据自己选黑白背景及字号)。点击接受并保存即可。由于模板及没有创建用户,用root登录就可以,接下来克隆后的虚拟机最好用创建好的用户登录。
注意:1.模板及用root用户链接,方便操作;等克隆好三台机器后,三台机器都要通过用户链接
2.若是链接xshell不成功,看本文第四大标题下的(三),链接在评论。
设置鼠标右键为粘贴->工具->选项->键盘和鼠标
4.安装必要工具
[root@hadoop106 ~]# yum install -y epel-release
[root@hadoop106 ~]# yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
5.关闭防火墙
[root@hadoop106 ~]# systemctl stop firewalld
[root@hadoop106 ~]# systemctl disable firewalld
6.创建用户和配置用户权限
如是安装时创建了用户,则在此之间修改权限即可
[root@hadoop106 ~]# useradd bigdata #创建用户
[root@hadoop106 ~]# passwd bigdata
[root@hadoop106 ~]# vim /etc/sudoers #修改权限
在sudoers文件root下添加一行 bigdata ALL=(ALL) NOPASSWD:ALL
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
bigdata ALL=(ALL) NOPASSWD:ALL
7.创建文件夹 ,修改权限
在/opt目录下创建两个文件夹,software存放压缩包,modudle存放解压后的jdk和hadoop
[root@hadoop106 ~]# mkdir /opt/module
[root@hadoop106 ~]# mkdir /opt/software
[root@hadoop106 ~]# chown bigdat:bigdata /opt/module
[root@hadoop106 ~]# chown bigdat:bigdata /opt/software
8.删除自带java
[root@hadoop106 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
(二)克隆三台虚拟机
另克隆三台虚拟机,hadoop102,hadoop103,hadoop104;
以Hadoop102为例,Hadoop103,hadoop104也要完成如下操作。
1.关闭模板机器,在VM上点击管理->克隆(创建完整克隆)
2.修改ifconfig的IP地址,网关和域名解析服务器不用改,过程见创建模板机器过程。
3.修改主机名。
#修改ip地址
[root@hadoop106 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ensxxx
#修改主机名
[root@hadoop106 ~]# vim /etc/hostname
hadoop102
4.连接xshell
xshell中可以粘贴,后面修改映射会舒服点,连接过程见创建模板机器过程;修改完映射之后连接xshell时,“主机”位置填主机名就可以了,就不用再填写网址了;此时已经创建用户了,连接xshell时最好用新建用户登录连接。
5.修改映射(修改linux映射,windows下映射可以不修改)
修改映射作用:修改完虚拟机和windows下映射后,以后填写ip地址的时候填写主机名就可以了,包括后期连接web端的时候,不修改映射就用“http://192.168.234.102:9870”修改映射后“http://hadoop102:9870”就可以;也可以不修改。
配置linux克隆机主机名称映射hosts文件,打开/etc/hosts
[root@hadoop102 ~]# vim /etc/hosts
#添加如下内容:填你自己的三台虚拟机IP地址 以及对应的主机名
192.168.234.102 hadoop102
192.168.234.103 hadoop103
192.168.234.104 hadoop104
6.修改windows映射
如果操作系统是window10,先拷贝出来,修改保存以后,再覆盖即可
(a)进入C:\\Windows\\System32\\drivers\\etc路径
(b)拷贝hosts文件到桌面
(c)打开桌面hosts文件并添加如下内容
192.168.234.102 hadoop102
192.168.234.103 hadoop103
192.168.234.104 hadoop104
(d)将桌面hosts文件覆盖C:\\Windows\\System32\\drivers\\etc路径hosts文件
重启三台虚拟机即可。
三、搭建三台机器Hadoop集群
注意:如果你的虚拟机名字不叫hadoop102,hadoop103,hadoop104,并且用户不叫bigdata,以下配置文件时,对应自己虚拟机名称和用户名称去改。
1.集群部署
(了解每台虚拟机上要启动哪些进程,和配置哪准备文件)
hadoop102 namenode datanode nodemanager
hadoop103 recoursemanager datanode nodemanager
hadoop104 secondnamenode datanode nodemanager
2.在hadoop102上安装jdk
登录到xshell后,切到 /opt/software 目录下,将jdk的压缩包拖到窗口即可,再将jdk解压到
/opt/module 下;配置jdk的环境变量,在/etc/profile.d 目录下创建自定的配置文件 my_env.sh,配
置环境变量可以等解压完hadoop之后一起配置。也可以提前配置,内容在安装Hadoop内容下。
[bigdata@hadoop102 ~]$ cd /opt/software/
[bigdata@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
#配置jdk环境变量,等hadoop安装好后一起配置,此步可跳过。
#[bigdata@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
3. 在hadoop102上安装hadoop
将hadoop压缩包拖拽到 /opt/software ,再将hadoop安装到 /opt/module 下,在my_env.sh追加内容配置hadoop的环境变量,再让资源生效以下,再测试是否安装完成。
[bigdata@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
[bigdata@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
[bigdata@hadoop102 ~]$ source /etc/profile.d/my_env.sh
#测试环境变量是否生效
[bigdata@hadoop102 ~]$ java -version
#显示java version "1.8.0_212"证明安装成功
[bigdata@hadoop102 ~]$ hadoop version
#显示Hadoop 3.1.3则安装成功,如是显示不成功,可尝试reboot重启
在my_env.sh追加内容,my_env.sh最终内容如下:
#!/bin/bash
#声明JAVA_HOME变量
JAVA_HOME=/opt/module/jdk1.8.0_212
#声明HADOOP_HOME变量
HADOOP_HOME=/opt/module/hadoop-3.1.3
#将JAVA_HOME变量追加到PATH变量上
#将HADOOP_HOME/bin 、HADOOP_HOME/sbin 追加到PATH变量上
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#提升JAVA_HOME、PATH、HADOOP_HOME 变量为系统变量,
export JAVA_HOME PATH HADOOP_HOME
同步到另外两台机器上,可以等接下来做好同步数据脚本和SSH免密登陆后一起同步,更方便。
4.准备同步数据脚本
配置好一台机器,即可通过脚本同步到另两台机器上,就无需配置三台虚拟机,同步数据即可。
在/home/用户名/下创建bin目录,在bin目录下创建my_ rsync.sh脚本放入如下内容
[bigdata@hadoop102 opt]$ cd /home/bigdata
[bigdata@hadoop102 ~]$ mkdir bin
[bigdata@hadoop102 ~]$ cd bin
[bigdata@hadoop102 bin]$ sudo vim rsync.sh
[bigdata@hadoop102 bin]$
#修改脚本 xsync 具有执行权限
[bigdata@hadoop102 bin]$ chmod 744 rsync.sh
[bigdata@hadoop102 bin]$ sudo cp xsync /bin/
在填写以下脚本和后面配置文件时,若你的三台机器主机名不是Hadoop102,103,104,用户也不叫bigdata,则以下填写所有脚本和配置文件时都要更改为你自己对应主机名和用户名。
在脚本中填入以下内容:
#!/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
5.SSH免密登录
首先输入ssh-keygen -t rsa,连点四下回车键,再分别将密钥拷至其他虚拟机上,注意本机也要拷贝一次,即ssh-copy-id hadoop102,103,104。在三台机子上都要如此操作一遍。
注意:拷贝密钥对到虚拟机上时,会出现一次输入yes和一次密码的过程。若是第一次没成功需先删除三台机器已经生成的密钥对,再对三台机器重新操作。详见本文第四大标题下的(五)。
ssh-keygen -t rsa
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
#测试是否成功:无需输入密码就能进入则成功
ssh hadoop102
ssh hadoop103
ssh hadoop104
分发jdk安装包,Hadoop安装包和环境变量
[bigdata@hadoop102 module]$ rsync.sh /opt/module/hadoop-3.1.3
[bigdata@hadoop102 module]$ rsync.sh /opt/module/jdk1.8.0_212
#同步环境变量,并在另两台虚拟机source一下,再检验
[bigdata@hadoop102 ~]$ rsync.sh /etc/profile.d/my_env.sh
[bigdata@hadoop102 ~]$ source /etc/profile.d/my_env.sh
#测试环境变量是否生效
[bigdata@hadoop102 ~]$ java -version
#显示java version "1.8.0_212"证明安装成功
[bigdata@hadoop102 ~]$ hadoop version
#显示Hadoop 3.1.3则安装成功,如是显示不成功,可尝试reboot重启
6.配置文件
(1)核心配置文件
配置core-site.xml
[bigdata@hadoop102 ~]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
[bigdata@hadoop102 hadoop]$ vim core-site.xml
文件内容如下:
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9820</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为bigdata -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>bigdata</value>
</property>
<!-- 配置该bigdata(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.bigdata.hosts</name>
<value>*</value>
</property>
<!-- 配置该bigdata(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.bigdata.groups</name>
<value>*</value>
</property>
<!-- 配置该bigdata(superUser)允许通过代理的用户-->
<property>
<name>hadoop.proxyuser.bigdata.groups</name>
<value>*</value>
</property>
</configuration>
(2)HDFS配置文件
配置hdfs-site.xml
[bigdata@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下:
<configuration>
<!-- 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>
(3)YARN配置文件
配置yarn-site.xml
[bigdata@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下:
<configuration>
<!-- 指定MR走shuffle -->
<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>
<!-- yarn容器允许分配的最大最小内存 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<!-- yarn容器允许管理的物理内存大小 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
(4)MapReduce配置文件
配置mapred-site.xml
[bigdata@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下:
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(5)配置workers
配置workers保证群起时,datanode和nodemanager在三台机器都启动
[bigdata@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
#在该文件中增加如下内容:(三台虚拟机主机名)
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
(6)在集群上分发配置好的Hadoop配置文件
[bigdata@hadoop102 hadoop]$ rsync.sh /opt/module/hadoop-3.1.3/etc/hadoop/
查看下Hadoop103,Hadoop104是否分发成功
7.格式化namenode,以及单点启动
格式化namenode后会在hadoop-3.1.3目录下生成data文件夹和logs文件夹,若是重复格式化先删除这两个文件夹。
格式化namenode
[bigdata@hadoop102 ~]$ hdfs namenode -format
#分别启动/停止HDFS组件
[bigdata@hadoop102 ~]$hdfs --daemon start/stop namenode/datanode/secondarynamenode
#启动/停止YARN
[bigdata@hadoop102 ~]$yarn --daemon start/stop resourcemanager/nodemanager
8. 官方四个群启/群停
start-dfs.sh stop-dfs.sh
start-yarn.sh stop-yarn.sh
启动HDFS;在配置了ResourceManager的节点(hadoop103)启动YARN
[bigdata@hadoop102 hadoop-3.1.3]$ start-dfs.sh
[bigdata@hadoop103 hadoop-3.1.3]$ start-yarn.sh
9.封装群启/群停脚本
[bigdata@hadoop102 bin]$ cd /home/bigdata/bin/
[bigdata@hadoop102 bin]$ vim my_cluster.sh
#修改权限
[bigdata@hadoop102 bin]$ chmod 744 my_cluster.sh
#分发脚本
[bigdata@hadoop102 bin]$ rsync.sh /home/bigdata/bin
脚本中填入如下内容:
#!/bin/bash
#参数校验
if [ $# -lt 1 ]
then
echo "参数不能为空!!!"
exit
fi
#根据参数的值进行 启停 操作
case $1 in
"start")
#启动操作
echo "===============start HDFS================="
ssh hadoop102 /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
echo "===============start YARN================="
ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
;;
"stop")
#停止操作
echo "===============stop HDFS================="
ssh hadoop102 /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
echo "===============stop YARN================="
ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
;;
*)
echo "ERROR!!!!"
;;
esac
10.群起群停命令及查看web端
封装脚本前
#群起:hadoop102上启动hdfs集群,Hadoop103上启动yarn集群
[bigdata@hadoop102 hadoop-3.1.3]$ start-dfs.sh
[bigdata@hadoop103 hadoop-3.1.3]$ start-yarn.sh
封装脚本后 :jps后每台机器分别出现前面部署里面的对应进程才算启动成功
#群起
[bigdata@hadoop102 hadoop-3.1.3]$ my_cluster.sh start
#群停
[bigdata@hadoop102 hadoop-3.1.3]$ my_cluster.sh stop
#查看进程
[bigdata@hadoop102 hadoop-3.1.3]$ jps
jps能看见对应进程且web端输入对应网址能看见以下两个界面则启动集群成功。
若是没配置windows映射,则用Hadoop102的ip地址代替网址里面的Hadoop102;
(1)浏览器输入网址http://hadoop102:9870/(没改windows映射用自己的IP网址替换hadoop102:http://192.168.234.102:8970)网址web端出现下图:
若是jps能看见namenode,则namenode的web一定能打开,若打不开查看是否:是否用的是中文的;或者是将http写成https;
(2)输入http://hadoop103:8088/(没改windows映射用自己的IP地址替换hadoop102:http://192.168.234.103:8088)网址web端出现下图:
四、遇到的问题
(一)安装虚拟机出现致命错误
点击任务管理器->服务->重启vm服务。注意重启顺序,因为存在依赖关系。
(二)不能打开虚拟机
遇到下面错误,删除文件夹中带.clk的文件或重新命名.clk文件让它变成.clk.xx文件。
(三)连接不上xshell
查看是否windows适配器中对应虚拟机IP地址和vm虚拟机的不在一个网段上,详细见我第一个博客,链接在评论。
(四)ping不同外网,能ping通本机
一般是以下三个问题:
1.首先检查IPADDR,GATEWAY,DNS1是否写错,必须大写不能写错
2.查看ONBOOT是否已经改为yes;必须改为yes
3.查看IPADDR的IP地址是否在范围内;把ipaddr改到范围内
(五)ssh免密登录配置不成功
要分清虚拟机名和主机名和用户名:主机名是在/etc/hostname下的内容;
用户名是在/home/下的文件名显示
检查是否修改主机名和映射:
1.是否把虚拟机名当成主机名去拷贝密钥导致找不见虚拟机;
2.若没弄错主机名,则查看是否修改虚拟机映射,查看/etc/hosts下的内容,是否包含三台虚拟机对应的ip地址和主机名。
把这两处弄对,删除原来的已经生成的密钥对再重新生成
#查看主机名
sudo vim /etc/hostname
#查看映射
sudo vim /etc/hosts
#生成的密钥对在/home/用户名下,通过ls -a查看,
#若是第一次不成功,可以删除.ssh,重新操作
cd /home/bigdata
ls -a
rm -rf .ssh
以上是关于hadoop集群搭建遇见的一些问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在Linux下搭建hadoop集群环境 小残's Blog