参考资料:http://dblab.xmu.edu.cn/blog/1233/
注:本篇博文的实验需要一个具有Hadoop集群环境的Docker镜像。
- 运行环境
- 1. 使用Docker开启三个容器
- *2. 配置ip映射 测试ssh
- 3. 修改Hadoop的配置文件
- 3.1 hadoop-env.sh
- 3.2 core-site.xml
- 3.3 hdfs-site.xml
- 3.4 mapred-site.xml
- 3.5 yarn-site.xml
- 3.6 workers
- 3.6 复制配置文件
- 3.7 检验配置文件是否复制成功
- 4. 启动 Hadoop集群
- 4.1 Master节点初始化名称节点
- 4.2 在Master节点启动集群
- 4.3 JPS 查询结果
- 4.4 通过Web访问集群
- 5. 运行分布式实例
- 5.1 在HDFS创建用户目录
- 5.2 上传本地hadoop配置文件到HDFS
- 5.3 运行 MapReduce 作业
- 5.4 查询结果
- 6.关闭集群
Ubuntu20.04
Hadoop3.3.1
JDK8
1. 使用Docker开启三个容器
本次测试的节点介绍
| 节点名称 | 作用 |
|---|---|
| master | 主节点 |
| slave1 | 副节点 |
| slave2 | 副节点 |
使用已具有Hadoop集群环境的镜像创建容器、一个终端负责控制一个容器
主节点
sudo docker run -it -h master --name master ubuntu/hadoop
副节点1
sudo docker run -it -h slave1 --name slave1 ubuntu/hadoop
副节点2
sudo docker run -it -h slave2 --name slave2 ubuntu/hadoop*2. 配置ip映射 测试ssh
接下来的操作需对三个节点同时进行
每次容器重新启动后都需要配置hosts
vim etc/hosts
根据查询可知,三个节点的IP信息如下表所示:
| 节点名称 | 映射的IP |
|---|---|
| master | 172.17.0.2 |
| slave1 | 172.17.0.3 |
| slave2 | 172.17.0.4 |
为了使他们三个节点能互相连接,需要在每个的配置文件里加上另外两个的IP,如下图所示
修改好后保存退出
测试SSH
以Master节点为例,如果它能连接slave1和slave2,说明ssh功能完好(对slave1、slave2执行同样的操作,这里略过)
ssh slave1 exit ssh slave2 exit
搭建Hadoop集群需要修改的配置文件有如下3个。因为已经开启了3个节点,这里采取的策略是先在master节点修改好配置文件,接着将该所有配置文件使用 cp命令复制到其他两个节点的对应目录下。注:表示集群节点的配置文件(workers) 需要单独修改
文件都在 ./etc/hadoop 的位置
- hadoop-env.sh 配置Hadoop运行相关的环境变量,比如设置JDK路径、集群各个进程的用户等等
- core-site.xml设置hadoop临时目录、HDFS的远程地址
- hdfs-site.xml 对于HDFS,名称/数据节点存放位置、文件副本个数等
- mapred-site.xml 设置MapReduce参数
- yarn-site.xml 配置集群资源管理系统参数
- workers 指定集群中工作的副节点
修改配置时,只添加内容,其他内容原封不变。
3.1 hadoop-env.shexport JAVA_HOME=/usr/local/jdk8 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root3.2 core-site.xml
3.3 hdfs-site.xmlhadoop.tmp.dir file:/usr/local/hadoop/tmp Abase for other temporary directories. fs.defaultFS hdfs://master:9000
3.4 mapred-site.xmldfs.namenode.name.dir file:/usr/local/hadoop/namenode_dir dfs.datanode.data.dir file:/usr/local/hadoop/datanode_dir dfs.replication 3
3.5 yarn-site.xmlmapreduce.framework.name yarn yarn.app.mapreduce.am.env HADOOP_MAPRED_HOME=/usr/local/hadoop mapreduce.map.env HADOOP_MAPRED_HOME=/usr/local/hadoop mapreduce.reduce.env HADOOP_MAPRED_HOME=/usr/local/hadoop
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname master
至此,已修改好了统一的配置文件,接下来可以把master节点的配置目录复制到其他节点
3.6 workers3.6 复制配置文件该配置文件负责设置Hadoop集群的从节点
scp -rq /usr/local/hadoop/etc/hadoop root@slave1:/usr/local/hadoop/etc/ scp -rq /usr/local/hadoop/etc/hadoop root@slave2:/usr/local/hadoop/etc/3.7 检验配置文件是否复制成功
分别在 slave1和slave2节点检验
cat /usr/local/hadoop/etc/hadoop/yarn-site.xml
出现配置信息则说明拷贝成功
4. 启动 Hadoop集群4.1 Master节点初始化名称节点
该操作只有在第一次启动集群时执行,之后再次启动集群无需初始化,否则会出错
cd /usr/local/hadoop bin/hdfs namenode -format4.2 在Master节点启动集群
cd /usr/local/hadoop sbin/start-all.sh4.3 JPS 查询结果
分别在三个节点输入 jps 命令查询当前的进程
若启动正常,各节点进程情况如下:
| 节点名称 | 进程个数 | 进程名 |
|---|---|---|
| master | 4 | Jps、ResourceManager、SecondaryNameNode、NameNode |
| slave1 | 3 | Jps、DataNode、NodeManager |
| slave2 | 3 | Jps、Datanode、NodeManager |
URL: masterIp:8088/cluster
我这里的地址是 http://172.17.0.2:8088/cluster
5. 运行分布式实例5.1 在HDFS创建用户目录接下来的操作均在 Master节点进行
cd /usr/local/hadoop/bin ./hdfs dfs -mkdir -p /user/hadoop/input ./hdfs dfs -ls /user/hadoop5.2 上传本地hadoop配置文件到HDFS
cd /usr/local/hadoop/bin ./hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml /user/hadoop/input ./hdfs dfs -ls /user/hadoop/input
上传后可在外部通过web查询集群状态
http://172.17.0.2:8088/cluster/nodes
5.3 运行 MapReduce 作业cd /usr/local/hadoop/bin ./hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input /user/hadoop/output 'dfs[a-z.]+'
cd /usr/local/hadoop/bin ./hdfs dfs -cat /user/hadoop/output/*
至此,若出现上图结果,则说明执行成功!
6.关闭集群以下操作只需在 Master节点上执行
cd /usr/local/hadoop/sbin ./stop-all.sh



