Hadoop 集群搭建

一、模板虚拟机配置

1) 设置ip地址
设置ip是保证ip地址与主机名保持一致,如:192.168.10.100 -> hadoop100
2) 设置hostname
修改 /etc/hostname 文件修改
3) 设置hostname 与 ip 地址的映射
映射的配置文件保存在 /etc/hosts 中,网络中的每一台机器都是独立保存这份配置文件的。
4) yum 安装额外的rpm包:yum install -y epel-release (-y表示不需要对逐个包yes) 如果安装的是 最小版的Linux 还需要额外 安装 net-tools 和 vim
5) 关闭防火墙、关闭防火墙开机自动启动:(保证集群之间的稳定连接)
systemctl stop firewalld
systemctl disable firewalld.serviceHadoop 集群搭建_第1张图片
6)添加一个普通用户:atguigu,并修改/etc/sudoers配置文件, 使得sudo 后拥有和root同样的权限,并且不需要使用密码验证
useradd atguigu
vim /etc/sudoers
Hadoop 集群搭建_第2张图片
sudo 命令可以使得普通用户获得指定的权限,(限制用户只在某台主机上运行某些命令),可以看做是普通用户向超级管理员申请获取权限。

7)在/opt (用于存放第三软件)目录下文件夹module 和 software,并更改所有主和组为atguigu
在这里插入图片描述Hadoop 集群搭建_第3张图片
8)卸载之前安装到的jdk:rpm -qa | grep -i java | xargs -n1 rmp -e --nodeps
Hadoop 集群搭建_第4张图片
grep -i 忽略大小写
xargs 从 标准 输入 读入 参数. 参数 用 空格(可以 用 双引号 单引号 或 反斜杠 转意) 或者 回车 隔开. 然后 一次 或者 多次 执行 命令: 从标准输入重建并执行命令行

rpm -e 卸载rpm包,–nodeps 忽略依赖检查
Hadoop 集群搭建_第5张图片
9)reboot 重启,模板虚拟机配置完毕

二、虚拟机克隆

1) 模板机关机后,从VMware中进行完整克隆
Hadoop 集群搭建_第6张图片
Hadoop 集群搭建_第7张图片
2) 每个虚拟机配置ip地址和主机名称
如:hadoop102 ip地址设置为192.168.10.102 hostname 设置为hadoop102

3) 在hadoop 102中安装JDK1.8
将jdk1.8 的linux tar.gz文件传入 之前创建的 software文件夹中
tar -zxvf [解压文件] -C [解压到指定目录] 将jdk安装到module 文件夹
配置环境变量,将JAVA_HOME添加到环境变量中:
Linux环境变量的配置是通过/etc/profile.sh 文件进行配置的。
profile.sh中会对profile.d中的sh文件循环执行
在profile.d中添加新的sh文件,声明全局变量,修改PATH值
sudo vim /etc/profile.d/my_var.sh
Hadoop 集群搭建_第8张图片
在这里插入图片描述
重新运行profile: source /etc/profile

4) 在hadoop102上,安装Hadoop
步骤同上,解压、配置环境变量
在配置环境变量中:
Hadoop 集群搭建_第9张图片

三、配置本地运行模式和ssh免密登录

  1. 将hadoop102上 已经解压过的 hadoop 和 jdk 传输至 hadoop103 和 hadoop 104上:( Secure Copy )
    scp — 安全复制(远程文件复制程序)
    -r 递归复制整个目录。
    scp -r 【本地目录】 【远程用户名@远程主机名:远程目录】

    反之 pull :
    scp -r 【远程用户名@远程主机名:远程目录】【本地目录】
    表示从远程主机拉取文件

    rsync — 远程同步工具(相比于安全复制,只传输差异部分的文件,速度更快,效率更好)
    rsync -av 【本地目录】 【远程用户名@远程主机名:远程目录】

    对于每个服务器都执行rsync 命令显然比较复杂。
    创建自己的xsyn.sh ,并将文件所在目录加入PATH即可。
    xsyn.sh 执行任务:将参数中的文件 同步到 所有虚拟机下的相同路径中

    /home/atguigu/bin 是默认加入到$PATH中的,所以在此目录下添加sh文件

