hadoop-3.2.0分布式环境搭建--详细教程

手把手教大家使用hadoop-3.2.0搭建MapReduce分布式环境

笔者使用VMware-workstation15+CentOS7+hadoop-3.2.0+jdk1.8.0_11,在本机使用虚拟机搭建了一主两从三个结点。话不多说,上干货。

  1. 下载WMwork15,并安装,如需破解,请百度一个注册码即可,至于hadoop,jdk和CentOS7,大家也可以在网上自行下载,这里就不赘述。

  2. 打开WMwork15,并新建虚拟机,
    点击新建虚拟机后
    下一步:
    选择CentOS7镜像文件
    下一步:
    对虚拟机进行命名,并选择安装位置
    【注】主节点一般命名为namenode.安装位置不要选在C盘,虚拟机很占空间。
    下一步:
    指定磁盘容量
    下一步:
    这里就创建好了
    【注】这里点击自定义硬件可以修改虚拟机的设置,笔者在这里把主节点的内存设置为了2048MB

  3. 对CentOS7的设置:
    在这里插入图片描述
    对系统模块进行点击设置
    设置系统语言
    选择安装模式
    【注】在这里选择带界面的安装还是简单安装,笔者将主节点的安装设置带操作界面的模式。

下一步:进行网络设置,点击wmwork的编辑–虚拟网络编辑器。选择NAT模式:
在这里插入图片描述
【注】为保证虚拟机和宿主机处于同一网段中(只有这样才能 ping 通),设置网卡地址与 VMne8t 同网段,故虚拟机的 IP 地址应设为 192.168.137.x,这里设置为 192.168.137.130。 点击“NAT 设置”,查看网关 IP,一般为 xxx.xxx.xxx.2,这里设置为 192.168.137.2
在这里插入图片描述
再对centos7的网络进行设置:
在这里插入图片描述
在这里插入图片描述
【注】注意修改主机名,如若忘记,安装完成后也可修改

设置root用户密码
创建一个普通用户
【注】创建完成后,安静等待一会儿。

安装完成后,以 root 用户登录,关闭防火墙,并禁止开机启动防火墙。这样能省很多麻烦。

[root@namenode ~]# systemctl stop firewalld.service 
[root@namenode ~]# systemctl disable firewalld.service 

测试网络连通性: 在本机使用cmd等ping一下
ping
【注】如果返回结果如图所示就说明网络配置成功。当然,也可以在虚拟机中ping宿主机。
若ping不通,查看虚拟机的防火墙是否关闭,宿主机的防火墙也可在控制面板中关闭。

3.1 对从节点进行安装设置
建立从节点datanode1
选择最小安装
设置网络

设置网络和主机名
关闭防火墙等
3.2 第二个从节点既可以通过克隆实现,也可以通过手动再安装一遍,如若害怕出错,笔者推荐手动再安装一次。但是笔者在这里介绍一个克隆的方法。

关闭虚拟机 datanode1,选择菜单栏中的“虚拟机”——>“管理”——>“克隆”。 克隆类型选择“创建完整克隆”

创建完整克隆
设置为datanode2
更改虚拟机的MAC地址

datanode1: HWADDR=00:0C:29:F6:EA:26 
datanode2: HWADDR=00:50:56:32:A1:9A 

地址与被克隆的虚拟机不重复即可。

以 root 用户登录,更改新建主机的 hostname

[root@datanode1 ~]# vi /etc/hostname 

将原有的 datanode1 改为 datanode2。
更改 datanode2 的 IP 配置,其中 eno16777736 是 CentOS 7 默认的网卡名称(7 之 前的版本默认名称为 eth0)。

[root@datanode1~]#vi/etc/sysconfig/network-scripts/ifcfg-eno16777736 IPADDR="192.168.137.132

关闭防火墙。

4.建立三个结点的ssh免密互访,
笔者使用的XShell连接工具,大家也可使用 SecureCRT
在这里新建会话
输入ip地址
双击,并输入普通用户的账号密码进行登录,成功如下图所示
登录成功
同理,建立其他两个连接即可

	以 root 用户登录 namenode,修改/etc/hosts 文件。 将原有的内容注释,并改为以下内容
192.168.137.130 namenode 
192.168.137.131 datanode1 
192.168.137.132 datanode2 

将/etc/hosts 文件拷贝至另两台虚拟机中。

[root@namenode ~]# scp /etc/hosts root@192.168.137.131:/etc/hosts 
[root@namenode ~]# scp /etc/hosts root@192.168.137.132:/etc/hosts 

