准备

  • 安装 epel-release
    Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于 RHEL、CentOS 和 Scientific Linux。相当于是一个软件仓库,大多数 rpm 包在官方 repository 中是找不到的)
    命令yum install -y epel-release

  • 最小系统说明
    如果 Linux 安装的是最小系统版, 还需要安装如下工具; 如果安装的是 Linux桌面标准版,不需要执行如下操作
    ➢ net-tool:工具包集合,包含 ifconfig 等命令
    命令:yum install -y net-tools
    ➢ vim:编辑器
    命令: yum install -y vim

  • 卸载自带jdk
    image

  • 关闭防火墙 ,关闭防火墙开机自启
    命令:systemctl stop firewalld
    命令:systemctl disable firewalld.service

  • 配置 hadoop用户具有 root 权限 , 方便 后期 加 sudo 执行 root 权限的命令
    命令:vim /etc/sudoers
    进入,下翻,找到如下地方
    image在下面位置增加hadoop用户
    image

一、说明
/opt/software (上传的压缩包)
/opt/module (安装软件的路径)

二、安装jdk和hadoop

  1. 解压到安装的文件夹

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module

  1. 配置环境
    /etc/profile 文件会遍历/etc/profile.d/ 下面的*.sh文件,所以我们可以在/etc/profile.d/目录下新建my_env.sh文件来配置我们的环境信息
    image
    配置完后记得让文件生效source /etc/profile

java -version (查看是否安装成功)
hadoop

  1. hadoop-3.1.3/目录下的信息说明

(1)bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
(3)lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
(4)sbin 目录:存放启动或停止 Hadoop 相关服务的脚本(start-dfs.sh , start-all.sh)
(5)share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例

  1. 本地模式测试
    对hadoop-3.1.3/wcinput/word.txt这个文件做mapreduce
    输出到hadoop-3.1.3/wcoutput/目录(注意hadoop输出的目录事先不能存在
    image

    结果
    image

三、编写集群分发脚本xsync

1. scp(secure copy)安全拷贝
scp可以实现服务器和服务器之间的拷贝

  • 基本语法

image

  • 实操案例

1)在hadoop100上,将hadoop100中的/opt/module/jdk1.8.0_212目录拷贝到hadoop101目录/opt/module/上
image
2)在hadoop101上将Hadoop100中的/opt/module/hadoop-3.1.3拷贝到hadoop101目录/opt/module/上
image
3)在hadoop101上将Hadoop100中的/opt/module/目录下所有目录拷贝到hadoop102目录/opt/module/上
image

2. rsync远程同步工具

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号连接的优点。
rsync做文件复制要比scp快,rsync只对差异文件做更新。scp是把所有文件都复制过去

  • 基本语法

image

  • 实操案例
    删除Hadoop101中的/opt/module/hadoop-3.1.3/wcinput,同步hadoop100中/opt/module/hadoop-3.1.3/到hadoop101
    速度明显快很多(实际上只做了wcinput的复制)

3. xsync集群分发脚本

1)需求:循环复制文件到所有节点的相同目录下
2)需求分析:

  • rsync命令原始拷贝
    rsync -av /opt/modu;e hadoop@hadoop101:/opt/
  • 期望脚本要在任何路径都能使用(脚本放在声明了全局环境变量的路径)
    image
    /home/hadoop/bin目录是全局变量的路径,创建bin目录把脚本放在里面就能实现任何路径都能使用
  • 脚本
脚本代码
#!/bin/bash
#1.判断参数个数
if [ $# -lt 1 ]
then 
	echo NOt Enough Arguement!
	exit;
fi

#2.遍历集群所有机器
for host in hadoop100 hadoop101 hadoop102
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 exit!
		fi 
	done
done 

把hadoop100 /home/hadoop/bin/目录同步到 hadoop101和hadoop102中
image

分发环境变量
注意:xsync脚本在家目录下,sudo是root用户的命令 ,要用如下格式
image
不能直接sudo xsync …

四、ssh免密登录
rsa算法实现
假如A服务器要免密访问B服务器,那么A就把他的公钥分发给B,B收到后存到一个文件中(Authorized_keys),每次A过来访问B就去那个文件里查看,如果有A的公钥就让他进来。

配置Hadoop100免密访问hadoop101,hadoop102

  1. 在hadoop100上进入.ssh/目录 (家目录下 ls -al )
  2. 输入指令 ssh-keygen -t rsa (三次回车) 这时.ssh/下有了私钥id_rsa 和 公钥 id_rsa.pub
  3. 接下来将公钥拷贝到101和102 ssh-copy-id hadoop101 ssh-copy-id hadoop102(第一次要输入密码,后面就不用了)
  4. 对自己也配置ssh-copy-id hadoop100
  5. 最后在.ssh/目录下有一个authorized_keys文件记录哪些服务器可以免密访问

五、集群配置

1)部署规划

  • NameNode 和 SecondaryNameNode 不要安装在同一台服务器 。(它们两个都需要耗内存,分开减少集群的压力)
  • ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。
    image

2)配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

  • 自定义配置文件
    core-site.xml 、hdfs-site.xml 、yarn-site.xml 、mapred-site.xml 四个配置文件存放在
    $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

3)配置集群文件

配置文件时记得先查看默认的配置信息

配置文件在$HADOOP_HMOE/etc/hadoop/ 下

image

– 配置core-site.xml

<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 网页登录使用的静态用户为 hadoop --> 
	<property> 
		<name>hadoop.http.staticuser.user</name> 
		<value>hadoop</value> 
	</property> 
</configuration> 

– 配置hdfs-site.xml

<configuration> 
  <!-- NameNode web 端访问地址--> 
	<property> 
		<name>dfs.namenode.http-address</name> 
		<value>hadoop102:9870</value> 
	</property> 
  <!-- SecondaryNameNode web 端访问地址--> 
	<property> 
		<name>dfs.namenode.secondary.http-address</name> 
		<value>hadoop104:9868</value> 
	</property> 
</configuration> 

之前核心配置文件中NameNode地址hdfs://hadoop102:8020相当于是hadoop内部通讯地址,
现在NameNode是HDFS需要用户在web界面上访问,不需要操作命令行,即也需要对外暴露一个接口hadoop102:9870

– 配置yarn-site.xml

<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> 

– 配置marpred-site.xml

image

<configuration> 
  <!-- 指定 MapReduce 程序运行在 Yarn 上 --> 
	<property> 
		<name>mapreduce.framework.name</name> 
		<value>yarn</value> 
	</property> 
</configuration> 

– 用脚本分发配置

image

版权声明:本文为打工人元宝原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liangxx123/p/16536242.html