目录
(1).hadoop3.3.1的安装前准备
(2).hadoop3.3.1的3种部署模式
(3).Local (Standalone) Mode(本地独立模式)部署
(4).Pseudo-Distributed Mode(伪分布式模式)部署
(5).hadoop3.3.1单节点集群的yarn部署
(6).参考资料
(1).安装前准备
下载页面:
http://www.apache.org/dyn/closer.cgi/hadoop/common/
https://apache.claz.org/hadoop/common/
https://apache.claz.org/hadoop/common/hadoop-3.3.1/
下载:
wget https://apache.claz.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
安装必须的软件:
yum install -y ssh
yum install -y pdsh
在etc/hadoop/hadoop-env.sh中配置环境变量,必须在这里配置,在/etc/profile中配置无效:
export JAVA_HOME=你的java home
我解押后放在了目录:
/app/3rd/hadoop3.3.1
执行如下命令将显示 hadoop 脚本的使用文档:
bin/hadoop
(2).hadoop的3种部署模式
hadoop有3中部署模式:
Local (Standalone) Mode:(本地独立模式)
默认情况下,Hadoop 配置为在非分布式模式下作为单个 Java 进程运行。这对于调试很有用。用完即销毁进程。
Pseudo-Distributed Mode:(伪分布式模式)
Hadoop 也可以以伪分布式模式在单节点上运行,其中每个 Hadoop 守护进程在单独的 Java 进程中运行。
Fully-Distributed Mode:(全分布式模式)
生产级的集群分布式模式。
(3).Local (Standalone) Mode(本地独立模式)部署
其实这个模式也不叫部署,开一个进程执行完后就会杀掉,不会长存。
cd /app/3rd/hadoop3.3.1
使用官方的一个例子:
复制解压后的 conf 目录以用作输入,然后查找并显示给定正则表达式的每个匹配项。输出写入给定的输出目录。
mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar grep input output 'dfs[az.] '
cat output/ *
执行完成后查看,可以看到进程都已经消失:
(4).Pseudo-Distributed Mode(伪分布式模式)部署
修改如下配置:
etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.26.237.196:9000</value>
</property>
</configuration>
etc/hadoop/hdfs-site.xml:
dfs.replication:
指定文件副本数,默认值是3。因为是单节点集群,所以只有一个datanode,只能有1个副本,故修改为1。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
设置无密码ssh,否则无法ssh到本机:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
再次执行ssh成功。
1.格式化文件系统
bin/hdfs namenode -format
2.启动 NameNode 守护进程和 DataNode 守护进程
sbin/start-dfs.sh
我又执行了一次,相当于重新初始化,可以看到这个操作很危险:
会把老的元数据全部删除。
另外,我们需要指定存储目录到我们新磁盘的挂载点,防止/tmp所在挂载点的空间不够用。
暂时先保持原状。
但是执行依然报错:
在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
并且新建linux用户:useradd hdfs
再次执行成功:
jps查看,成功:可以看到一个namenode,一个datanode,一个SecondaryNameNode。
3.浏览 NameNode 的 Web 界面;默认情况下,它在以下位置可用:
http://namenode-ip:9870/
4.创建执行 MapReduce 作业所需的 HDFS 目录:
bin/hdfs dfs -mkdir /test
访问namenode的web界面可以查到刚才创建的目录:
http://namenode-ip:9870/
5.将输入文件复制到分布式文件系统中:
bin/hdfs dfs -put etc/hadoop/*.xml /test
访问namenode的web界面可以查到刚才传到hdfs的文件:
http://namenode-ip:9870/
6.运行提供的一些示例
查找并显示给定正则表达式的每个匹配项。输出写入给定的输出目录。
需要给这个例子建立hdfs目录,因为这个官方例子使用到了这些目录和文件:
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/root root是你要执行程序时所使用的用户
bin/hdfs dfs -mkdir input 这个input会在/user/root下创建,root是你当前的用户
bin/hdfs dfs -put etc/hadoop/*.xml input 同样会把文件上传到/user/root/input
执行官方例子:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar grep input output 'dfs[az.] '
可以看到程序创建了output目录,并将结果以文件的形式放在这个目录下:
7.检查输出文件:将输出文件从分布式文件系统复制到本地文件系统并检查它们
bin/hdfs dfs -get output output
cat output/*
或者直接在hdfs上查看:
bin/hdfs dfs -cat output/*
8.完成后,停止守护进程:
stop前先看下目前的进程:
执行stop命令:
sbin/stop-dfs.sh
jps查看可以看到已经全部停止:
9.进程&端口总结
9.1.NameNode进程
端口9870:NameNode 的 Web 界面
端口9000:是fileSystem默认的端口号。前边的部分有提到:
9.2.DataNode进程:
端口9864:DataNode 的 Web 界面
9.3.SecondaryNameNode进程
端口9868:SecondaryNameNode的web界面。
(5).hadoop3.3.1单节点集群的yarn部署
1.修改配置文件etc/hadoop/mapred-site.xml,加入如下内容:
mapreduce.framework.name:
mapreduce/flink等 基于yarn来实现计算的,基础开关。
mapreduce.application.classpath:
指定要运行程序的classpath路径。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name> <value>
</property>
</configuration>
2.修改配置文件etc/hadoop/yarn-site.xml:
yarn.nodemanager.aux-services:
配置shuffle机制。map 阶段处理的数据如何传递给 reduce 阶段,是 MapReduce 框架中最关键的一个流 程,这个流程就叫 shuffle。shuffle是洗牌、发牌 ——(核心机制:数据分区,排序,分组,规约,合并等过程)。
yarn.nodemanager.env-whitelist:
容器可能会覆盖的环境变量,而不是使用NodeManager的默认值。
yarn.nodemanager.env-whitelist
容器可能会覆盖的环境变量,而不是使用NodeManager的默认值。
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
3.启动 ResourceManager 守护进程和 NodeManager 守护进程
sbin/start-yarn.sh
但是报错:
要在sbin/start-yarn.sh和sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
同时要创建linux用户:
useradd yarn
再次执行,成功:
jps查看:可以看到yarn的两个组件,一个NodeManager,一个ResourceManager。
4.浏览 ResourceManager 的 Web 界面;默认情况下,它在以下位置可用:
资源管理器 - http://localhost:8088/
5.运行 MapReduce 作业
执行官方例子:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar grep input output 'dfs[az.] '
6.完成后,停止守护进程:
sbin/stop-yarn.sh
7.进程&端口总结
7.1.NodeManager进程
端口8042:nodemanager的web界面
7.2.ResourceManager进程
端口8088:resourcemanager的web界面
(6).参考资料
1.Hadoop: Setting up a Single Node Cluster.
https://hadoop.apache.org/docs/r3.3.1/hadoop-project-dist/hadoop-common/SingleCluster.html
2.Prometheus 监控 Hadoop3
https://blog.csdn.net/weixin_43973883/article/details/106527494
3.hadoop端口使用配置总结(非常好的总结)
https://blog.csdn.net/longshenlmj/article/details/45147827