效果如图
分别在 namenode、datanode1、datanode2 虚拟机中,使用 hadoop 用户登录,生成 密钥对。

[trs@namenode ~]$ ssh-keygen -t rsa 

中途采用默认值(需按三次“回车”)。
按三次回车
同理,在datanode1和datanode2中执行相同的操作。
此时,在/home/trs(你的用户名)/.ssh/目录下分别生成一个私钥 id_rsa 和一个公钥 id_rsa.pub。

分别以 trs用户(普通用户)登录 datanode1 和 datanode2,复制主节点 namenode 的公钥文件 至从节点 datanode1 和 datanode2。

[trs@datanode1 ~]$ scp /home/trs/.ssh/id_rsa.pub trs@namenode:/home/hadoop/.ssh/id_rsa.pub.datanode1
[trs@datanode2 ~]$ scp /home/trs/.ssh/id_rsa.pub trs@namenode:/home/hadoop/.ssh/id_rsa.pub.datanode2
[trs@namenode ~]$ cd /home/trs/.ssh/ 
[trs@namenode .ssh]$ cat id_rsa.pub >> authorized_keys 
[trs@namenode .ssh]$ cat id_rsa.pub.datanode1 >> authorized_keys 
[trs@namenode .ssh]$ cat id_rsa.pub.datanode2 >> authorized_keys 
[trs@namenode .ssh]$ chmod 600 ~/.ssh/authorized_keys 

这一步就是将三个结点的ssh公钥导入到namenode的authorized_keys 文件中,
【注】一定要对authorized_keys 进行赋权。
再将这个文件拷贝到其他两个文件中

[trs@namenode .ssh]$ scp ~/.ssh/authorized_keys trs@datanode1:/home/trs/.ssh/authorized_keys 
[trs@namenode .ssh]$ scp ~/.ssh/authorized_keys trs@datanode2:/home/trs/.ssh/authorized_keys 

说明:[hadoop@namenode ~]$ ssh-keygen -t rsa 这个命令将为 namenode 上的用 户 hadoop 生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入 passphrase 的时候,直接回车,也就是将其设定为空密码。 生成的密钥对 id_rsa, id_rsa.pub,默认存储在/home/hadoop/.ssh 目录下然后将 id_rsa.pub 的内容复制到每个机器(也 包括本机)的/home/dbrg/.ssh/authorized_keys 文件中,如果机器上已经有 authorized_keys 这个 文件了,就在文件末尾加上 id_rsa.pub 中的内容,如果没有 authorized_keys 这个文件,直接 复制过去就行。

测试连通性

[trs@datanode1 ~]$ ssh namenode 
[trs@datanode1 ~]$ ssh datanode2 
[trs@datanode2 ~]$ exit

对三个结点进行相同测试即可

  1. 安装jdk和hadoop

    首先在/home/trs(你的用户名)下建立Hadoop目录,使用FlashFXP将jdk与hadoop3.2的安装包导入此目录中,使用如下命令进行解压

tar -zxvf jdk-8u11-linux-x64.tar.gz -C /home/trs/Hadoop
tar -zxvf hadoop-3.2.0.tar.gz -C /home/trs/Hadoop

解压后效果如图:
/home/trs/Hadoop目录内容
以下都是配置普通用户的环境变量,使用普通用户登录。配置jdk环境变量,执行命令

vim ~/.bash_profile

编辑该文件,内容如下:

	if [ -f ~/.bashrc ]; then
        . ~/.bashrc
	fi

	export JAVA_HOME=/home/trs/Hadoop/jdk1.8.0_11
	export JRE_HOME=/home/trs/Hadoop/jdk1.8.0_11/jre
	export CLASSPATH=.:$CLASSPATH:${JAVA_HOME}/lib:$JRE_HOME/lib
	export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/bin

编辑完成并保存退出后,刷新上述配置,使配置立即生效:

source ~/.bash_profile

运行java或javac命令

java -version

出现如下说明,则配置成功
配置hadoop

vi /home/trs/Hadoop/hadoop-3.2.0/etc/hadoop/hadoop-env.sh

添加以下内容

export JAVA_HOME=/home/trs/Hadoop/jdk1.8.0_11

配置环境变量:

vim ~/.bash_profile

在底部添加如下内容

export HADOOP_HOME=/home/trs/Hadoop/hadoop-3.2.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

是配置立即生效

source ~/.bash_profile
hadoop version

