环境需求集群规划配置hosts下载 解压配置文件1. 配置hadoop-env.sh2. 配置core-site.xml3. 配置hdfs-site.xml4. 配置mapred-site.xml5. 配置yarn-site.xml6. 配置workers7. 配置start-dfs.sh 和 stop-dfs.sh 8. 配置start-yarn.sh 和 stop-yarn.sh9. 配置 hadoop 环境变量分发配置配置 hadoop 环境变量启动1. 启动 hadoop 之前在主节点redis01上 format 名称节点2. 在主节点redis01上启动Hadoop服务3. 查看Hadoop服务启动状态测试Web UI访问1. 访问HDFS端口98702. 访问端口8088停止
环境需求
- Java环境
- 安装SSH三台机器可以互通
集群规划
节点 | IP | HDFS | YARN |
redis01 | 192.168.92.145 | NameNode、SecondaryNameNode、DataNode | NodeManager、ResourceManager |
redis02 | 192.168.92.146 | DataNode | NodeManager |
redis03 | 192.168.92.147 | DataNode | NodeManager |
配置hosts
🚀🚀🚀这里有个小提示,如果有
127.0.1.1 主机名
,注掉或者删掉。我这里是 127.0.1.1 redis01
root@redis01:~# vim /etc/hosts
192.168.92.145 redis01 192.168.92.146 redis02 192.168.92.147 redis03
下载
- 下载Hadoop 3.3.2 ,下载二进制文件
- 选择下载链接
- 官方下载链接特别慢,建议使用清华镜像站下载。
解压
# 解压 root@redis01:/usr/local# tar -zxvf hadoop-3.3.2.tar.gz # 重命名 root@redis01:/usr/local# mv hadoop-3.3.2 hadoop
查看目录结构
配置文件
- 配置文件的路径在
/usr/local/hadoop/etc/hadoop
root@redis01:/usr/local/hadoop/etc/hadoop# ls
- 配置Hadoop的主要5个文件
文件名 | 配置对象 | 主要内容 |
hadoop-env.sh | hadoop运行环境 | 用来定义hadoop运行环境相关的配置信息 |
core-site.xml | 集群全局参数 | 用于定义系统级别的参数,如HDFS URL 、Hadoop的临时目录等 |
hdfs-site.xml | HDFS | 如名称节点和数据节点的存放位置、文件副本的个数、文件的读取权限等 |
mapred-site.xml | Mapreduce参数 | 包括JobHistory Server 和应用程序参数两部分,如reduce任务的默认个数、任务所能够使用内存的默认上下限等 |
yarn-site.xml | 集群资源管理系统参数 | 配置ResourceManager ,nodeManager的通信端口,web监控端口等 |
1. 配置hadoop-env.sh
root@redis01:/usr/local/hadoop/etc/hadoop# vim hadoop-env.sh
配置java环境变量,修改为自己的jdk目录
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
2. 配置core-site.xml
root@redis01:/usr/local/hadoop/etc/hadoop# vim core-site.xml
<configuration> <!-- 指定 namenode 的通信地址,默认 8020 端口 --> <property> <name>fs.defaultFS</name> <value>hdfs://redis01:8020</value> </property> <!-- 指定 hadoop 运行时产生文件的存储路径 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadoop_dir</value> </property> </configuration>
3. 配置hdfs-site.xml
root@redis01:/usr/local/hadoop/etc/hadoop# vim hdfs-site.xml
<configuration> <!-- namenode 上存储 hdfs 名字空间元数据--> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/namenode</value> </property> <!-- datanode 上数据块的物理存储位置--> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/datanode</value> </property> <!-- 设置 hdfs 副本数量 --> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
4. 配置mapred-site.xml
root@redis01:/usr/local/hadoop/etc/hadoop# vim mapred-site.xml
<configuration> <!-- 指定yarn运行--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> </configuration>
5. 配置yarn-site.xml
root@redis01:/usr/local/hadoop/etc/hadoop# vim yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <!-- 指定ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>redis01</value> </property> <!-- reducer取数据的方式是mapreduce_shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
6. 配置workers
- 一般在集群中,唯一地选择一台机器作为 NameNode ,一台机器作为 ResourceManager,这是redis01 (主)。集群中剩下的机器作为DataNode 和 NodeManager。这些是slaves (从)。
- 我这里设置redis01即是NameNode又是DataNode,
root@redis01:/usr/local/hadoop/etc/hadoop# vim workers
redis01 redis02 redis03
7. 配置start-dfs.sh
和 stop-dfs.sh
root@redis01:/usr/local/hadoop/sbin# vim start-dfs.sh root@redis01:/usr/local/hadoop/sbin# vim stop-dfs.sh
- 两个文件开始添加如下信息
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
8. 配置start-yarn.sh
和 stop-yarn.sh
root@redis01:/usr/local/hadoop/sbin# vim start-yarn.sh root@redis01:/usr/local/hadoop/sbin# vim stop-yarn.sh
- 两个文件开始添加如下信息
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
9. 配置 hadoop 环境变量
root@redis01:/usr/local/hadoop# vim /etc/profile.d/my_env.sh
export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
- 使配置生效。
root@redis01:/usr/local/hadoop# source /etc/profile
分发配置
将redis01配好文件分发给redis02、redis03机器。
root@redis01:/usr/local# xsync hadoop
配置 hadoop 环境变量
- 分发一下环境变量配置
root@redis01:/usr/local# xsync /etc/profile.d/my_env.sh
- 在redis02、redis03机器上使配置生效
root@redis02:/usr/local/hadoop# source /etc/profile root@redis03:/usr/local/hadoop# source /etc/profile
启动
1. 启动 hadoop 之前在主节点redis01上 format 名称节点
注意:
不能一直格式化NameNode,格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。
- 如果多次format不仅会造成数据丢失,还会导致hdfs集群主从角色直接互不相识,此时应该删除所有机器下的hadoop.tmp.dir目录,并重新format来解决
# 格式化HDFS [只有首次部署才可使用]【谨慎操作,只在master上操作】 root@redis01:/usr/local/hadoop/bin# hdfs namenode -format
出现如下信息说明格式化成功
2. 在主节点redis01上启动Hadoop服务
启动HDFS集群和YARN集群,这里优先使用start-all.sh来启动
# # 在namenode服务器执行,我这里是redis01 root@redis01:/usr/local/hadoop/sbin# start-all.sh
3. 查看Hadoop服务启动状态
root@redis01:/usr/local/hadoop/bin# xcall jps
测试
- Wordcount 是 MapReduce 的示例程序,可以统计某个文件中,各个单词出现的次数
- 在 hdfs 文件系统中创建存放被测试文件的目录
input
root@redis01:/usr/local/hadoop# hadoop fs -mkdir /input
- 查看
input
目录是否创建成功
root@redis01:/usr/local/hadoop# hadoop fs -ls -R /
- 创建测试文件
test.txt
并上传到 hdfs 中
# 在desktop下创建测试文件test.txt root@redis01:/usr/local/hadoop# vim /home/bigdata/Desktop/test.txt # 将 test.txt 上传到 hdfs 中 root@redis01:/usr/local/hadoop# hadoop fs -put /home/bigdata/Desktop/test.txt /input
- 运行 wordcount 程序
root@redis01:/usr/local/hadoop/share/hadoop/mapreduce# hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar wordcount /input /output
root@redis01:/usr/local/hadoop/share/hadoop/mapreduce# hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar wordcount /input /output
- 日志信息表示成功
- 查看 hdfs 中新生成的文件
root@redis01:~# hadoop fs -ls -R /
/output/part-r-00000
里就是本次运行的结果root@redis01:~# hadoop fs -cat /output/part-r-00000
Web UI访问
1. 访问HDFS端口9870
以前测试端口号是50070,3.0版本以后默认是9870
2. 访问端口8088
- 访问:redis01:8088
停止
root@redis01:/usr/local/hadoop/sbin# stop-all.sh