Bootstrap

龙蜥anolis8.9安装hadoop3.3.6伪分布环境

声明:这是自用验证的过程记录,都经过个人验证的,运行应该无问题,但是个人认为简单的,没有进行解释,文章阅读需要一定的基础。文章参考了同事的文档,环境基于anolis8.9环境。
1、安装anolis 8.9
配置4u处理器+4G内存+100G硬盘
设置 机器名为 master
修改名字可以用:

hostnamectl set-hostname master

为了保险起见,可以在/etc/hosts中增加相关主机的ip与机器名的配置,比如我这里:
192.168.6.19 master

关闭防火墙:
systemctl stop firewalld
关闭防火墙开机自启:
systemctl disable firewalld

2、官网下载hadoop的安装包,Binary download
https://hadoop.apache.org/releases.html
3.3.6的下载:
https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
国内镜像,下载hadoop-3.3.6.tar.gz:

https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/core/hadoop-3.3.6/

3、去下载openjdk

https://adoptium.net/zh-CN/temurin/releases/?version=8

4、anolis 需要先安装tar

yum install tar -y

如果要用vim也需要安装

yum install vim -y

编辑器也可以用nano,我更习惯这个

yum install nano -y

5、文件上传到/root下。
6、创建app目录 mkdir /app
7、解压缩并移动至/app

tar zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u422b05.tar.gz
mv jdk8u422-b05/ /app/openjdk-8

tar zxvf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 /app/hadoop-3

8、切换到/app确认目录是否正常,openjdk-8 hadoop-3
9、设置环境
vi /etc/profile
增加:

export JAVA_HOME=/app/openjdk-8
export HADOOP_HOME=/app/hadoop-3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存后执行,source /etc/profile 更新环境变量
10、验证环境变量

java -version
hadoop version

11、进入 /app/hadoop-3/etc/hadoop/

cd /app/hadoop-3/etc/hadoop/

下面需要修改的文件都在该目录下。
12、修改配置文件
①nano core-site.xml

<configuration>
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://master:8020</value>
 </property>
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/var/log/hadoop/tmp</value>
 </property>
</configuration>

②nano mapred-site.xml

<configuration>
 <!-- Framework name -->
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>
 <!-- Job history properties -->
 <property>
 <name>mapreduce.jobhistory.address</name>
 <value>master:10020</value>
 </property>
 <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>

③ nano yarn-site.xml

<configuration>
    <!-- Site specific YARN configuration properties -->
    <!-- 指定YARN ResourceManager的主机名,通常是集群的主节点 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <!-- ResourceManager的RPC服务地址 -->
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>${yarn.resourcemanager.hostname}:8032</value>
    </property>
    <!-- ResourceManager的调度器地址,用于任务调度 -->
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>${yarn.resourcemanager.hostname}:8030</value>
    </property>
    <!-- ResourceManager的Web应用程序地址,用于浏览集群状态 -->
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>${yarn.resourcemanager.hostname}:8088</value>
    </property>
    <!-- ResourceManager的Web应用程序HTTPS地址,启用安全连接时使用 -->
    <property>
        <name>yarn.resourcemanager.webapp.https.address</name>
        <value>${yarn.resourcemanager.hostname}:8090</value>
    </property>
    <!-- ResourceManager的资源跟踪服务地址,节点管理器向该地址报告资源信息 -->
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>${yarn.resourcemanager.hostname}:8031</value>
    </property>
    <!-- ResourceManager的管理接口地址,用于管理和控制集群 -->
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>${yarn.resourcemanager.hostname}:8033</value>
    </property>
    <!-- NodeManager本地存储临时文件的目录 -->
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/data/hadoop/yarn/local</value>
    </property>
    <!-- 是否启用日志聚合,将节点上的日志收集到一个中心位置 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 存储应用程序日志的远程目录 -->
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/data/tmp/logs</value>
    </property>
    <!-- 日志服务器的URL,用于访问应用程序的历史日志 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://master:19888/jobhistory/logs/</value>
    </property>
    <!-- 是否启用虚拟内存检查,可以防止内存超用,但可能会影响任务运行 -->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <!-- 定义NodeManager的辅助服务,mapreduce_shuffle是MapReduce任务所需的服务 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 配置ShuffleHandler类,处理MapReduce Shuffle操作 -->
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <!-- 配置NodeManager节点上可用的内存(以MB为单位) -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
    </property>
    <!-- 调度器允许分配的最小内存大小 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <!-- 调度器允许分配的最大内存大小 -->
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>
    <!-- Map任务分配的内存大小 -->
    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>2048</value>
    </property>
    <!-- Reduce任务分配的内存大小 -->
    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>2048</value>
    </property>

    <!-- 配置NodeManager可用的CPU核心数 -->
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>1</value>
    </property>
