• 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.service在这里插入图片描述
    6)添加一个普通用户:atguigu,并修改/etc/sudoers配置文件, 使得sudo 后拥有和root同样的权限,并且不需要使用密码验证
    useradd atguigu
    vim /etc/sudoers
    在这里插入图片描述
    sudo 命令可以使得普通用户获得指定的权限,(限制用户只在某台主机上运行某些命令),可以看做是普通用户向超级管理员申请获取权限。

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

    rpm -e 卸载rpm包,–nodeps 忽略依赖检查
    在这里插入图片描述
    9)reboot 重启,模板虚拟机配置完毕

    二、虚拟机克隆

    1) 模板机关机后,从VMware中进行完整克隆
    在这里插入图片描述
    在这里插入图片描述
    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
    在这里插入图片描述
    在这里插入图片描述
    重新运行profile: source /etc/profile

    4) 在hadoop102上,安装Hadoop
    步骤同上,解压、配置环境变量
    在配置环境变量中:
    在这里插入图片描述

    三、配置本地运行模式和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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20

      done

      接下来通过 xsync 将环境变量sh 分发到所有服务器上。
      sudo xsync /etc/profile.d/my_var.sh
      sudo 后相当于切换为root账户 所以/home/atguigu目录不存在$PATH中
      
      
      linux中每次的ssh 登录都需要密码验证,接下来设置ssh免密登录:
      ssh 加密协议 属于非对称加密通信,原理如下
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    在这里插入图片描述
    只需要在服务器的.ssh目录下保存公钥,即可实现免密登录。
    在/home/atguigu/.ssh目录下执行ssh -keygen -t rsa 会在.ssh/id_rsa 下生成密钥和公钥
    在这里插入图片描述
    在这里插入图片描述
    将公钥发送给其余服务器:
    ssh-copy-id hadoop103
    ssh-copy-id hadoop104

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

    四、Hadoop集群配置

    在配置Hadoop 之前,需要规划好各节点的分工,尽量不要把占用资源量比较大的角色分配到用一个资源上。
    在这里插入图片描述

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

    1) core-site.xml

    
    	
    	
    		fs.defaultFS
    		hdfs://hadoop102:8020
    	
    	
    	
    	
    		hadoop.tmp.dir
    		/opt/module/hadoop-3.1.3/data
    	
    	
    	
    	
    		hadoop.http.staticuser.user
    		atguigu
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    1. hdfs-site.xml

      dfs.namenode.http-address hadoop102:9870 dfs.namenode.secondary.http-address hadoop104:9868
    2. mapred-site.xml

      mapreduce.framwork.name yarn
    3. yarn-site.xml

      
      
      	yarn.nodemanager.aux-services
      	mapreduce_shuffle
      
      
      
      	yarn.resourcemanager.hostname
      	hadoop103
      
      
      
      	yarn.nodemanager.env-whitelist
      	JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
      	
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

    五、集群的启动

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    六、历史服务器配置

    mapred.xml

    
    	
    	
    		mapreduce.framwork.name
    		yarn
    	
    	
    	
    		mapreduce.jobhistory.address
    		hadoop102:10020
    	
    	
    	
    		mapreduce.jobhistory.webapp.address
    		hadoop102:19888
    	
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

    七、日志聚集功能的开启

    在这里插入图片描述
    1) 配置yarn-site.xml

    
    
    
    	
    	
    		yarn.nodemanager.aux-services
    		mapreduce_shuffle
    	
    	
    	
    		yarn.resourcemanager.hostname
    		hadoop103
    	
    	
    	
    		yarn.nodemanager.env-whitelist
    		JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
    		
    	
    	
    	
    		yarn.log-aggregation-enable
    		true
    	
    	
    	
    		yarn.log.server.url
    		http://hadoop102:19888/jobhistory/logs
    	
    	
    	
    		yarn.log-aggregation.retain-seconds
    		604800
    	
    	
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

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

    for host in hadoop102 hadoop103 hadoop104
    do
    	echo "=======$host======="
    	ssh $host "jps"
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    在这里插入图片描述
    在这里插入图片描述

    十、集群时间同步 P37

    在这里插入图片描述

  • 相关阅读:
    树莓派 RaspBerryPi 网络配置相关与改造usb网络摄像头
    vue-事件修饰符
    【Python实战】美哭你的极品壁纸推荐|1800+壁纸自动换?美女动漫随心选(高清无码)
    js作用域
    Spark Streaming状态管理函数
    在win11下安装mysql并通过python进行链接
    YOLOv5源码中的参数超详细解析(3)— 训练部分(train.py)| 模型训练调参
    VMD结合ISSA优化LSSVM功率预测
    Python中的*args 和 **kwargs
    java计算机毕业设计郑州卷烟厂库存管理系统源程序+mysql+系统+lw文档+远程调试
  • 原文地址:https://blog.csdn.net/Bejpse/article/details/126366095