Hadoop集群搭建(完全分布式)

发布时间 2023-09-25 17:35:12作者: wdadwa

一,Hadoop集群简介

1.1 Hadoop集群整体概述

  • Hadoop集群包括两个集群:HDFS集群、YARN集群
  • 两个集群逻辑上分离、通常物理上在一起
  • 两个集群都是标准的主从架构集群

Hadoop两种集群内容:

image-20230919173443876

逻辑上分离,物理上合并的理解:

  • 逻辑上分离:两个集群互相之间没有依赖、互不影响
  • 物理上合并:某些角色进程往往部署在同一台物理服务器上

image-20230919193109576

注:MapReduce是计算框架、代码层面的组件 没有集群之说

二,Hadoop集群模式安装(Cluster mode)

2.1 安装地址

  • 安装包,源码包下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/

    image-20230919193540211

  • 为什么要重新编译Hadoop源码?

    匹配不同操作系统本地库环境,Hadoop某些操作比如压缩、IO需要调用系统本地库(.sod11),修改源码、重构源码

    最好是使用源码包,在本地重新编译一遍,这样会运行的更加稳定,可以使用docker快速编译。

2.2 集群角色规划

  • 角色规划的准责

    根据软件工作特性和服务器硬件资源情况合理分配,比如依赖内存工作的NameNode部署在大内存机器上。

  • 角色规划注意事项

    资源上有抢夺冲突的,尽量不要部署在一起。

    工作上需要配合的,尽量部署在一起。

以三台虚拟机举例:

image-20230919195256207

2.3 服务器基础环境准备工作

  • 给主机修改主机名

    vim /etc/hostname
    

    image-20230919195526124

  • Host映射

    vim /etc/hosts
    
    192.168.237.11 master.normaling.cn master
    192.168.237.12 Slave1.normaling.cn Slave1
    192.168.237.13 Slave2.normaling.cn Slave2
    
  • 关闭防火墙

    systemctl stop firewalld.service	#关闭防火墙
    systemctl disable firewalld.service		#禁止防火墙开机自启
    
  • 配置ssh免密登录

    Linux-->网络配置 - wdadwa - 博客园 (cnblogs.com)

  • 集群时间同步

    yum -y install ntpdate
    ntpdate ntp4.aliyun.com
    
  • 创建统一工作目录

    mkdir -p /usr/local/hadoop/data/	#数据存储路径
    mkdir -p /usr/local/hadoop	#安装包存放路径
    
  • 安装jdk1.8并配置好环境。

  • 上传解压Hadoop安装包(Master机器)

    cd /usr/local/hadoop/software/	#这个需要我们先把hadoop安装包上传到这个位置
    tar -zxvf  hadoop-3.3.6.tar.gz
    
  • 远程拷贝文件到其他机器上(master机器)

    scp -r /usr/local/hadoop/hadoop-3.3.6 root@Slave1:/usr/local/hadoop/
    scp -r /usr/local/hadoop/hadoop-3.3.6 root@Slave2:/usr/local/hadoop/
    

2.4 Hadoop安装包目录结结构

image-20230919201800457

2.5 修改hadoop配置文件

  • 官网文档:https://hadoop.apache.org/docs/r3.3.0/

  • 配置文件分为三类:

    第一类1个:hadoop-env.sh

    第二类4个:

    • xxxx-site.xml,site表示的是用户定义的配置,会覆盖default中的默认配置。
    • core-site.xml,核心模块配置
    • hdfs-site.xml,hdfs文件系统模块配置
    • mapred-site.xml,MapReduce模块配置
    • yarn-site.xml yarn模块配置
  • 第三类1个:worker

注:这些配置文件在hadoop目录下的./etc/hadoop里面