hadoop版本信息

  1. 分布式环境的实现
    配置Hadoop环境脚本文件中的JAVA_HOME参数,路径:/home/trs/Hadoop/hadoop-3.2.0/etc/hadoop:分别在hadoop-env.shmapred-env.sh、yarn-env.sh文件中添加或修改如下参数
export JAVA_HOME=/home/trs/Hadoop/jdk1.8.0_11

修改core-site.xml中的内容
【注】其中的文件夹若不存在,请手动创建

<configuration>
		<property>
			<name>fs.defaultFS</name>
			<value>hdfs://node178:9000</value>
		</property>
		<property>
			<!-- 保存临时文件目录,需先在/home/trs/Hadoop/hadoop-3.2.0/下创建tmp目录 -->
			<name>hadoop.tmp.dir</name>
			<value>/home/trs/Hadoop/hadoop-3.2.0/tmp</value>
		</property>
	</configuration>

修改hdfs-site.xml文件

<configuration>
	
      <property>
         <!-- 主节点地址 -->
          <name>dfs.namenode.http-address</name>
          <value>node178:50070</value>
      </property>
	  
      <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:/home/trs/Hadoop/hadoop-3.2.0/dfs/name</value>
      </property>
	  
     <property>
         <name>dfs.datanode.data.dir</name>
         <value>file:/home/trs/Hadoop/hadoop-3.2.0/dfs/data</value>
     </property>
	 
     <property>
        <!-- 备份数为默认值3 -->
        <name>dfs.replication</name>
        <value>3</value>
     </property>
	 
     <property> 
    <name>dfs.webhdfs.enabled</name> 
    <value>true</value> 
  </property>

  <property>
    <name>dfs.permissions</name>
    <value>false</value>
    <description>配置为false后,可以允许不要检查权限就生成dfs上的文件,方便倒是方便了,但是你需要防止误删除.</description>
  </property>

	</configuration>

修改mapred-site.xml文件

<configuration>
      <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value> 
		  <!--#设置MapReduce的运行平台为yarn-->
      </property>
	 
	</configuration>

修改yarn-site.xml文件

<configuration>
	
	<property>
         <name>yarn.resourcemanager.hostname</name> #指定yarn的ResourceManager管理界面的地址,不配的话,Active Node始终为0
         <value>node178</value>
    </property>
	 
     <property>
         <name>yarn.nodemanager.aux-services</name>  #reducer获取数据的方式
         <value>mapreduce_shuffle</value>
     </property>
	
	<property>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
	<description>忽略虚拟内存的检查,如果你是安装在虚拟机上,这个配置很有用,配上去之后后续操作不容易出问题。</description>
	</property>
	
	</configuration>

修改workers文件(其他版本的hadoop可能是slaves文件)

namdenode
datanode1
datanode2

将配置好的文件夹拷贝到datanode1、datanode2

scp -r /home/trs/Hadoop trs@datanode1:/home/trs/
scp -r /home/trs/Hadoop trs@datanode2:/home/trs/

【说明】将整个Hadoop目录拷贝到node180的trs用户目录下,包括子目录、文件

  1. 运行hadoop
    运行前需格式化目录
hdfs namenode -format

在hadoop-3.2.0/sbin目录下执行

start-all.sh

启动hadoop(stop-all.sh是停止hadoop)
使用jps命令查看正在运行的进程
namenode:
在这里插入图片描述
datanode1和datanode2:
在这里插入图片描述
出现如上内容,说明配置完成了!
【注】

问题总结:

  • 出现配置问题,请仔细检查三个结点中的用户名是不是和你的用户名相同
  • 从节点的hadoop没启动,请检查网络通信是否配置正确。
  • 出现了java.net.UnknownHostException: NW_PL3S_RZFX: NW_PL3S_RZFX: 未知的名称或服务。验证hostname是否正确。编辑/etc/hostname文件
	127.0.0.1       localhost
	192.168.137.130		NW_PL3S_RZFX
  • ssh免密登录设置,遇到下述问题,是./ssh文件访问权限不够,ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
    Generating public/private rsa key pair.
    Saving key “/home/trs/.ssh/id_rsa” failed: Permission denied 解决办法:
    登录root用户,赋予普通用户./ssh文件夹的访问权限

结束语
hadoop分布式环境配置是一件挺麻烦的事,希望大家保持耐心,相信自己能配置成功。
在这里感谢我的同事,上面很多内容是他的总结,他也帮助我解决了不少问题。这里贴出他的邮箱,以示感谢:ye.xinfa@qq.com。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值