Hadoop深度探索与实战(一篇拿捏)

catalog

⭐️Hadoop简介与核心概念

        1.1 什么是Hadoop?

        1.2 Hadoop核心组件

        1.3 Hadoop生态系统

⭐️Hadoop集群架构与配置

        2.1 部署Hadoop集群

        2.2 Hadoop配置文件解析

        2.3 Hadoop集群安全性

⭐️HDFS:Hadoop全局文件系统

        3.1 HDFS体系结构与工作原理

        3.2 HDFS读写操作

        3.3 HDFS高可用性和容错性

⭐️MapReduce编程与优化

        4.1 MapReduce基础概念

        4.2 MapReduce编程实例

        4.3 MapReduce性能优化

⭐️YARN:Hadoop 集群资源管理

        5.1 YARN体系结构与组件

        5.2 YARN资源调度

        5.3 YARN应用管理

⭐️高级主题与实际应用

        6.1 Hadoop 高可用性

        6.2 数据处理框架与技术栈

        6.3 大数据实际应用案例

⭐️总结与展望


⭐️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集群  

  1. 操作系统准备:确保所有节点(主节点和从节点)Centos7.x版本,克隆3台,hosts主机地址配上。

  2. 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.shmapred-env.shyarn-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在大数据领域的未来将持续多样化,发展出更多应用场景和解决方案,为各行各业的数据处理和分析提供强有力的支持。

                                                                                ⏳  名言警句:说会的,说对的
                                                                                ✨ 原创不易,还希望各位大佬支持一下
                                                                                👍 点赞,你的认可是我创作的动力!
                                                                                ⭐️ 收藏,你的青睐是我努力的方向!
                                                                                ✏️ 评论,你的意见是我进步的财富!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值