简单使用所需修改的地方:(只需要修改master主机即可,后续通过scp命令覆盖)

  • hadoop-env.sh文件

    export JAVA_HOME=/export/server/jdk8
    #文件最后添加
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root 
    
  • core-site.xml

    <configuration>
    	<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
    	<property>
    		<name>fs.defaultFS</name>
    		<value>hdfs://master:8020</value>
    	</property>
    	<!-- 设置Hadoop本地保存数据路径 -->
    	<property>
    		<name>hadoop.tmp.dir</name>
    		<value>/usr/local/hadoop/data</value>
    	</property>
    	<!-- 设置HDFS web UI用户身份 -->
    	<property>
    		<name>hadoop.http.staticuser.user</name>
    		<value>root</value>
    	</property>
    	<!-- 整合hive 用户代理设置 -->
    	<property>
    		<name>hadoop.proxyuser.root.hosts</name>
    		<value>*</value>
    	</property>
    	<property>
    		<name>hadoop.proxyuser.root.groups</name>
    		<value>*</value>
    	</property>
    	<!-- 垃圾桶文件保存时间 -->
    	<property>
    		<name>fs.trash.interval</name>
    		<value>1440</value>
    	</property>
    </configuration>
    
  • hdfs-site.xml

    <configuration>
    	<!-- 设置SNN进程运行机器位置信息 -->
    	<property>
    		<name>dfs.namenode.secondary.http-address</name>
    		<value>Slave1:9868</value>
    	</property>
    </configuration>
    
  • mapred-site.xml

    <configuration>
    	<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
    	<property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    	</property>
    	<!-- MR程序历史服务器端地址 -->
    	<property>
    		<name>mapreduce.jobhistory.address</name>
    		<value>master:10020</value>
    	</property>
    	<!-- 历史服务器web端地址 -->
    	<property>
    		<name>mapreduce.jobhistory.webapp.address</name>
    		<value>master:19888</value>
    	</property>
    	<property>
    		<name>yarn.app.mapreduce.am.env</name>
    		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    	</property>
    	<property>
    		<name>mapreduce.map.env</name>
    		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    	</property>
    	<property>
    		<name>mapreduce.reduce.env</name>
    		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    	</property>
    </configuration>
    
  • yarn-site.xml

    <configuration>
    
    	<!-- 设置YARN集群主角色运行机器位置 -->
    	<property>
    		<name>yarn.resourcemanager.hostname</name>
    		<value>master</value>
    	</property>
    	<property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    	</property>
    	<!-- 是否将对容器实施物理内存限制 -->
    	<property>
    		<name>yarn.nodemanager.pmem-check-enabled</name>
    		<value>false</value>
    	</property>
    	<!-- 是否将对容器实施虚拟内存限制。 -->
    	<property>
    		<name>yarn.nodemanager.vmem-check-enabled</name>
    		<value>false</value>
    	</property>
    	<!-- 开启日志聚集 -->
    	<property>
    		<name>yarn.log-aggregation-enable</name>
    		<value>true</value>
    	</property>
    	<!-- 设置yarn历史服务器地址 -->
    	<property>
    		<name>yarn.log.server.url</name>
    		<value>http://master:19888/jobhistory/logs</value>
    	</property>
    	<!-- 保存的时间7天 -->
    	<property>
    		<name>yarn.log-aggregation.retain-seconds</name>
    		<value>604800</value>
    	</property>
    </configuration>
    
  • workers

    master
    Slave1
    Slave2
    
  • 分发同步hadoop安装包

    cd /export/server
    
    scp -r hadoop-3.3.0 root@Slave1:$PWD
    scp -r hadoop-3.3.0 root@Slave2:$PWD
    
  • 将hadoop添加到环境变量(3台机器)

    vim /etc/profile
    
    export HADOOP_HOME=/usr/local/hadoop/hadoop-3.3.6
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    source /etc/profile
    #别忘了scp给其他两台机器哦cl
    hadoop			#验证是否配置成功
    

2.6 Hadoop格式化操作

  • 首次启动HDFS时,必须对其进行格式化操作!

  • 只有第一次才会执行,如果多次执行就相当于多次初始化了!!!

  • 只需要在整个Hadoop集群中的一台机器上执行一次

  • format本质是初始化工作,进行HDFS清理和准备工作。

  • 命令:

    hdfs namenode -format
    

三,Hadoop集群启停命令,WEB UI

官方提供了两种方式:

  • 手动逐个进程启停:每台机器上每次手动启动关闭一个角色进程,可以精准控制每个进程启停,避免群起群停。

    • HDFS集群

      #hadoop2.x版本命会
      hadoop-daemonsh start stop namenode datanode secondarynamenode
      #hadoop3x版本命今
      hdfs --daemon start stop namenodeldatanodelsecondarynamenode
      
    • YARN集群

      #hadoop2.x版本命今
      yarn-daemon.sh startstop resourcemanagernodemanager
      #hadoop3x版本命令
      yamn --daemon start stop resourcemanagernodemanager
      
  • 脚本一键启停

    在master上,使用软件自带的shell脚本一键启动。前提:配置好机器之间的SSH免密登录和workers文件。

    • HDFS集群

      start-dfs.sh
      stop-dfs.sh
      
    • YARN集群

      start-yarn.sh
      stop-yarn.sh
      
    • Hadoop集群

      start-all.sh
      stop-all.sh
      

    验证是否启动成功:

    jps
    

    启动成功效果图:

    • master:

      image-20230919225722331

    • Slave1:

      image-20230919225737687

    • Slave2:

      image-20230919225750854

    如果没有出现上述效果,去/usr/local/hadoop/hadoop-3.3.1/logs/文件夹中查看启动日志,哪个进程没有启动就去看哪个日志即可。

    或者在每个虚拟机上面都执行一遍启动命令

  • 查看hdfs集群的web UI

    配置:hdfs-site.xml里面的dfs.namenode.http-address

    默认访问地址:http://namenode的ip:50070

    192.168.237.11:9870
    
  • YARN集群的WEB UI

    配置:yarn-site.xml里面的yarn.resourcemanager.webapp.address

    默认访问地址:http://resource manager的ip:8088

    192.168.237.11:8088
    
  • secondary namenode的WEB UI

    配置:hdfs-site.xml里面的dfs.namenode.secondary.http-address

    默认访问地址:http://namenode的ip:50090

    192.168.237.12:9868
    

四,Hadoop功能

  • Shell命令操作:

    hadoop fs -mkdir /normaling	#创建一个normaling在/目录下
    hadoop fs -put zookeeper.out /normaling	#从本地上传/normaling文件夹
    hadoop fs -ls /	#显示hdfs的文件夹
    
  • WEB UI

    image-20230919231819328

HDFS本质就是一个文件系统,有目录树结构,和Linux类似,分文件,文件夹。