centOS7搭建hadoop2.7环境(新手小白教程!)

centOS7搭建hadoop2.7环境(新手小白教程!)

网络架构
本文在VMware上构建三个虚拟机,一个hd-master,两个hd-slave,具体网络环境如下图所示:
在这里插入图片描述

安装步骤

1、主机名及IP配置

① 永久性的修改主机名称,重启后能保持修改后的。hostname 主机名

hostname xxx

② 手动设置

vim /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 xxxxx
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
::1 xxxxx

重启虚拟机可以发现主机名已经改好了,接下来设置虚拟机ip

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

编辑ifcfg-ens33里的内容(注意每个人的电脑可能不同)
在这里插入图片描述
图中红线框里一定要修改,没有的添加上
在这里插入图片描述
关于NETMASK,GATEWAY,BROADCAST怎么填,看虚拟机->编辑->虚拟网络编辑器 ,选中NAT,NAT设置
也可以自己设置
在这里插入图片描述

三台都需要设置
我的三台ip分别为
hd-master 192.168.0.121
hd-slave1 192.168.0.122
hd-slave2 192.168.0.123

2、配置host文件

ip改完了,现在来修改hostname(为什么要改hostname?!那你想每次都输一串ip地址吗?)
hostnamectl set-hostname 【你要的名字】 这样会修改三种主机名
hostnamectl –static set-hostname 【你要的名字】 只会修改static主机名
重启后你的hostname就变了
我这里是将一个改为hd-master
另外两个为hd-slave1和hd-slave2

vim /etc/hosts

修改如下,这样在这三台主机间才能通过hostname来识别彼此
修改完成后,Esc+“:wq”保存退出
!!!非常重要的一步:重启网络服务

使用service network restart命令,重启网络服务。
查看我们改动后的效果

因为现在是Centos7所以我们使用新的命令,我们输入ip addr进行查看。
在这里插入图片描述
修改成功!
若三台虚拟机能够互相通过ping hd-master , ping hd-slave1 , ping hd-slave2连通代表配置成功。
在这里插入图片描述

3、安装JDK

安装前使用命令java-version检查系统是否安装默认JDK版本,若有安装,请先卸载系统自带JDK,安装OracleJDK,在Oracle官网下载JDK1.7版本,以安装jre-8u281-linux-x64.tar.gz为例。
首先需要将压缩包传入虚拟机中,安装一个
在这里插入图片描述
安装成功
在这里插入图片描述
使用方法:https://blog.csdn.net/zhailihua/article/details/75950012
也可以采用https://www.jianshu.com/p/dbef97db99ba中的pscp命令传输,但需要先将本机ip地址与虚拟机ip地址设置在同一个网段中,如我设置本机为192.168.0.133。
在这里插入图片描述
设置好后ping一下虚拟机检查是否连通,若连通则可开始文件传输。

使用 以下命令 pscp tnsnames.ora root@192.168.50.5:/home

如果报ssh_init: Network error: Cannot assign requested address 错误

解决方法是加上端口号,如下所示:

pscp -P 22 tnsnames.ora root@192.168.50.5:/home
在这里插入图片描述

传输成功在这里插入图片描述

  • 解压JDK到/usr/lib/jvm目录

$ mkdir -p /usr/lib/jvm
$ cd /usr/lib/jvm/
$ tar -zxvf /etc/jre-8u281-linux-x64.tar.gz
$ mv jre1.8.0_281 jdk           //注意!这里为了方便是将jre1.8.0_281改名为jdk了,如果不需要或者不太记得的话可以不改,改了的话后续的环境配置就直接写jdk就好

在这里插入图片描述
编辑/etc/profile

export JAVA_HOME=/usr/lib/jvm/jdk //我这里是前面已经将jre1.8.0_281改名为jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
在这里插入图片描述

(4)使配置生效,输入命令,source /etc/profile
(5)输入命令,java -version,完成
在这里插入图片描述

4、SSH免密码登录

提示:我全程用的都是root用户,没有另外创建用户。每台服务器都生成公钥,再合并到authorized_keys。

  1. CentOS默认没有启动ssh无密登录,去掉/etc/ssh/sshd_config其中2行的注释,每台服务器都要设置,查找

#RSAAuthentication yes
#PubkeyAuthentication yes

修改成

RSAAuthentication yes
PubkeyAuthentication yes

  1. 输入命令,ssh-keygen -t rsa,生成key,都不输入密码,一直回车,/root就会生成.ssh文件夹,每台服务器都要设置
    在这里插入图片描述

  2. 合并公钥到authorized_keys文件,在master服务器,进入/root/.ssh目录,通过SSH命令合并,(~/.ssh/id_rsa.pub 是省略的写法,要根据实际路径来确定)

cat id_rsa.pub>> authorized_keys
ssh root@192.168.186.122 cat ~/.ssh/id_rsa.pub >> authorized_keys
ssh root@192.168.186.123 cat ~/.ssh/id_rsa.pub >> authorized_keys

