Hadoop1:Ubuntu安装Hadoop

Hadoop1:Ubuntu安装Hadoop

环境需求

  • 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

下载

  1. 访问官网:http://hadoop.apache.org/
notion image
  1. 下载Hadoop 3.3.2 ,下载二进制文件
notion image
  1. 选择下载链接
notion image

解压

# 解压 root@redis01:/usr/local# tar -zxvf hadoop-3.3.2.tar.gz # 重命名 root@redis01:/usr/local# mv hadoop-3.3.2 hadoop
查看目录结构
notion image
notion image

配置文件

  • 配置文件的路径在/usr/local/hadoop/etc/hadoop
root@redis01:/usr/local/hadoop/etc/hadoop# ls
notion image
  • 配置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
notion image

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>
notion image

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>
notion image

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>
notion image

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>
notion image

6. 配置workers

  • 一般在集群中,唯一地选择一台机器作为 NameNode ,一台机器作为 ResourceManager,这是redis01 (主)。集群中剩下的机器作为DataNode 和 NodeManager。这些是slaves (从)。
  • 我这里设置redis01即是NameNode又是DataNode,
root@redis01:/usr/local/hadoop/etc/hadoop# vim workers
redis01 redis02 redis03
notion image

7. 配置start-dfs.shstop-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
notion image

8. 配置start-yarn.shstop-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
notion image

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
notion image
  • 使配置生效。
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
notion image
出现如下信息说明格式化成功
notion image

2. 在主节点redis01上启动Hadoop服务

启动HDFS集群和YARN集群,这里优先使用start-all.sh来启动
# # 在namenode服务器执行,我这里是redis01 root@redis01:/usr/local/hadoop/sbin# start-all.sh
notion image

3. 查看Hadoop服务启动状态

root@redis01:/usr/local/hadoop/bin# xcall jps
notion image

测试

  • Wordcount 是 MapReduce 的示例程序,可以统计某个文件中,各个单词出现的次数
  1. 在 hdfs 文件系统中创建存放被测试文件的目录 input
root@redis01:/usr/local/hadoop# hadoop fs -mkdir /input
 
  1. 查看input 目录是否创建成功
root@redis01:/usr/local/hadoop# hadoop fs -ls -R /
notion image
  1. 创建测试文件 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
  1. 运行 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
notion image
  • 日志信息表示成功
  1. 查看 hdfs 中新生成的文件
root@redis01:~# hadoop fs -ls -R /
notion image
/output/part-r-00000 里就是本次运行的结果
root@redis01:~# hadoop fs -cat /output/part-r-00000
notion image
 

Web UI访问

1. 访问HDFS端口9870

以前测试端口号是50070,3.0版本以后默认是9870
notion image

2. 访问端口8088

  • 访问:redis01:8088
notion image

停止

root@redis01:/usr/local/hadoop/sbin# stop-all.sh