一、下载
Apache Hadoop
清华大学开源软件镜像站 | Tsinghua Open Source Mirror
二、集群规划
10.9.70.172 | 10.9.70.166 | 10.9.70.168 | |
---|---|---|---|
JSYF3 | JSYF1 | JSYF2 | |
Hadoop | master | slave1 | slave2 |
NameNode、DataNode、NodeManager | ResourceManager、DataNode、NodeManager | SecondaryNameNode、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浏览操作文件系统,一般会遇到权限问题
这是因为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
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.sh
,stop-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.sh
,stop-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.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混合部署遇到的坑 - 老董 - 博客园