文章目录
-
- 概述
- 环境准备
- Hadoop运行模式
-
- [Standalone Operation(本地)](#Standalone Operation(本地))
- [Pseudo-Distributed Operation(伪分布式模式)](#Pseudo-Distributed Operation(伪分布式模式))
概述
Hadoop: 分布式系统基础架构
解决问题: 海量数据存储、海量数据的分析计算
官网: https://hadoop.apache.org/
HDFS(Hadoop Distributed File System): 分布式文件系统,用于存储数据
Hadoop的默认配置【core-site.xml】: https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-common/core-default.xml == 配置Hadoop集群中各个组件间共享属性和通用参数以实现更好的性能和可靠性 == hadoop目录\share\hadoop\common\hadoop-common-3.3.6.jar
Hadoop的默认配置【hdfs-site.xml】: https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml === 配置HDFS组件中各种参数以实现更好的性能和可靠性(如数据块大小、心跳间隔等)== hadoop目录\share\hadoop\hdfs\hadoop-hdfs-3.3.6.jar
Hadoop的默认配置【mapred-site.xml】: https://hadoop.apache.org/docs/r3.3.6/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml === 配置MapReduce任务执行过程进行参数调整、优化等操作 == hadoop目录\share\hadoop\mapreduce\hadoop-mapreduce-client-core-3.3.6.jar
Hadoop的默认配置【yarn-site.xml】: https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml === 配置YARN资源管理器(ResourceManager)和节点管理器(NodeManager)的行为 == hadoop目录\share\hadoop\yarn\hadoop-yarn-common-3.3.6.jar
基础知识
Hadoop三大发行版本 Apache:最基础版本,入门学习友好 Cloudera:大型互联网企业用的多 == 收费 Hotronwords:文档好
Hadoop优点 高可靠性:Hadoop底层维护多个数据副本,以即使adoop某个计算元素或存储出现贴故障,也不会导致据的丢失 高扩展性:在集间分配任务数据,可方便的扩展数刻以干十的节点 高效性:在MapReducel的思想下,Hadoop是并行工作的,以加快任务处理速度 高容错性:能够自动将失败的任务重新分配
Hadoop 1.x组成 HDFS:数据存储 Common:辅助工具 MapReduce:计算以及资源调度
Hadoop组件构成
Hadoop 2.x组成 HDFS:数据存储 == 涉及进程【NameNode、DataNode、SecondaryNameNode、Journal Node、NFSGateway】 Common:辅助工具 MapReduce:计算== 涉及进程【JobTracker、TaskTracker、MapTask、ReduceTask】 Yarn:资源调度 == 涉及进程【ResourceManager、NodeManager、ApplicationMaster、TimelineServer】
HDFS(分布式文件系统)组成 NameNode:存储文件元数据,属性信息,比如文件名、文件权限等,以及每个文件的快列表以及其所在的DataNode DataNode:文件块数据、以及快数据的校验和 Secondary NameNode:监控HDFS状态的程序,每隔一段时间获取HDFS元数据快照 JournalNode:协调多个NameNodes之间共享编辑日志 NFSGateway:提供给用户访问 HDFS 文件系统的一种途径, 它将 HDFS 文件系统映射为标准的网络文件系统 (NFS) 挂载点
YARN(资源调度)组成 ResourceManager:主节点,负责协调集群资源并分配给各个应用程序 NodeManager:从节点,负责管理单个节点上的资源并执行任务 ApplicationMaster:新应用程序提交到集群时,会创建一个ApplicationMaster实例 TimelineServer:用户方便地查询 Hadoop 集群中运行过的历史作业和应用程序信息
MapReduce(计算)组成 JobTracker:主节点,负责协调集群资源并分配给各个任务 TaskTracker:从节点,负责管理单个节点上的资源并执行任务 JobHistoryServer:管理和存储MapReduce作业历史记录信息 MapTask和ReduceTask:执行任务的Java程序。新作业被提交到集群时,会创建多个Mapper和Reducer实例处理数据
MapReduce计算过程 Map:并行处理输入数据 Reduce:对Map结果进行汇总

Hadoop配置文件
配置文件路径: hadoop目录/etc/hadoop
Hadoop配置文件 core-site.xml:所有组件共享的通用属性和参数、修改文件系统、集群名称、日志路径等 hdfs-site.xml:HDFS特定的属性和参数、数据快大小、副本数、NameNode、DataNode的存储路径 mapred-site.xml:配置MapReduce任务执行过程进行参数调整、优化等操作 yarn-site.xml:配置YARN资源管理器(ResourceManager)和节点管理器(NodeManager)的行为
环境准备
配置
java
//修改主机名
//more /etc/sysconfig/network == 内容如下 //不同机器取不同的HOSTNAME,不要取成一样的
NETWORKING=yes
HOSTNAME=hadoop107
//=======================
//固定IP地址 == 自行百度
ifconfig
more /etc/sysconfig/network-scripts/ifcfg-ens33
//=======================
// 查看自定义主机名、ip的映射关系 == more /etc/hosts
ping 主机名


Hadoop配置
下载



配置环境变量
java
//将压缩包解压到指定目录
mkdir -p /opt/module/ && tar -zxvf hadoop-3.3.6.tar.gz -C /opt/module/
//进入解压后的软件目录
cd /opt/module/hadoop-3.3.6
//设置环境变量
vim /etc/profile
//此文件末尾添加下面四行内容
## Hadoop
export HADOOP_HOME=/opt/module/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
//使环境变量生效
source /etc/profile


Hadoop运行模式
默认模式 生产真正使用 分布模式 本地模式(Local) == Standalone Operation 伪分布模式(Pseudo-Distributed)== Pseudo-Distributed Operation 完全分布模式(Fully-Distributed)== Fully-Distributed Operation
Standalone Operation(本地)
官方Demo
官方Demo,统计文件中某个正则规则的单词出现次数
sh
# hadoop目录
cd /opt/module/hadoop-3.3.6
# 创建数据源文件 == 用于下面进行demo统计单词
mkdir input
# 复制一些普通的文件
cp etc/hadoop/*.xml input
# 统计input里面的源文件规则是'dfs[a-z.]+'的单词个数,并将结果输出到当前目录下的output目录下 == 输出目录不得提前创建,运行时提示会报错
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
# 查看统计结果
cat output/*
cat output/part-r-00000
# 显示出来的结果,跟grep查出来的一样

WordCount单词统计Demo
java
//创建数据目录
mkdir -p /opt/module/hadoop-3.3.6/input/wordCountData && cd /opt/module/hadoop-3.3.6/input/
//文件数据创建 = 用于demo测试
echo "cat apple banana" >> wordCountData/data1.txt
echo "dog" >> wordCountData/data1.txt
echo " elephant" >> wordCountData/data1.txt
echo "cat apple banana" >> wordCountData/data2.txt
echo "dog" >> wordCountData/data2.txt
echo " elephant queen" >> wordCountData/data2.txt
//查看数据内容
more wordCountData/data1.txt
more wordCountData/data2.txt
//开始统计wordCountData文件目录下的单词数
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /opt/module/hadoop-3.3.6/input/wordCountData wordCountDataoutput
//查看统计结果
cd /opt/module/hadoop-3.3.6/input/wordCountDataoutput
cat ./*



Pseudo-Distributed Operation(伪分布式模式)
概述: 单节点的分布式系统(用于测试使用)
配置修改
核心配置文件修改: vim /opt/module/hadoop-3.3.6/etc/hadoop/core-site.xml
xml
<configuration>
<!-- 默认是本地文件协议 file: -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.19.107:9000</value>
</property>
<!-- 临时目录 默认/tmp/hadoop-${user.name} -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.3.6/tmp</value>
</property>
</configuration>
核心配置文件修改: vim /opt/module/hadoop-3.3.6/etc/hadoop/hdfs-site.xml
xml
<configuration>
<!-- 集群设置为1, 默认3 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
启动DFS【9870】
Hadoop-DFS数据清空格式化
sh
hdfs namenode -format

启动DFS组件
注意: 启动过程中可能遇到非root用户、JAVA_HOME找不到的现象,导致启动失败,自行参考下面的问题解决
sh
# 未启动hadoop时所系统所运行java程序
jps
# 启动hadoop相关的应用程序
sh /opt/module/hadoop-3.3.6/sbin/start-dfs.sh
# 查看启动hadoop的应用变化
jps

访问DFS前端页面(不同版本的Hadoop的NameNode端口有变)
浏览器NameNode前端页面: http://192.168.19.107:9870/


dfs命令使用(主要用来操作文件)
帮助文档: hdfs dfs --help

复制物理机文件中hadoop中
sh
hdfs dfs -mkdir /test
hdfs dfs -put /opt/module/hadoop-3.3.6/input /test


文件展示以及读取文件内容
sh
hdfs dfs -ls -R /
hdfs dfs -cat /test/input/core-site.xml

创建目录、文件
sh
hdfs dfs -mkdir -p /test/linrc
hdfs dfs -touch /test/linrc/1.txt

使用mapreduce进行计算hadoop里面某个文件夹的内容
sh
hdfs dfs -ls /test/input
# 对hadoop里面某个文件夹内容进行单词统计
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /test/input/wordCountData /test/input/wordCountDataoutput2
hdfs dfs -ls /test/input
# 查看统计结果
hdfs dfs -cat /test/input/wordCountDataoutput2/*

启动Yarn组件【8088】
配置修改
强制指定Yarn的环境变量: /opt/module/hadoop-3.3.6/etc/hadoop/yarn-env.sh
java
export JAVA_HOME=/www/server/jdk8/jdk1.8.0_202
yarn-site.xml添加如下两个配置 /opt/module/hadoop-3.3.6/etc/hadoop/yarn-site.sh
xml
<configuration>
<!-- Site specific YARN configuration properties == https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.19.107</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_HO
ME</value>
</property>
<!-- 查看任务日志时,防止其重定向localhost,导致页面打开失败 -->
<property>
<name>yarn.timeline-service.hostname</name>
<value>192.168.19.107</value>
</property>
</configuration>

启动
java
//非常重要,必须回到hadoop的目录里面进行启动,我也不知道为什么
cd /opt/module/hadoop-3.3.6
//不要使用 sh命令启动,否则报错,我也不知道为什么
./sbin/start-yarn.sh

访问yarn前端页面
浏览器: http://ip:8088


运行计算dfs某个目录所有文件的单词数,yarn页面有运行记录


java
//单词计算开始
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /test/input/wordCountData /test/input/wordCountDataoutput3


启动MapReduce组件
配置修改
强制指定mapred的环境变量: /opt/module/hadoop-3.3.6/etc/hadoop/mapred-env.sh
java
export JAVA_HOME=/www/server/jdk8/jdk1.8.0_202
mapred-site.xml添加如下配置: /opt/module/hadoop-3.3.6/etc/hadoop/mapred-site.xml
xml
<configuration>
<!-- The runtime framework for executing MapReduce jobs. Can be one of local, classic or yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
<!-- mr运行日志采集系统配置 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.19.107:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.19.107:19888</value>
</property>
</configuration>
启动日志采集系统

sh
mapred --daemon start historyserver
查看任务日志


启动日志聚集(任务执行的具体详情上传到HDFS组件中)
未启动前


启动
注意: 如果yarn组件已经启动,修改yarn的配置需要重新启动,使得配置生效
sh
#停止日志系统
mapred --daemon stop historyserver
#停止yarn组件
cd /opt/module/hadoop-3.3.6
./sbin/stop-yarn.sh

yarn-site.xml添加如下配置 /opt/module/hadoop-3.3.6/etc/hadoop/yarn-site.sh
xml
<configuration>
<!-- Site specific YARN configuration properties == https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.19.107</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_HO
ME</value>
</property>
<property>
<name>yarn.timeline-service.hostname</name>
<value>192.168.19.107</value>
</property>
<!-- 日志聚集启动 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志聚集的日志保留的时间,单位秒 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>2592000</value>
</property>
</configuration>
sh
#启动yarn组件
cd /opt/module/hadoop-3.3.6
./sbin/start-yarn.sh
#启动日志系统
mapred --daemon start historyserver

sh
# 重新运行一个任务
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /test/input/wordCountData /test/input/wordCountDataoutput5



