1、HDFS集群搭建

一、下载

Apache Hadoop
清华大学开源软件镜像站 | Tsinghua Open Source Mirror


二、集群规划

10.9.70.17210.9.70.16610.9.70.168
JSYF3JSYF1JSYF2
Hadoopmasterslave1slave2
NameNode、DataNode、NodeManagerResourceManager、DataNode、NodeManagerSecondaryNameNode、DataNode、NodeManager
端口NN web端访问地址:JSYF3:9870
yarn web端访问地址:
JSYF1:8088
defaultFS:JSYF3:9000
_SNN运行主机和端口:JSYF1:_9868
MR程序历史服务地址:JSYF3:10020
MR程序历史服务器web端地址:JSYF3:19888
yarn历史服务器地址:JSYF3:19888

三、配置

1、创建安装目录

cd /opt
mkdir /opt/software/
cd software/
mkdir /opt/software/hadoop/
cd hadoop/
mkdir /opt/software/hadoop/hdfs/
cd hdfs/
mkdir /opt/software/hadoop/hdfs/data/
mkdir /opt/software/hadoop/hdfs/name/
mkdir /opt/software/hadoop/hdfs/tmp/

配置文件修改

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/hadoop-env.sh
vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/core-site.xml
vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/hdfs-site.xml
vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/mapred-site.xml
vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/yarn-site.xml

安装包上传至/opt/software/hadoop

解压

tar -xvzf hadoop-3.3.5.tar.gz

2、环境准备

三台虚拟机都已经完成的步骤

  • 网络配置
  • 主机名配置
  • 主机域名映射
  • 防火墙和selinux关闭
  • ssh免密
  • 安装jdk

3、配置hadoop-env.sh

修改JAVA_HOME值和HADOOP_CONF的值

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_333-amd64
export HADOOP_CONF_DIR=/opt/software/hadoop/hadoop-3.3.5/etc/hadoop

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
export YARN_PROXYSERVER_USER=root



4、配置core-site.xml

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/core-site.xml
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://JSYF3:8020</value>
    </property>
    
  	<!-- io操作文件缓冲区大小 -->
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    
    <!-- hadoop本地数据存储目录 format时自动生成 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/software/hadoop/hdfs/tmp</value>
    </property>
    
    <!-- 在Web UI访问HDFS使用的用户名。-->
    <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>

  	<!-- 文件系统垃圾桶检查周期时间 -->
    <property>
      <name>fs.trash.checkpoint.interval</name>
      <value>120</value>
    </property>


回收站回收站功能默认关闭,如果要开启需要在core-site.xml内配置:

  <property>
    <name>fs.trash.interval</name>
    <value>1440</value>
  </property>
   
  <property>
    <name>fs.trash.checkpoint.interval</name>
    <value>120</value>
  </property>

回收站功能默认关闭,如果要开启需要在core-site.xml内配置:
无需重启集群,在哪个机器配置的,在哪个机器执行命令就生效。回收站默认位置在:/user/用户名(hadoop)/.Trash
web浏览权限使用WEB浏览操作文件系统,一般会遇到权限问题
image.png
这是因为WEB浏览器中是以匿名用户(dr.who)登陆的,其只有只读权限,多数操作是做不了的。如果需要以特权用户在浏览器中进行操作,需要配置如下内容到core-site.xml并重启集群

<property>
    <name>hadoop.http.staticuser.user</name>
    <value>hadoop</value>
  </property>

:::danger
但是,不推荐这样做HDFS WEBUI,只读权限挺好的,简单浏览即可如果给与高权限,会有很大的安全问题,造成数据泄露或丢失
:::

5、配置hdfs-site.xml

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/hdfs-site.xml
    <!-- NN web端访问地址-->
    <property>
       <name>dfs.namenode.http-address</name>
       <value>JSYF3:9870</value>
    </property>

		<!-- 默认创建的文件权限设置。-->
    <property>
    		<name>dfs.datanode.data.dir.perm</name>
    		<value>700</value>
  	</property>

  <!-- hdfs默认块大小 -->
  <property>
    	<name>dfs.blocksize</name>
    	<value>268435456</value>
  </property>

  <!-- namenode处理的并发线程数 -->
  <property>
    		<name>dfs.namenode.handler.count</name>
    		<value>100</value>
   </property>

    <!-- 设定SNN运行主机和端口。-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>JSYF2:9868</value>
    </property>

    <!-- NameNode允许连接节点的DataNode。-->
    <property>
    		<name>dfs.namenode.hosts</name>
    		<value>JSYF1,JSYF2,JSYF3</value>
  	</property>

    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/software/hadoop/hdfs/name</value>
    </property>
    
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/software/hadoop/hdfs/data</value>
    </property>
    
    <property>
        <name>dfs.datanode.max.locked.memory</name>
        <value>65536</value>
    </property>
 
    <!--如果为"true",则在HDFS中启用权限检查;如果为"false",则关闭权限检查;默认值为"true"-->
    <property>
      <name>dfs.permissions.enabled</name>
      <value>false</value>
    </property>

6、配置mapred-env.sh

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/mapred-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_333-amd64

export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000

export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA

image.png

7、配置mapred-site.xml

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/mapred-site.xml
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- MR App Master环境变量。-->
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <!-- MR MapTask环境变量。-->
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <!-- MR ReduceTask环境变量。-->
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    
    <!-- MR程序历史服务地址 -->
    <property>
      <name>mapreduce.jobhistory.address</name>
      <value>JSYF3:10020</value>
    </property>
     
    <!-- MR程序历史服务器web端地址 -->
    <property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>JSYF3:19888</value>
    </property>

    <!-- MR程序历史服务器在HDFS的记录临时路径 -->
    <property>
      <name>mapreduce.jobhistory.intermediate-done-dir</name>
      <value>/data/mr-history/tmp</value>
      <description></description>
    </property>

      <!-- MR程序历史服务器在HDFS的记录路径 -->
    <property>
      <name>mapreduce.jobhistory.done-dir</name>
      <value>/data/mr-history/done</value>
      <description></description>
    </property>


