从零开始Hadoop安装和配置,图文手把手教你,定位错误(已部署成功)

文章目录

时间急的可以看速成,虚拟机和配置方法已给出,提供下载的为一台主节点一台分结点的虚拟机下载,只需进行ip地址更换即可 现成Hadoop配置,图文手把手交你


既然你选择自己配置了,那么我想想和你聊一聊,相信我这对你整体配置Hadoop流程会有一个跟全面的了解,我们抛开繁杂的学术名词,其实就是要实现我一个任务可以在多个电脑上跑的过程(分散算力),那交给我们应该如果来搞?我们是不是要对我们的虚拟机先分配地址(对应ip地址分配),分配完地址,是不是又需要我的机器可以相互连接(对应免密登录),可以相互登录之后,我就要开始安装我们的软件了,java、Hadoop,告诉他我可以免密的主机、我结点的个数、我启动的端口号。
我们做的每一步都是为了达成我们的某个目的,有的地方你可能配置了几个星期,很崩溃,还有的甚至你才刚刚接触Linux,就要进行如此复杂的操作,但请你相信自己,我一次配也花了几个星期,但在那之后是我对于Linux的进一步掌握,以及那全班第一个配出来时候的骄傲!希望本篇文章可以给予你一些帮助,下面正式开始


1.事前准备

Hadoop,说白了就是让我们计算机的算力可以进行分散,小唐这个月的搭建是真的,啊啊啊啊啊,为了让后人避免踩坑,以及后续自己也可以回来看看,就简单的说一下自己的搭建流程。

咱们首先准备好这些软件

1. VMware
2. CentOS-7-x86_64
3. hadoop-2.7.3.tar(Hadoop的安装文件)
4. jdk-8u65-linux-x64.t.gz(hadoop是基于java的,所以要有java的jdk)
5. SSH(远程连接工具)
6. winSCP(远程传输工具)

当然,小唐也帮大家全都整理出来了,大家可以直接通过网盘自行下载

c 复制代码
链接:https://pan.baidu.com/s/1-bvzJBpRVCsgslOkYP26zA?pwd=yu9a 
提取码:yu9a 
--来自百度网盘超级会员V4的分享

说明,因为这里涉及到多台计算机的共同操作,对于主节点namenode 整篇文章照做,对于datanode节点,除了Hadoop的配置,其他照做,如果配置主机数为多太,只需在后更改hadoop配置文件即可


2.主机互联(namenode和datanode都做)

2.1 创建虚拟机







我们稍等一会,然后就可以看到我们的系统了!


2.2 配置网络

在这里说一下原理,原理就是让我们的主机和所有部署的虚拟机处于同一个网段下,然后我们的主机可以去连我们的虚拟机,我们虚拟机可以去连我们的主机,我们虚拟机之间也可以相互连接。实现了这一步,我们就可以在主机通过我们的ssh软件来对虚拟机进行访问了(只要虚拟机开着,都是这一个wifi,所有电脑都可以连你的虚拟机)


2.2.1寻找空闲IP地址

在windows里面,我们连上自己的wifi,win+r然后打开咱们的cmd窗口

输入ipconfig 在这里可以看到自己所有的网段配置信息

咱们去找到无线局域网适配器 WLAN

这个就是我们等会要用到的信息了,我们可以我现在是处于

c 复制代码
192.168.2.6

这一个网段下,也就是我自己的电脑的IP地址(IP地址不可以重复,重复会引起冲突)

然后我们ping 一下

很明显,因为我现在的这台电脑在使用192.168.2.6这个ip所有他是会有回应的,但是为了让IP地址不重复,我们就要在这个网段下找没有人使用的

cpp 复制代码
我的IP是192.168.2.6,那么我就找192.168.2.***(随便一个不超过255的数)
如果你的IP是172.20.43.5,那么你就找172.20.43.***(随便一个不超过255的数)

如果出现无法访问目标主机,那么恭喜你找到了,这个位置就是没有人使用的,也就是我们说的空闲ip,小唐选取了这两个来作为自己虚拟机分配的IP,这个ip我们先记住 (如果换了WiFi那么我们的ip也是会发生改变的)

c 复制代码
192.168.2.125
192.168.2.126(这个是另外一台电脑的为了后面演示,我配置了两台虚拟机,每一个虚拟机都要分配一个IP地址)

2.2.2配置ifcfg-eno16777736

我们首先先进入这个文件夹

c 复制代码
cd /etc/sysconfig/network-scripts

然后输入ls

就可以看到我们的这个文件了,使用vi对他进行编辑

c 复制代码
vi ifcfg-eno16777736


注意:先按一下字母i(就是键盘上面的)进入编辑模式

上面的配置和俺一样,后面的依据每一个的IP地址不同,是要发生改变的

按键盘ESC(一般来说都在左上角)退出编译模式,然后输入