</configuration>

如果在后面运行时任务时出错,一直卡在:mapreduce.Job: map 0% reduce 0%
同时日志中可能会有提示:INFO [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Going to preempt 1 due to lack of space for maps

则配置文件修改为:

<configuration>
    <!-- Site specific YARN configuration properties -->
    <!-- 指定YARN ResourceManager的主机名,通常是集群的主节点 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <!-- ResourceManager的RPC服务地址 -->
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>${yarn.resourcemanager.hostname}:8032</value>
    </property>
    <!-- ResourceManager的调度器地址,用于任务调度 -->
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>${yarn.resourcemanager.hostname}:8030</value>
    </property>
    <!-- ResourceManager的Web应用程序地址,用于浏览集群状态 -->
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>${yarn.resourcemanager.hostname}:8088</value>
    </property>
    <!-- ResourceManager的Web应用程序HTTPS地址,启用安全连接时使用 -->
    <property>
        <name>yarn.resourcemanager.webapp.https.address</name>
        <value>${yarn.resourcemanager.hostname}:8090</value>
    </property>
    <!-- ResourceManager的资源跟踪服务地址,节点管理器向该地址报告资源信息 -->
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>${yarn.resourcemanager.hostname}:8031</value>
    </property>
    <!-- ResourceManager的管理接口地址,用于管理和控制集群 -->
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>${yarn.resourcemanager.hostname}:8033</value>
    </property>
    <!-- NodeManager本地存储临时文件的目录 -->
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/data/hadoop/yarn/local</value>
    </property>
    <!-- 是否启用日志聚合,将节点上的日志收集到一个中心位置 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 存储应用程序日志的远程目录 -->
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/data/tmp/logs</value>
    </property>
    <!-- 日志服务器的URL,用于访问应用程序的历史日志 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://master:19888/jobhistory/logs/</value>
    </property>
    <!-- 是否启用虚拟内存检查,可以防止内存超用,但可能会影响任务运行 -->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <!-- 定义NodeManager的辅助服务,mapreduce_shuffle是MapReduce任务所需的服务 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 配置ShuffleHandler类,处理MapReduce Shuffle操作 -->
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>

④、nano hdfs-site.xml

<configuration>
  <!-- NameNode directory -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///data/hadoop/hdfs/name</value>
  </property>
  <!-- DataNode directory -->
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///data/hadoop/hdfs/data</value>
  </property>
  <!-- Allow HTTP access to NameNode -->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>master:50090</value>
  </property>
  <!-- Replication factor -->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>

</configuration>

⑤ nano hadoop-env.sh 增加java_HOME的配置

export JAVA_HOME=/app/openjdk-8

⑥ nano yarn-env.sh 增加java_HOME的配置

export JAVA_HOME=/app/openjdk-8

13、格式化namenode

hdfs namenode -format

14、继续修改启动、停止脚本

cd /app/hadoop-3/sbin/

①修改文件 nano start-dfs.sh 最开始增加内容:

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

②修改文件 nano stop-dfs.sh
增加内容:

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

③修改文件 nano start-yarn.sh
增加内容:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

④修改文件 nano stop-yarn.sh
增加内容:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

15、创建免密登录,必做,这个是hadoop集群用的

ssh-keygen -t rsa
ssh-copy-id master

16、启动集群

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

17、验证:
jps 命令
http://192.168.6.19:9870/ web页面
http://192.168.6.19:8088/ yarn的web页面
http://192.168.6.19:19888/ Historyserver的web页面

;