在这里插入图片描述
可通过 more authorized_keys 查看
在这里插入图片描述

  1. 拷贝authorized_keys 文件到hd-slave1 , hd-slave2服务器
    通过scp命令拷贝authorized_keys 到hd-slave1 , hd-slave2服务器/ home/hadoop/.ssh/目录。

scp -r /root/.ssh/authorized_keys root@hd-slave1:/root/.ssh/
scp -r /root/.ssh/known_hosts root@hd-slave1:/root/.ssh/

scp -r /root/.ssh/authorized_keys root@hd-slave2:/root/.ssh/ scp
-r /root/.ssh/known_hosts root@hd-slave2:/root/.ssh/

在这里插入图片描述

  1. 完成后,ssh root@hd-slave1、ssh root@hd-slave2或者(ssh root@192.168.0.122、ssh root@192.168.0.123) 就不需要输入密码直接登录到其他节点上。

6)修改authorized_keys权限
在.ssh目录下分别修改hd-master , hd-slave1 , hd-slave2服务器authorized_keys文件权限

chmod 700 authorized_keys

测试SSH免密码登录
进入hd-master ,输入ssh username@hostname测试是否配置成功,如下图所示:
在这里插入图片描述

5、Hadoop集群安装

所有的机器上都要安装hadoop,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装和配置hadoop需要以"root"的身份进行。

5.1 安装hadoop

首先用root用户登录虚拟机,查看我们之前上传的"hadoop-1.0.0.tar.gz"。

接着把"hadoop-1.0.0.tar.gz"复制到"/usr"目录下面。
cp /home/hadoop/hadoop-1.0.0.tar.gz /usr

下一步进入"/usr"目录下,用下面命令把"hadoop-1.0.0.tar.gz"进行解压,并将其命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop,然后删除"hadoop-1.0.0.tar.gz"安装包。
cd /usr #进入"/usr"目录
tar –zxvf hadoop-1.0.0.tar.gz #解压"hadoop-1.0.0.tar.gz"安装包
mv hadoop-1.0.0 hadoop #将"hadoop-1.0.0"文件夹重命名"hadoop"
chown –R hadoop:hadoop hadoop #将文件夹"hadoop"读权限分配给hadoop用户
rm –rf hadoop-1.0.0.tar.gz #删除"hadoop-1.0.0.tar.gz"安装包

解压后,并重命名。

把"/usr/hadoop"读权限分配给hadoop用户(非常重要)

删除"hadoop-1.0.0.tar.gz"安装包

最后在"/usr/hadoop"下面创建tmp文件夹,把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效:

#set hadoop path

export HADOOP_HOME=/usr/hadoop export PATH=$PATH:$HADOOP_HOME/bin

1)在"/usr/hadoop"创建"tmp"文件夹
mkdir /usr/hadoop/tmp

2)配置"/etc/profile"

vim /etc/profile

配置后的文件如下:

3)重启"/etc/profile"

source /etc/profile

5.2 配置hadoop

1)配置hadoop-env.sh
  该"hadoop-env.sh"文件位于"/usr/hadoop/conf"目录下。

在文件的末尾添加下面内容。

#set java environment
export JAVA_HOME=/usr/lib/jvm/jdk

Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。
  2)配置core-site.xml文件
  修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号。


hadoop.tmp.dir
/usr/hadoop/tmp
(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹)
A base for other temporary directories.

fs.default.name hdfs://192.168.1.2:9000 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210527173731650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE3NzQ5NA==,size_16,color_FFFFFF,t_70)

备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。
用下面命令进行编辑:

编辑结果显示如下:

3)配置hdfs-site.xml文件
  修改Hadoop中HDFS的配置,配置的备份方式默认为3。


dfs.replication
1
(备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)


  用下面命令进行编辑:

编辑结果显示如下:

4)配置mapred-site.xml文件
  修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。


mapred.job.tracker
http://192.168.1.2:9001


  用下面命令进行编辑:

编辑结果显示如下:

5)配置masters文件
  有两种方案:
(1)第一种
修改localhost为Master.Hadoop
(2)第二种
去掉"localhost",加入Master机器的IP:192.168.1.2
  为保险起见,启用第二种,因为万一忘记配置"/etc/hosts"局域网的DNS失效,这样就会出现意想不到的错误,但是一旦IP配对,网络畅通,就能通过IP找到相应主机。
  用下面命令进行修改:

编辑结果显示如下:

6)配置slaves文件(Master主机特有)
有两种方案:
(1)第一种
去掉"localhost",每行只添加一个主机名,把剩余的Slave主机名都填上。
例如:添加形式如下
Slave1.Hadoop
Slave2.Hadoop
Slave3.Hadoop
(2)第二种
去掉"localhost",加入集群中所有Slave机器的IP,也是每行一个。
例如:添加形式如下
192.168.1.3
192.168.1.4
192.168.1.5
  原因和添加"masters"文件一样,选择第二种方式。
  用下面命令进行修改:

编辑结果如下:

