catalog
⭐️Hadoop简介与核心概念
1.1 什么是Hadoop?
- 大数据处理框架的概述
大数据处理框架是针对海量、复杂数据的技术体系,实现高效存储、处理和分析。Hadoop作为这一领域的先锋,深刻影响着大时代数据的演进。
- Hadoop 的起源和历史
Hadoop起源于2005年,由Apache基金会发起,旨在解决Google论文中提出的全民存储和计算问题。其核心是全民文件系统HDFS和全民计算模型MapReduce。HDFS以数据切块方式存储,实现高可用和再生负载,为海量数据提供稳定存储。MapReduce则实现数据处理的循环计算,将任务划分成多个子任务并分配在多台机器上任务执行。
Hadoop的成功得益于其强大的横向开源扩展能力和容错性。其生态系统也逐渐丰富,包括数据仓库Hive、流式处理Storm、实时处理Spark等。Hadoop不仅改变了大数据处理方式,也催生了一系列新技术和商业模式,为数字时代的数据应用提供了无限可能。
1.2 Hadoop核心组件
- HDFS:Hadoop概览文件系统
HDFS是Hadoop的存储层,旨在存储和管理海量数据。下面将大数据文件切分块,并在集群中的多个节点上进行分布式存储。HDFS的设计提高可靠性,通过数据发音和副本机制数据的安全性和内容错误性,使得数据能够被高效地读取和写入。
- MapReduce:全民计算编程模型
MapReduce是Hadoop的计算模型,用于处理大规模数据集。接下来的任务划分为几个小任务,由集群中的多台计算机批量执行。Map阶段将数据划分为键值对,经过计算后生成中间结果,而减少阶段对中间结果进行合并和高效处理。MapReduce提供了高度可扩展的方式来解决复杂的数据处理问题,使得数据分析和转化更加高效。
- YARN:资源管理和作业调度
YARN是Hadoop的资源管理和作业调度平台,负责管理集群中的计算资源和任务调度。将计算资源划分成容器,为不同的应用程序分配资源,实现多个应用程序在同一个集群上共存运行。YARN的出现使得Hadoop集群可以更加高效地利用资源,实现更好的资源管理和作业调度。
这三个组件共同构成了Hadoop框架,从而能够应对大规模数据的存储、处理和管理挑战,为大数据领域提供了强大的工具和解决方案。
⭐️Hadoop集群架构与配置
2.1 部署Hadoop集群
-
操作系统准备:确保所有节点(主节点和从节点)Centos7.x版本,克隆3台,hosts主机地址配上。
-
Java安装:在所有节点上安装OpenJDK 8。
上传JKD8_linux 版本到```/opt/software/```如果没有联系我
在Linux系统下的opt目录中查看软件包是否导入成功
ls /opt/software/
解压JDK到/opt/module目录下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
配置JDK环境
sudo vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
保存退出,source一下/etc/profile文件,让新的环境变量PATH生效
source /etc/profile
测试JDK是否安装成功
java -version
重新启动虚拟机
sudo reboot
本地模式运行Demo
1)创建在hadoop-3.1.3文件下面创建一个wcinput文件夹
mkdir wcinput
cd wcinput
vim word.txt
#添加如下
hadoop yarn
hadoop mapreduce
atguigu
atguigu
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
cat wcoutput/part-r-00000
集群模式
1)准备3台客户机(关闭防火墙、静态IP、主机名称)
2)安装JDK
3)配置环境变量
4)安装Hadoop
5)配置环境变量
详情如上
6)配置集群
#在hadoop102上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上。
scp -r /opt/module/jdk1.8.0_212 peng@hadoop103:/opt/module
#在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。
scp -r peng@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
#在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。
scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module
#删除hadoop103中/opt/module/hadoop-3.1.3/wcinput
rm -rf wcinput/
#同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103
xsync -av hadoop-3.1.3/ atguigu@hadoop103:/opt/module/hadoop-3.1.3/
#分发脚本实现
cd /home/peng
mkdir bin
cd bin
vim xsync
在该文件中编写如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
#修改脚本 xsync 具有执行权限
chmod +x xsync
#测试脚本
xsync /home/atguigu/bin
#将脚本复制到/bin中,以便全局调用
sudo cp xsync /bin/
#同步环境变量配置(root所有者)
sudo ./bin/xsync /etc/profile.d/my_env.sh
sudo ./bin/xsync /etc/profile.d/my_env.sh
7)单点启动
ssh hadoop103
一直回车 exit 到hadoop102
8)配置ssh
将公钥拷贝到要免密登录的目标机器上
[peng@hadoop102 .ssh]$ ssh-copy-id hadoop102
[peng@hadoop102 .ssh]$ ssh-copy-id hadoop103
[peng@hadoop102 .ssh]$ ssh-copy-id hadoop104
9)群起并测试集群
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
xsync /opt/module/hadoop-3.1.3/etc
hdfs namenode -format
sbin/start-dfs.sh
sbin/start-yarn.sh
Web端查看HDFS的NameNode
浏览器中输入:http://hadoop102:9870
查看HDFS上存储的数据信息
Web端查看YARN的ResourceManager
浏览器中输入:http://hadoop103:8088
查看YARN上运行的Job信息
2.2 Hadoop配置文件解析
core-site.xml:包含Hadoop核心配置,如文件系统URL、I/O缓冲区大小等。
hdfs-site.xml:配置HDFS的特定参数,如数据副本数量、块大小等。
mapred-site.xml:用于配置MapReduce的参数,如任务跟踪器和任务分配器。
yarn-site.xml:包含YARN的配置,如ResourceManager和NodeManager的地址、内存分配等。
hadoop-env.sh:设置Hadoop环境变量,如Java路径、内存配置等。
hdfs-env.sh、mapred-env.sh、yarn-env.sh:环境变量文件,用于配置各个组件的环境。
这些配置文件中的参数可以影响Hadoop集群的性能、资源分配、数据处理方式等。
2.3 Hadoop集群安全性
用户认证和授权:Hadoop提供基于Kerberos的用户认证和访问控制,确保只有授权用户能够访问集群资源。
数据加密:Hadoop支持数据在传输和存储过程中的加密,防止敏感数据泄露。
集群通信安全:通过安全套接字层(SSL/TLS)保障集群内部通信的安全性。
ACL和权限:通过访问控制列表(ACL)和文件权限,限制用户对文件和目录的操作。
审计日志:启用审计日志,记录集群活动和操作,以便追踪和分析。
防火墙和网络安全:使用防火墙、网络隔离等手段,保障集群的网络安全。
软件更新和漏洞修复:定期更新Hadoop版本,及时修复已知漏洞。
安全集群管理:使用集群管理工具,如Apache Ambari,简化集群的安全配置和管理。
⭐️HDFS:Hadoop全局文件系统
3.1 HDFS体系结构与工作原理
主从结构:HDFS采用主从结构,包括一个NameNode(主节点)和多个DataNode(从节点)组成。NameNode负责管理文件元数据,DataNode负责存储实际数据。
数据块划分:文件在HDFS中被切分成固定大小的数据块(通常是128MB或256MB),并分布在不同的DataNode上。
副本机制:HDFS使用副本机制来提高数据的容错性。每个数据块默认有3个副本,分布在不同的DataNode上,以保障数据的可靠性。
写操作流程:客户端向NameNode请求写入数据,NameNode返回可用的DataNode列表。客户端直接与DataNode进行数据写入,DataNode之间通过管道传输数据。
读操作流程:客户端向NameNode请求读取数据,NameNode返回DataNode列表。客户端从最近的DataNode读取数据,提高读取速度。
3.2 HDFS读写操作
写操作:客户端将数据分成数据块,向NameNode发起写请求。NameNode确定数据块的存储位置并返回DataNode列表。客户端与第一个DataNode建立连接,将数据写入。该DataNode将数据传输到其他副本所在的DataNode,并向NameNode报告写入完成。
读操作:客户端向NameNode发起读请求,获取数据块的位置。客户端与最近的DataNode建立连接,读取数据。如果某个DataNode无法提供数据,客户端会尝试其他副本所在的DataNode。
3.3 HDFS高可用性和容错性
NameNode高可用性:HDFS引入了主备的NameNode架构。在主节点故障时,备用节点可以快速接管,从而保证文件系统的可用性。
数据副本:HDFS的副本机制确保数据的冗余存储,即使某个DataNode故障,其他副本仍可提供数据。
周期性检查:DataNode定期向NameNode汇报数据块状态。如果某个DataNode失效,NameNode会移除相应的数据块副本。
数据块恢复:如果某个数据块副本损坏或丢失,HDFS会根据副本数量在其他DataNode上创建新的副本,以保障数据的完整性。
数据节点自动扩展:HDFS支持动态添加DataNode,以扩展存储容量和吞吐量。
⭐️MapReduce编程与优化
4.1 MapReduce基础概念
Map阶段:在Map阶段,输入数据被切分成小块,每个数据块由一个"Map"任务处理。"Map"任务将输入数据映射为一系列键值对,经过处理生成中间结果。
Shuffle和Sort阶段:在Shuffle和Sort阶段,中间结果按照键进行排序并重新分区,以便于进一步的处理。这个阶段由Hadoop自动完成。
Reduce阶段:在Reduce阶段,"Reduce"任务将相同键的中间结果进行合并和处理,生成最终的输出结果。
4.2 MapReduce编程实例
下面是一个简单的Word Count示例,展示了如何使用MapReduce进行编程:
Map函数:将输入文本中的单词切分为键值对,其中键为单词,值为1。
public void map(Text key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] words = line.split(" ");
for (String word : words) {
context.write(new Text(word), new IntWritable(1));
}
}
Reduce函数:对相同单词的键值对进行合并,计算总频率。
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable value : values) {
sum += value.get();
}
context.write(key, new IntWritable(sum));
}
4.3 MapReduce性能优化
数据本地性:尽量将任务调度到存储有数据块的节点,减少数据传输开销。
合理划分分区:调整分区策略,使得Reduce任务均匀分布,避免某些节点负载过重。
Combiner函数:使用Combiner函数,在Map任务本地对中间结果进行合并,减少数据传输量。
压缩中间结果:对中间结果进行压缩,减少网络传输和磁盘空间开销。
并行度设置:根据集群规模和硬件配置,合理设置任务并行度和容器大小。
数据倾斜处理:处理数据倾斜情况,避免某些Reduce任务负载过重。
复用对象:在MapReduce任务中,复用对象以减少垃圾回收开销
⭐️YARN:Hadoop 集群资源管理
5.1 YARN体系结构与组件
ResourceManager(资源管理器):全局资源管理器,负责集群中资源的分配和调度。它监控集群中的资源使用情况,接受应用程序的资源请求,决定资源分配方案。
NodeManager(节点管理器):每个集群节点上的本地资源管理器。它监控节点上的资源使用情况,与ResourceManager通信,根据指令启动和停止容器,管理任务的执行。
ApplicationMaster(应用程序管理器):每个应用程序都有一个ApplicationMaster,它负责与ResourceManager协商资源,监控任务执行,处理任务失败,以及与NodeManager通信管理任务的生命周期。
Container:由NodeManager管理的资源分配单元,包括CPU、内存等。应用程序通过容器执行任务。
5.2 YARN资源调度
YARN的资源调度机制允许多个应用程序在同一个集群上共存并共享资源。ResourceManager根据资源的需求和可用性,使用调度器来决定将资源分配给哪个应用程序。调度器有多种实现,其中包括FIFO(先进先出)、Capacity Scheduler(按照预定义的容量比例分配资源)和Fair Scheduler(公平分配资源,支持多租户)等。
5.3 YARN应用管理
ApplicationMaster管理:每个应用程序的ApplicationMaster负责与ResourceManager协商资源、监控任务执行、处理任务失败等。一旦应用程序启动,它会向ResourceManager注册自己,并请求资源。
任务执行:ResourceManager将资源分配给ApplicationMaster,后者负责请求NodeManager为应用程序分配容器。每个容器内部可以执行特定的任务,如MapReduce任务、Spark任务等。
任务失败处理:如果任务失败,ApplicationMaster会通知ResourceManager重新分配容器或处理其他恢复操作,以确保应用程序的稳定性和可用性。
⭐️高级主题与实际应用
6.1 Hadoop 高可用性
HDFS高可用性:通过引入HDFS的NameNode高可用性机制,使用了两个NameNode节点:一个主节点和一个备用节点,以确保在主节点故障时能够迅速切换到备用节点,从而不影响数据访问。
YARN高可用性:YARN ResourceManager的高可用性确保了在ResourceManager节点故障时的快速切换,以避免资源管理中断。
ZooKeeper:Hadoop常使用ZooKeeper来管理集群的元数据和状态信息,保证分布式系统的一致性和协调,从而提高了整个集群的可用性。
6.2 数据处理框架与技术栈
MapReduce:Hadoop最早的计算模型,用于分布式批处理数据处理。
Apache Spark:快速、通用、内存计算的数据处理引擎,支持批处理和实时流处理。
Apache Hive:基于Hadoop的数据仓库,提供类似SQL的查询语言来分析和查询大数据。
Apache Pig:用于分析大数据的高级平台,通过Pig Latin语言实现数据处理。
Apache HBase:分布式NoSQL数据库,适用于海量数据的实时读写。
Apache Kafka:高吞吐量的分布式消息传递平台,用于实时流数据处理。
机器学习框架(如TensorFlow、PyTorch):集成了机器学习能力,用于大规模数据的模
6.3 大数据实际应用案例
金融行业:利用大数据分析市场趋势、风险评估、欺诈检测等。
零售业:通过大数据分析消费者行为,优化商品定价、推荐算法和库存管理。
医疗保健:分析患者数据、疾病模式,帮助诊断和治疗决策。
能源行业:分析能源消耗模式,优化能源分配和资源管理。
智能城市:分析城市数据以改善交通流量、垃圾管理、能源使用等。
社交媒体:分析用户行为,提供个性化内容和广告。
农业:分析气象和土壤数据,优化农作物种植和管理。
⭐️总结与展望
- Hadoop的未来发展趋势
-
更加灵活的架构:Hadoop正朝着更加灵活的架构演进,以适应不断变化的数据处理需求。这可能包括更好的集成和支持流数据、实时处理和机器学习等领域。
-
生态系统扩展:Hadoop生态系统将持续扩展,包括更多与数据处理和分析相关的组件,如数据湖管理、数据质量控制、自动化调度等,以满足不同应用场景的需求。
-
性能和优化:未来的Hadoop版本将致力于提高性能和效率,减少资源开销,从而更好地应对大规模数据处理和分析的挑战。
-
云原生化:随着云计算的普及,Hadoop将更加深入地融入云原生生态系统,提供更方便的部署、管理和扩展方式。
-
- 综合案例回顾与展望
- 过去几年中,Hadoop已经在许多领域取得了成功应用。举例来说,某电商公司利用Hadoop构建了一个大数据平台,实时监控用户行为,优化推荐算法,提升了用户购物体验。同时,在医疗领域,Hadoop帮助研究人员分析了大量基因数据,加速了疾病诊断和治疗方法的研发。
- 展望未来,Hadoop将继续在各个领域发挥重要作用。例如,智能城市可以利用Hadoop分析各类传感器数据,提升城市管理效率。金融领域可以利用Hadoop进行风险评估和欺诈检测。农业领域可以应用Hadoop分析土壤数据,优化农作物种植。
- 综合来看,Hadoop在大数据领域的未来将持续多样化,发展出更多应用场景和解决方案,为各行各业的数据处理和分析提供强有力的支持。
⏳ 名言警句:说会的,说对的
✨ 原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!