# !bin/bash


if [$# -lt 1]
	then 
		echo 请输入参数
		exit;
	
fi


for host in hadoop102 hadoop103 hadoop104
do
	echo =================$host====================
	for file in $@
	do 

		if [-e $file]
			then
				#获取文件的完整绝对路径:pwd
				pdir=$(cd -P $(dirname $file);pwd)
				# -P可以避免软连接目录,跳转到真实目录
				
				#获取文件名称 basename
				fname=$(basename $file)
				
				# 在目标服务器下创建相同目录
				ssh $host "mkdir -p $pdir"
				# ssh命令 远程登录
				# -p可以避免目录已经存在

				# 将目标文件同步到对应目录下
				rsync -av $pdir/$fname $host:$pdir			
			else
				echo $file 不存在
		fi
	done
done 
	接下来通过 xsync 将环境变量sh 分发到所有服务器上。
	sudo xsync /etc/profile.d/my_var.sh
	sudo 后相当于切换为root账户 所以/home/atguigu目录不存在$PATH中


	linux中每次的ssh 登录都需要密码验证,接下来设置ssh免密登录:
	ssh 加密协议 属于非对称加密通信,原理如下

Hadoop 集群搭建_第10张图片
只需要在服务器的.ssh目录下保存公钥,即可实现免密登录。
在/home/atguigu/.ssh目录下执行ssh -keygen -t rsa 会在.ssh/id_rsa 下生成密钥和公钥
Hadoop 集群搭建_第11张图片
Hadoop 集群搭建_第12张图片
将公钥发送给其余服务器:
ssh-copy-id hadoop103
ssh-copy-id hadoop104

免密ssh远程连接设置成功。 接下来在hadoop103和104中同样设置

四、Hadoop集群配置

在配置Hadoop 之前,需要规划好各节点的分工,尽量不要把占用资源量比较大的角色分配到用一个资源上。
Hadoop 集群搭建_第13张图片

Hadoop 的自定义配置文件在 etc/hadoop/etc目录下的四个空的xml文件,将一下配置粘贴到Hadoop102中并下发到所有节点。

1) core-site.xml

<configuration>
	
	<property>
		<name>fs.defaultFSname>
		<value>hdfs://hadoop102:8020value>
	property>
	
	
	<property>
		<name>hadoop.tmp.dirname>
		<value>/opt/module/hadoop-3.1.3/datavalue>
	property>
	
	
	<property>
		<name>hadoop.http.staticuser.username>
		<value>atguiguvalue>
	property>
configuration>
  1. hdfs-site.xml
<configuration>
	
	<property>
		<name>dfs.namenode.http-addressname>
		<value>hadoop102:9870value>
	property>
	
	<property>
		<name>dfs.namenode.secondary.http-addressname>
		<value>hadoop104:9868value>
	property>

configuration>

  1. mapred-site.xml
<configuration>
	
	<property>
		<name>mapreduce.framwork.namename>
		<value>yarnvalue>
	property>

configuration>
  1. yarn-site.xml
<configuration>


	
	<property>
		<name>yarn.nodemanager.aux-servicesname>
		<value>mapreduce_shufflevalue>
	property>
	
	<property>
		<name>yarn.resourcemanager.hostnamename>
		<value>hadoop103value>
	property>
	
	<property>
		<name>yarn.nodemanager.env-whitelistname>
		<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) 设置workers配置
		在etc目录下设置workers参数:
			hadoop102
			hadoop103
			hadoop104
		(注意不要加空格 和 空行)