8、配置yarn-env.sh

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_333-amd64
export HADOOP_HOME=/opt/software/hadoop/hadoop-3.3.5
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
# export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

8、配置yarn-site.xml

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/yarn-site.xml
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>JSYF1</value>
    </property>

    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>JSYF1:8088</value>
    </property>

     <property>
         <name>yarn.resourcemanager.scheduler.address</name>
         <value>JSYF1:8099</value>
    </property>

    <property>
         <name>yarn.resourcemanager.scheduler.class</name>
         <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
         <description></description>
    </property>

    <property>
        <name>yarn.nodemanager.localizer.address</name>
        <value>0.0.0.0:8046</value>
    </property>

    <!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行 MR程序。-->
    <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.nodemanager.vmem-check-enabled</name>
         <value>false</value>
    </property>

     <!-- 每台nodemanager节点提供给yarn进行调度管理的内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>40960</value>
    </property>

    <!-- 每台nodemanager节点提供给yarn进行调度管理的CPU核数大小 -->
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>6</value>
    </property>

    <!-- 每个容器请求的最小内存资源(以MB为单位)。-->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>

    <!-- 每个容器请求的最大内存资源(以MB为单位)。-->
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>10240</value>
    </property>

    <!-- 容器虚拟内存与物理内存之间的比率。-->
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4</value>
    </property>

    <!--开启日志聚合-->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

    <!--日志聚合hdfs存储路径-->
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/tmp/logs</value>
    </property>
    
    <!-- 历史日志保存的时间 7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

    <!--应用执行时存储路径-->
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/opt/software/hadoop/hdfs/data/nm-local</value>
        <description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
    </property>

    <!--应用执行完日志保留的时间,默认0,即执行完立刻删除-->
    <property>
        <name>yarn.nodemanager.delete.debug-delay-sec</name>
        <value>604800</value>
    </property>

    <!-- 设置yarn历史服务器地址 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://JSYF3:19888/jobhistory/logs</value>
    </property>

    <property>
        <name>yarn.web-proxy.address</name>
        <value>JSYF3:8089</value>
        <description>proxy server hostname and port</description>
   </property>


9、修改workers

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/workers
JSYF3
JSYF1
JSYF2


10、分发安装包

ansible JSYF1,JSYF2 -m copy -a 'src=/opt/software/ dest=/opt/software/ mode=755 owner=root'


11、将Hadoop添加到环境变量

打开/etc/profile文件

vim /etc/profile
#HADOOP_HOME
export HADOOP_HOME=/opt/software/hadoop/hadoop-3.3.5
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_CLASSPATH=$HADOOP_HOME/lib
source /etc/profile

将环境变量同步到其他服务器

12、启动集群

:::danger
如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
:::

cd /opt/software/hadoop/hadoop-3.3.5/sbin/
hdfs namenode -format

start-dfs.shstop-dfs.sh两个文件顶部添加以下参数

vim /opt/software/hadoop/hadoop-3.3.5/sbin/start-dfs.sh
vim /opt/software/hadoop/hadoop-3.3.5/sbin/stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root


start-yarn.shstop-yarn.sh顶部也需添加以下

vim /opt/software/hadoop/hadoop-3.3.5/sbin/start-yarn.sh 
vim /opt/software/hadoop/hadoop-3.3.5/sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=root
YARN_NODEMANAGER_USER=root
YARN_PROXYSERVER_USER=root


在环境变量中添加如下几个配置:

vim /etc/profile

添加

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
vim /opt/software/hadoop/hadoop-3.3.5/sbin/hdfs
cd /opt/software/hadoop/hadoop-3.3.5/sbin/
./start-dfs.sh


:::danger
如果在完全分布式部署,Namenode和ResourceManger如果不是同一台机器,不能在NodeManager上启动 yarn,应该在ResouceManager所在的机器上启动yarn
:::
在JSYF1 166服务器上执行

cd /opt/software/hadoop/hadoop-3.3.5/sbin/ 
./start-yarn.sh


13、启动界面

http://10.9.70.172:9870/


http://10.9.70.166:8088/cluster

错误:::danger
发现active的node为0
:::

执行

jps

没有nademanager进程

vim /opt/software/hadoop/hadoop-3.3.5/etc/hadoop/yarn-site.xml

在yarn配置文件中增加配置

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>        
        <value>1024</value>
    </property>

实际上看nodemanage的日志可知:
是与doris的端口冲突
8030、8040

    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>JSYF1:8088</value>
    </property>
     <property>
         <name>yarn.resourcemanager.scheduler.address</name>
         <value>JSYF1:8099</value>
    </property>

    <property>
        <name>yarn.nodemanager.localizer.address</name>
        <value>0.0.0.0:8046</value>
    </property>

在166上重新启动Hadoop的yarn

./stop-yarn.sh 
./start-yarn.sh 

yarn的管理界面正常

14、启动历史服务器

mapred --daemon start historyserver

#创建文件夹
hadoop fs -mkdir /input
hadoop fs -put /home/test/words.txt /input

hadoop jar /opt/software/hadoop/hadoop-3.3.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar wordcount /input/words.txt /out


【参考】

Hadoop3.3.5最新版本安装分布式集群部署
Hadoop3.3.5最新版本安装分布式集群部署_hadoop最新版本_AI机械师的博客-CSDN博客
Doris与Hadoop yarn混合部署遇到的坑
Doris与Hadoop yarn混合部署遇到的坑 - 老董 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rainbow酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值