cpp 复制代码
:wq

回车退出后重启,输入

cpp 复制代码
service network restart

出现了,这个我们就基本配置好了,如果报错,请检查,你写得有没有和小唐一样,字母呀啥的

然后我们返回我们主机,再去ping一下我们现在配置好的192.168.2.125

我们的主机就可以访问到我们的虚拟机啦,然后我们也可以用我们的远程软件ssh直接去访问虚拟机,如果还是没有成功,请我们去检查一下有没有开网络防火墙 ,我们配置文件 有没有写对,还有就是我们的网络形式是不是桥接
为了不影响阅读体验,文章末尾给出了检查方法


2.2.3 pc端ssh登录linux(xshell也可以)


输入我们用户的密码

2.3 实现相互免密登录(namenode和datanode都做)

这一部分是为我们后续hadoop的实现打好基础,配置尤其重要,在这里要注意hostname和hosts里面的名字相同(小唐之前应为这个搞了好久)


2.3.1修改主机名及主机配置文件

修改咱们的主机名(修改完之后,不会马上显示)

cpp 复制代码
 vi /etc/hostname

还是一样的,先输入字母i进入编辑模式,然后改名,在输入Esc退出编辑模式,输入:wq保存

一般如果是主节点都叫做namenode,分结点就叫做datanode1,datanode2,datanode3,然后我们再将我们的ip地址和修改后的主机名写入hosts

c 复制代码
vi /etc/hosts

这样之后,我们ping的时候,就可以直接使用对方的主机名啦!!!


2.3.1生成公钥实现免密登录

关闭我们的防火墙

cpp 复制代码
systemctl stop firewalld.service

先回到最开始的目录

cpp 复制代码
cd /

执行

cpp 复制代码
ssh-keygen -t rsa

然后一直按回车

就可以看到我们现在生成的公钥和私钥了,然后我们将我们的公钥传到对方的主机上面

这里注意,我们的公钥和私钥只生产一次!!!

这里注意,我们的公钥和私钥只生产一次!!!

这里注意,我们的公钥和私钥只生产一次!!!

如果生成多次请删除所有文件,重新生成

cpp 复制代码
 ssh-copy-id root@datanode
 ssh-copy-id root@你另外一台电脑的主机名(hosts里面的)


hosts里面我们写了几个,我们就重复操作几次操作,将主节点的生产的密钥传到我们的分结点
这里注意,如果你是namenode节点,那么你还需要自己可以免密登录你自己

cpp 复制代码
ssh datanode
ssh XXX(你要登录的主机名)

如上图所示,我们就可以免密登录到我们的datanode节点了

如果需要退出,使用exit直接退出

cpp 复制代码
exit

3.配置java jdk(namenode和datanode都做)

3.1winSCP上传java

我们输入我们ip地址和账号密码

创建software文件夹

将我们java的jdk拖入software文件里面

我们拖入后,使用

cpp 复制代码
cd /software
ls

再用ls去看我们的目录下有了java的解压包

解压文件

cpp 复制代码
 tar -xzvf jdk-8u65-linux-x64.t.gz

修改文件夹名字

cpp 复制代码
mv jdk1.8.0_65  jdk

3.2 配置全局变量

进入配置文件

cpp 复制代码
vi /etc/profile

添加配置文件(为了避免hadoop配置,我们在这里就把Hadoop的配置好)

cpp 复制代码
export JAVA_HOME=/software/jdk/
export PATH=.:$PATH:$JAVA_HOME/bin:$PATH

export HADOOP_HOME=/software/hadoop
export PATH=.:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

直接把他们加在最后面

让配置文件生效

cpp 复制代码
source /etc/profile

检查是否位置完成

cpp 复制代码
java -version

像这样无论在哪里都可以看到我们java的版本就欧克啦!


4.配置Hadoop(datanode和namenode分开)

4.1主节点配置 (namenode做)

4.1.1winSCP上传到software目录

进入到我们software的文件夹,然后查看,再去解压

cpp 复制代码
cd /software
ls
tar -xzvf hadoop-2.7.3.tar.gz

修改下名字

cpp 复制代码
mv hadoop-2.7.3 hadoop

4.1.2 修改Hadoop配置文件

在小唐的配置文件里面,有一个Hadoop配置用例,作为参考,我们也在这个基础上面进行修改,在window上面修改,然后再通过winspc上传到Linux


4.1.2.1 core-site.xml

4.1.2.2 hadoop-env.sh

4.1.2.3 hdfs-site.xml

4.1.2.4 mapred-site.xml

4.1.2.5 slaves

4.1.2.6yarn-site.xml

4.1.3 上传至Linux

将我们刚刚修改过的所有文件上传至这个目录

cpp 复制代码
/software/hadoop/etc/hadoop

全都选择进行覆盖


4.1.3 打包Hadoop分发至datanode