2) 格式化NameNode 节点(第一次运行时):
		在hadoop102下执行
				hdfs namenode -forma
		执行成功的标志:bin目录下出现data 和 logs目录

		PS:不要多次格式NameNode节点,每次格式化节点都会产生新的Cluster_ID,导致DataNode节点与NameNode的集群ID不一致,集群不能找到以往数据。如果需要重新格式化NameNode的化,首先停止namenode和datanode进程,并且删除所有节点的data和log目录,然后进行格式化。或者直接修改DataNode的集群ID 使其与NameNode的集群ID一致。
		解决办法:https://blog.51cto.com/zyp88/2053031

2)启动Hadoop集群
		在hadoop102上(NN) 启动hdfs 
		start-dfs.sh
		启动成功后在节点 jps,查看角色是否正确(jps 查看java虚拟机线程的工具)
		通过浏览器访问192.168.10.102:9870 得到hdfs 的web界面

		在hadoop103上(RM)启用yarn
		start-yarn.sh
		通过浏览器访问192.168.10.103:8088

Hadoop 集群搭建_第14张图片
在这里插入图片描述
在这里插入图片描述

六、历史服务器配置

mapred.xml

<configuration>
	
	<property>
		<name>mapreduce.framwork.namename>
		<value>yarnvalue>
	property>
	
	<property>
		<name>mapreduce.jobhistory.addressname>
		<value>hadoop102:10020value>
	property>
	
	<property>
		<name>mapreduce.jobhistory.webapp.addressname>
		<value>hadoop102:19888value>
	property>

configuration>

重新启用yarn后:
在hadoop102
mapred --daemon start historyserver

七、日志聚集功能的开启

Hadoop 集群搭建_第15张图片
1) 配置yarn-site.xml

<configuration>


	
	<property>
		<name>yarn.nodemanager.aux-servicesname>
		<value>mapreduce_shufflevalue>
	property>
	
	<property>
		<name>yarn.resourcemanager.hostnamename>
		<value>hadoop103value>
	property>
	
	<property>
		<name>yarn.nodemanager.env-whitelistname>
		<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
		value>
	property>
	
	<property>
		<name>yarn.log-aggregation-enablename>
		<value>truevalue>
	property>
	
	<property>
		<name>yarn.log.server.urlname>
		<value>http://hadoop102:19888/jobhistory/logsvalue>
	property>
	
	<property>
		<name>yarn.log-aggregation.retain-secondsname>
		<value>604800value>
	property>
	

configuration>
  1. 分发到所有节点
  2. 重启历史服务器、yarn
    mapred --daemon stop historyserver
    stop-yarn.sh

八、Hadoop线程的启动

两种方式启动hadoop 中的线程:
1) 整体启动:start-dfs.sh
2)部分启动:hdfs -daemo start datenode hdfs -daemo stop datenode

脚本一:在项目中,逐个节点的逐个启动线程过于麻烦,可以将启动命令写入到shell脚本中执行

if [ $# -lt 1 ]
then 
	echo "No Arugument: Please input start/stop"
	exit;
fi

case $1 in 
"start")
	echo "==================Opening Hadoop================"
	
	echo "------------------—Opening HDFS-----------------"
	ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
	echo "------------------—Opening YARN-----------------"
	ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
	echo "----------------Opening HistoryServer-----------"
	ssh hadoop103 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
	echo "==================Closing Hadoop================"
	
	echo "----------------Closing HistoryServer-----------"
	ssh hadoop103 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
	echo "------------------—Closing YARN-----------------"
	ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
	echo "------------------—Closing HDFS-----------------"
	ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
	echo "Wrong Arugument"
;;
esac

脚本二:查看所有服务器的jsp

for host in hadoop102 hadoop103 hadoop104
do
	echo "=======$host======="
	ssh $host "jps"
done

PS : 脚本写完后需要确保脚本的可执行权限,并分发到所有服务器中

九、***Hadoop常用的端口号 与 配置文件

Hadoop 集群搭建_第16张图片
在这里插入图片描述

十、集群时间同步 P37

Hadoop 集群搭建_第17张图片

你可能感兴趣的:(hadoop,大数据)