为什么要搭建单机环境的Hadoop?
- 以最小化的成本学习和测试Hadoop;
- 搭建基于Hadoop的上层应用,比如单机Spark环境需要先拥有单机的Hadoop;
如果需要搭建分布式集群环境的Hadoop环境,请参考另外一篇:Hadoop3.x集群安装教程 - 简书 (jianshu.com)
一、准备工作
首先从官网下载好Linux的JDK和Hadoop,Apache的软件可以从国内镜像下载,比较快。
然后在阿里云上购买一台1C2G Linux CentOS7.5 X64系统的云服务器(172.23.24.28),然后在其上安装好JDK,假设存放和解压目录都在/root/soft
目录下。
#进入JDK所在目录
cd /root/soft
#解压
tar -zxvf jdk-8u65-linux-x64.tar.gz
#配置环境变量
vim /etc/profile
export JAVA_HOME=/root/soft/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
#验证
[root@iZuf6gmsvearrd5uc3emkyZ soft]# java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
二、Hadoop配置
假设我们Hadoop的压缩包也是在/root/soft
目录下,执行Hadoop的配置工作如下:
#进入目录
cd /root/soft
#解压
tar -zxvf hadoop-3.3.4.tar.gz
#修改hadoop配置文件hadoop-env.sh
cd /root/soft/hadoop-3.3.4/etc/hadoop
vim hadoop-env.sh
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
#改成你自己的JAVA_HOME地址
export JAVA_HOME=/root/soft/jdk1.8.0_241
#设置HADOOP环境变量
vim /etc/profile
export HADOOP_HOME=/root/soft/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
然后修改core-site.xml
中的配置:
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.23.24.28:8020</value>
</property>
<!-- 设置Hadoop本地保存数据路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/data/hadoop</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>
然后修改hdfs-site.xml
中的内容:
<!-- 设置SecondNameNode进程运行机器位置信息 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>172.23.24.28:9868</value>
</property>
然后再修改mapred-site.xml
配置文件:
<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>172.23.24.28:10020</value>
</property>
<!-- MR程序历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>172.23.24.28: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>
然后再修改yarn-site.xml
:
<!-- 设置YARN集群主角色运行机器位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>172.23.24.28</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://172.23.24.28:19888/jobhistory/logs</value>
</property>
<!-- 历史日志保存的时间 7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
然后再修改workers
配置文件:
172.23.24.28
最后一步,我们需要开通到本机的ssh免密连接服务:
# 生成公钥密钥,全部回车下一步即可
ssh-keygen -t rsa
ssh-keygen -t dsa
ssh-copy-id 172.23.24.28
# 输入登录密码即可
# 然后可以ssh自己试试是否为免密登录了
三、启动Hadoop
首次启动Hadoop集群的时候,我们需要进行Namenode格式化:
hdfs namenode -format
然后就可以一键启动HDFS和YARN了:
[root@node1 ~]# start-all.sh
Starting namenodes on [node1]
Last login: Fri Mar 10 13:33:24 CST 2023 from 172.23.24.28 on pts/2
Starting datanodes
Last login: Fri Mar 10 13:37:42 CST 2023 on pts/0
Starting secondary namenodes [node1]
Last login: Fri Mar 10 13:37:44 CST 2023 on pts/0
Starting resourcemanager
Last login: Fri Mar 10 13:37:53 CST 2023 on pts/0
Starting nodemanagers
Last login: Fri Mar 10 13:38:12 CST 2023 on pts/0
我们发现HDFS集群和YARN集群的角色都启动起来了,然后我们试验一下示例的单词计数:
cd /root/soft/hadoop-3.3.4/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-3.3.4.jar pi 2 4
最后执行成功出来计算结果就OK了,总体来说搭建过程和集群的搭建比较类似,不再赘述。