现在在Master机器上的Hadoop配置就结束了,剩下的就是配置Slave机器上的Hadoop。
  一种方式是按照上面的步骤,把Hadoop的安装包在用普通用户hadoop通过"scp"复制到其他机器的"/home/hadoop"目录下,然后根据实际情况进行安装配置,除了第6步,那是Master特有的。用下面命令格式进行。(备注:此时切换到普通用户hadoop)
scp ~/hadoop-1.0.0.tar.gz hadoop@服务器IP:~/
例如:从"Master.Hadoop"到"Slave1.Hadoop"复制Hadoop的安装包。

另一种方式是将 Master上配置好的hadoop所在文件夹"/usr/hadoop"复制到所有的Slave的"/usr"目录下(实际上Slave机器上的slavers文件是不必要的, 复制了也没问题)。用下面命令格式进行。(备注:此时用户可以为hadoop也可以为root)
scp -r /usr/hadoop root@服务器IP:/usr/
例如:从"Master.Hadoop"到"Slave1.Hadoop"复制配置Hadoop的文件。

上图中以root用户进行复制,当然不管是用户root还是hadoop,虽然Master机器上的"/usr/hadoop"文件夹用户hadoop有权限,但是Slave1上的hadoop用户却没有"/usr"权限,所以没有创建文件夹的权限。所以无论是哪个用户进行拷贝,右面都是"root@机器IP"格式。因为我们只是建立起了hadoop用户的SSH无密码连接,所以用root进行"scp"时,扔提示让你输入"Slave1.Hadoop"服务器用户root的密码。
查看"Slave1.Hadoop"服务器的"/usr"目录下是否已经存在"hadoop"文件夹,确认已经复制成功。查看结果如下:

从上图中知道,hadoop文件夹确实已经复制了,但是我们发现hadoop权限是root,所以我们现在要给"Slave1.Hadoop"服务器上的用户hadoop添加对"/usr/hadoop"读权限。
  以root用户登录"Slave1.Hadoop",执行下面命令。
chown -R hadoop:hadoop(用户名:用户组) hadoop(文件夹)

接着在"Slave1 .Hadoop"上修改"/etc/profile"文件(配置 java 环境变量的文件),将以下语句添加到末尾,并使其有效(source /etc/profile):

#set hadoop environment
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

如果不知道怎么设置,可以查看前面"Master.Hadoop"机器的"/etc/profile"文件的配置,到此为此在一台Slave机器上的Hadoop配置就结束了。剩下的事儿就是照葫芦画瓢把剩余的几台Slave机器按照《从"Master.Hadoop"到"Slave1.Hadoop"复制Hadoop的安装包。》这个例子进行部署Hadoop。

5.3 启动及验证

1)格式化HDFS文件系统
  在"Master.Hadoop"上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)
hadoop namenode -format
  某些书上和网上的某些资料中用下面命令执行。

我们在看好多文档包括有些书上,按照他们的hadoop环境变量进行配置后,并立即使其生效,但是执行发现没有找见"bin/hadoop"这个命令。

其实我们会发现我们的环境变量配置的是"$HADOOP_HOME/bin",我们已经把bin包含进入了,所以执行时,加上"bin"反而找不到该命令,除非我们的hadoop坏境变量如下设置。

#set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH : $HADOOP_HOME :$HADOOP_HOME/bin

这样就能直接使用"bin/hadoop"也可以直接使用"hadoop",现在不管哪种情况,hadoop命令都能找见了。我们也没有必要重新在设置hadoop环境变量了,只需要记住执行Hadoop命令时不需要在前面加"bin"就可以了。

从上图中知道我们已经成功格式话了,但是美中不足就是出现了一个警告,从网上的得知这个警告并不影响hadoop执行,但是也有办法解决,详情看后面的"常见问题FAQ"。
  2)启动hadoop
  在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。
service iptables stop
  使用下面命令启动。
start-all.sh

执行结果如下:

可以通过以下启动日志看出,首先启动namenode 接着启动datanode1,datanode2,…,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,tasktracker2,…。
  启动 hadoop成功后,在 Master 中的 tmp 文件夹中生成了 dfs 文件夹,在Slave 中的 tmp 文件夹中均生成了 dfs 文件夹和 mapred 文件夹。
  查看Master中"/usr/hadoop/tmp"文件夹内容

查看Slave1中"/usr/hadoop/tmp"文件夹内容。

3)验证hadoop
  (1)验证方法一:用"jps"命令
  在Master上用 java自带的小工具jps查看进程。

在Slave1上用jps查看进程。

如果在查看Slave机器中发现"DataNode"和"TaskTracker"没有起来时,先查看一下日志的,如果是"namespaceID"不一致问题,采用"常见问题FAQ6.2"进行解决,如果是"No route to host"问题,采用"常见问题FAQ6.3"进行解决。
  (2)验证方式二:用"hadoop dfsadmin -report"
  用这个命令可以查看Hadoop集群的状态。
  Master服务器的状态:

Slave服务器的状态

5.4 网页查看集群

1)访问"http:192.168.1.2:50030"

2)访问"http:192.168.1.2:50070"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fuhanghang@yeah.net

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值