进入到software目录后,对hadoop进行打包

cpp 复制代码
cd /software
tar -czvf hadoop.tar.gz hadoop

将其进行分发

cpp 复制代码
scp hadoop.tar.gz datanode:/software
scp hadoop.tar.gz (文件名)   datanode(hosts里面的节点):/software(分发位置)

4.2 分节点配置 (datanode做)

经过namenode分发之后,我们可以在各自的datanode里面看到

我们再对其进行解压

cpp 复制代码
cd /software
tar -zxvf hadoop.tar.gz hadoop

4.3 启动集群(namenode做)

格式化集群

cpp 复制代码
hdfs namenode -format

启动集群

cpp 复制代码
start-all.sh

jps查看状态

cpp 复制代码
jps

查看集群报告

cpp 复制代码
hdfs dfsadmin -report

停止集群报告

cpp 复制代码
stop-all.sh

5.如何检查错误

5.1jdk是否安装及是否为全局变量

cpp 复制代码
java -version

查看是否可以现实java的信息,如果虚拟机java没有报错,但是我们在执行Hadoop时候java报错了,别忘记了在我们**hadoop-env.sh(详见4.1.2.2)**文件处,也有个java需要配置。

cpp 复制代码
/software/jdk/bin/java:没有那个文件或目录

5.2是否互联互通

需要我每一台主机可以ping通我们hosts里面的主机名

Namendoe

Datanodea

Datanodeb

Datanodec

5.3检查免密登录

特别是namenode节点到namenode节点

还有namenode节点到其他的datanode节点

cpp 复制代码
ssh xxx(主机名)

5.4hadoop的配置文件

我们主机名 hosts 还有slaves名字是否一致(主要对于datanode来说),我们主节点的名字有没有修改

6.常见问题和解决方案

6.1 ifcfg-eno16777736 ping不通外网,外面ping不通虚拟机

1.在虚拟机内ping 外网

cpp 复制代码
ping wwww.baidu.com

前面IP请检查是否为你修改的IP,如果没有就是你没有ifcfg-eno16777736没有配置好

2.点击你的虚拟机设置,检查网络是否为桥接(详见 2.1 创建虚拟机)

3.检查在物理机(windows上),是否存在VM网络配置问题,一般vm没删干净和配置出错会有这个问题

在桌面空白处右击,点击个性化,进入设置,搜索控制面板

点击查询网络状态和任务

检查是否为感叹号

如果有请找到,VM的安装包,在管理员模式下运行,尝试修复,修复后再次检查,如果还不行,直接删除再重新安装也是可以的(记住你装虚拟机的位置,你的虚拟机不会被删除)


6.2 hdfs namenode -format失败

cpp 复制代码
那是我们格式化多次,我们需要对我们每一个节点生成的格式化文件进行删除
详见4.1.2.1 core-site.xml需对里面那个路劲全删掉

(如果里面没有重要数据,直接全都删除,重新初始化即可,如果有需要打开内置文件对版本号进行手动修改)
结点信息存储在core-site.xml文件中

cpp 复制代码
1.删除两台主机"/data/hadoop"里面的内容
rm -rf /data/hadoop
2.重新格式化
hadoop namenode -format
4.启动hadoop
start-all.sh

6.3 hdfs dfsadmin -report全为0

用户名不对

cpp 复制代码
这个的原因是因为我们hostname和我们datanode主机名不一致导致的,比如我现在有三台
IP                  主机名
172.2.111.10        namendoe
172.2.111.11        datandoe1
172.2.111.12        datandoe2
172.2.111.13        datandoe3
然后我为了省事在hosts这样写
172.2.111.10        namendoe
172.2.111.11        dn1
172.2.111.12        dn2
172.2.111.13        dn3
然后在slaves这样写
dn1
dn2
dn3
就会出现这个错误,我们直接修改我们的主机名就可以了,全改成一样的
相关推荐
小黑爱编程37 分钟前
【LInux】HTTPS是如何实现安全传输的
linux·安全·https
BeyondESH42 分钟前
Linux线程同步—竞态条件和互斥锁(C语言)
linux·服务器·c++
鱼饼6号1 小时前
Prometheus 上手指南
linux·运维·centos·prometheus
Asher Gu1 小时前
Linux系统编程入门 | 模拟实现 ls -l 命令
linux
c无序1 小时前
【Linux进程控制】进程程序替换
linux
江畔独步4 小时前
Hive内置集合函数-size,map_keys,map_values,sort_array,array_contains
数据仓库·hive·hadoop
小安运维日记4 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
天地风雷水火山泽4 小时前
二百六十五、Hive——目前Hive数仓各层表样例
数据仓库·hive·hadoop
棉花糖灬4 小时前
Hive常用函数
数据仓库·hive·hadoop
CoolTiger、7 小时前
【Vmware16安装教程】
linux·虚拟机·vmware16