Hadoop-集群搭建

Hadoop集群搭建

一,前期资源准备

  1. CentOS-7.5-x86_64-DVD-1804 下载地址:点我
  2. Ubuntu环境下的JDK
  3. Hadoop安装包 下载地址:点我

这里我使用的资源已上传百度云:点我 提取码:tjs4

本文为记录尚硅谷海哥的教学视屏的笔记传送门
尚硅谷海哥的教学视屏资源:点我 提取码:ikgg

二,模板虚拟机环境准备

  1. 使用VMware安装模板虚拟机,IP 地址 192.168.47.100、主机名称 hadoop100、内存 4G、硬盘 20G
    修改克隆虚拟机的静态 IP
[root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
IPADDR=192.168.47.100
GATEWAY=192.168.47.254
DNS1=114.114.114.114

修改主机名称

[root@hadoop100 ~]# vim /etc/hostname 
hadoop100

配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/hosts

[root@hadoop100 ~]# vim /etc/hosts

添加如下内容

192.168.47.100 hadoop100
192.168.47.101 hadoop101
192.168.47.102 hadoop102
192.168.47.103 hadoop103
192.168.47.104 hadoop104
192.168.47.105 hadoop105
192.168.47.106 hadoop106
192.168.47.107 hadoop107
192.168.47.108 hadoop108
  1. 确保虚拟机可以联网安装 epel-release
[root@hadoop100 ~]# yum install -y epel-release
  1. 关闭防火墙,关闭防火墙开机自启
[root@hadoop100 ~]# systemctl stop firewalld
[root@hadoop100 ~]# systemctl disable firewalld.service
  1. 创建 xumx 用户,并修改 xumx 用户的密码
[root@hadoop100 ~]# useradd xumx
[root@hadoop100 ~]# passwd xumx
  1. 配置 xumx 用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令
[root@hadoop100 ~]# vim /etc/sudoers

修改/etc/sudoers 文件,在%wheel 这行下面添加一行,如下所示:

## Allow root to run any commands anywhere
root   ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
xumx   ALL=(ALL) NOPASSWD:ALL
  1. 在/opt 目录下创建文件夹,并修改所属主和所属组
[root@hadoop100 ~]# mkdir /opt
  1. 在/opt 目录下创建 module、software 文件夹
[root@hadoop100 ~]# mkdir /opt/module
[root@hadoop100 ~]# mkdir /opt/software
  1. 修改 module、software 文件夹的所有者和所属组均为 atguigu 用户
[root@hadoop100 ~]# chown xumx:xumx /opt/module 
[root@hadoop100 ~]# chown xumx:xumx /opt/software
  1. 查看 module、software 文件夹的所有者和所属组
[root@hadoop100 ~]# cd /opt/
[root@hadoop100 opt]# ll
总用量 12
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 28 17:18 module
drwxr-xr-x. 2 root root 4096 9 月 7 2017 rh
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 28 17:18 software
  1. 卸载虚拟机自带的 JDK
[root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
  1. 重启虚拟机
[root@hadoop100 ~]# reboot

三,克隆虚拟机

  1. 利用模板机 hadoop100,克隆三台虚拟机:hadoop102 hadoop103 hadoop104(注意:克隆时,要先关闭 hadoop100)
  2. 修改克隆机 IP,以下以 hadoop102 举例说明
    修改克隆虚拟机的静态 IP
[root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
IPADDR=192.168.47.102
GATEWAY=192.168.47.254
DNS1=114.114.114.114
  1. 修改克隆机主机名,以下以 hadoop102 举例说明
    修改主机名称
[root@hadoop100 ~]# vim /etc/hostname 
hadoop102

配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/hosts

[root@hadoop100 ~]# vim /etc/hosts

添加如下内容

192.168.47.100 hadoop100
192.168.47.101 hadoop101
192.168.47.102 hadoop102
192.168.47.103 hadoop103
192.168.47.104 hadoop104
192.168.47.105 hadoop105
192.168.47.106 hadoop106
192.168.47.107 hadoop107
192.168.47.108 hadoop108
  1. 重启克隆机 hadoop102
[root@hadoop100 ~]# reboot

四,在 hadoop102 安装 JDK

  1. 用 XShell 传输工具将 JDK 导入到 opt 目录下面的 software 文件夹下面
    在这里插入图片描述

  2. 在 Linux 系统下的 opt 目录中查看软件包是否导入成功

[xumx@hadoop102 ~]$ ls /opt/software/
  1. 解压 JDK 到/opt/module 目录下
[xumx@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
  1. 配置 JDK 环境变量
    新建/etc/profile.d/my_env.sh 文件
[xumx@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh

添加如下内容

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

source 一下/etc/profile 文件,让新的环境变量 PATH 生效

[xumx@hadoop102 ~]$ source /etc/profile
  1. 测试 JDK 是否安装成功
[xumx@hadoop102 ~]$ java -version

如果能看到版本信息,则代表 Java 安装成功

四,在 hadoop102 安装 Hadoop

  1. 用 XShell 文件传输工具将 hadoop-3.1.3.tar.gz 导入到 opt 目录下面的 software 文件夹下面
  2. 进入到 Hadoop 安装包路径下
[xumx@hadoop102 ~]$ cd /opt/software/
  1. 解压安装文件到/opt/module 下面
[xumx@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
  1. 查看是否解压成功
[xumx@hadoop102 software]$ ls /opt/module/
hadoop-3.1.3
  1. 将 Hadoop 添加到环境变量
    获取 Hadoop 安装路径
[xumx@hadoop102 hadoop-3.1.3]$ pwd
/opt/module/hadoop-3.1.3

打开/etc/profile.d/my_env.sh 文件

[xumx@hadoop102 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh

在 my_env.sh 文件末尾添加如下内容:

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

让修改后的文件生效

[xumx@hadoop102 hadoop-3.1.3]$ source /etc/profile
  1. 测试是否安装成功
[xumx@hadoop102 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
  1. 重启
[xumx@hadoop102 hadoop-3.1.3]$ sudo reboot

五,SSH 无密登录配置

  1. ssh 连接时出现 Host key verification failed 的解决方法
[xumx@hadoop102 ~]$ ssh hadoop103

如果出现如下内容

Are you sure you want to continue connecting (yes/no)? 

输入 yes,并回车

  1. 退回到 hadoop102
[xumx@hadoop103 ~]$ exit
  1. 生成公钥和私钥
[xumx@hadoop102 .ssh]$ pwd
/home/xumx/.ssh

[xumx@hadoop102 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

  1. 将公钥拷贝到要免密登录的目标机器上
[xumx@hadoop102 .ssh]$ ssh-copy-id hadoop102
[xumx@hadoop102 .ssh]$ ssh-copy-id hadoop103
[xumx@hadoop102 .ssh]$ ssh-copy-id hadoop104

这样hadoop102上配置好了xumx账号无密登录到 hadoop102、hadoop103、hadoop104 服务器上。

还需要在 hadoop103 上采用 atguigu 账号配置一下无密登录到 hadoop102、hadoop103、hadoop104 服务器上。
还需要在 hadoop104 上采用 atguigu 账号配置一下无密登录到 hadoop102、hadoop103、hadoop104 服务器上。
还需要在 hadoop102 上采用 root 账号,配置一下无密登录到 hadoop102、hadoop103、hadoop104;

六,编写集群分发脚本 xsync

  1. 在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、 /opt/software 两个目录,并且已经把这两个目录修改为 xumx:xumx
[xumx@hadoop102 ~]$ sudo chown xumx:xumx -R /opt/module
  1. 在 hadoop102 上,将 hadoop102 中/opt/module/jdk1.8.0_212 目录拷贝到hadoop103, hadoop104上。
[xumx@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 xumx@hadoop103:/opt/module
[xumx@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 xumx@hadoop104:/opt/module
  1. 在 hadoop102 上,将 hadoop102 中/opt/module/hadoop-3.1.3 目录拷贝到hadoop103, hadoop104 上。
[xumx@hadoop102 ~]$ scp -r /opt/module/hadoop-3.1.3  xumx@hadoop103:/opt/module
[xumx@hadoop102 ~]$ scp -r /opt/module/hadoop-3.1.3  xumx@hadoop104:/opt/module
  1. xsync 集群分发脚本
    在/home/xumx/bin 目录下创建 xsync 文件
[xumx@hadoop102 opt]$ cd /home/xumx
[xumx@hadoop102 ~]$ mkdir bin
[xumx@hadoop102 ~]$ cd bin
[xumx@hadoop102 bin]$ vim xsync

在该文件中编写如下代码

#!/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

修改脚本 xsync 具有执行权限

[xumx@hadoop102 bin]$ chmod +x xsync

测试脚本

[xumx@hadoop102 ~]$ xsync /home/atguigu/bin

将脚本复制到/bin 中,以便全局调用

[xumx@hadoop102 bin]$ sudo cp xsync /bin/

同步环境变量配置(root 所有者)

[xumx@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh

让环境变量生效

[xumx@hadoop103 bin]$ source /etc/profile
[xumx@hadoop104 bin]$ source /etc/profile

七,集群配置

在这里插入图片描述

  1. 核心配置文件,配置 core-site.xml
[xumx@hadoop102 ~]$ cd /etc/hadoop
[xumx@hadoop102 hadoop]$ vim core-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定 NameNode 的地址 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://hadoop102:8020</value>
	</property>
	<!-- 指定 hadoop 数据的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-3.1.3/data</value>
	</property>
	<!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
	<property>
		<name>hadoop.http.staticuser.user</name>
		<value>xumx</value>
	</property>
</configuration>
  1. HDFS 配置文件,配置 hdfs-site.xml
[xumx@hadoop102 hadoop]$ vim hdfs-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<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>
  1. YARN 配置文件,配置 yarn-site.xml
[xumx@hadoop102 hadoop]$ vim yarn-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<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>
</configuration>
  1. MapReduce 配置文件,配置 mapred-site.xml
[xumx@hadoop102 hadoop]$ vim mapred-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>
  1. 在集群上分发配置好的 Hadoop 配置文件
[xumx@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
  1. 去 103 和 104 上查看文件分发情况
[xumx@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[xumx@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
  1. 群起集群

配置 workers

[xumx@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

在该文件中增加如下内容:

hadoop102
hadoop103
hadoop104

同步所有节点配置文件

[xumx@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
  1. 启动集群
    如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode
[xumx@hadoop102 hadoop-3.1.3]$ hdfs namenode -format

启动 HDFS

[xumx@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

在配置了 ResourceManager 的节点(hadoop103)启动 YARN

[xumx@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
  1. 结果查看
    Web 端查看 HDFS 的 NameNode
    浏览器中输入:http://hadoop102:9870 ,查看 HDFS 上存储的数据信息

Web 端查看 YARN 的 ResourceManager
浏览器中输入:http://hadoop103:8088 ,查看 YARN 上运行的 Job 信息

编写集群启停脚本(包含 HDFS,Yarn,Historyserver)myhadoop.sh
[xumx@hadoop102 ~]$ cd /home/xumx/bin
[xumx@hadoop102 bin]$ vim myhadoop.sh

输入如下内容:

#!/bin/bash
if [ $# -lt 1 ]
then
	echo "No Args Input..."
	exit ;
fi

case $1 in
"start")
	echo " =================== 启动 hadoop 集群 ==================="
	echo " --------------- 启动 hdfs ---------------"
	ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
	echo " --------------- 启动 yarn ---------------"
 	ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
	echo " --------------- 启动 historyserver ---------------"
	ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
	echo " =================== 关闭 hadoop 集群 ==================="
	echo " --------------- 关闭 historyserver ---------------"
	ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
	echo " --------------- 关闭 yarn ---------------"
	ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
	echo " --------------- 关闭 hdfs ---------------"
	ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
	echo "Input Args Error..."
;;
esac

保存后退出,然后赋予脚本执行权限

[xumx@hadoop102 bin]$ chmod +x myhadoop.sh
查看三台服务器 Java 进程脚本:jpsall
[xumx@hadoop102 ~]$ cd /home/atguigu/bin
[xumx@hadoop102 bin]$ vim jpsall

输入如下内容

#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
	echo =============== $host ===============
	ssh $host jps 
done

保存后退出,然后赋予脚本执行权限

[xumx@hadoop102 bin]$ chmod +x jpsall

分发/home/xumx/bin 目录,保证自定义脚本在三台机器上都可以使用

[xumx@hadoop102 ~]$ xsync /home/xumx/bin/

到此hadoop配置完成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晒太阳的黑宝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值