在我之前的工作中,接触到了大数据处理的需求。当时我们团队有一个专门的大数据部门,但由于中台重构导致整个系统开发量巨大,所有部门共享一个大数据部门,使得人力资源紧张,不得不临时承担起大数据相关的工作。尽管我对大数据知之甚少,但还是通过突击学习掌握了必要的知识,并迅速上手。尽管时间紧迫,这段经历对我而言十分有趣,也让我深刻认识到大数据处理的重要性和挑战。
大数据指的是对海量数据进行分析处理,从中提取有价值的信息,帮助企业做出决策。处理流程包括: 1. 获取数据 2. 处理数据 3. 展现结果
Hadoop是一个分布式系统基础框架,能够利用简单的编程模型处理大型计算机上的大型数据集。它主要解决以下问题:
如果一个文件非常大,超过世界上所有高级计算机的存储能力,可以将文件分成多个块,并将这些块分布到不同的HDFS节点上。为了使外部能够像访问本地文件一样访问分布式文件系统,需要一个统一的HDFS Master来管理文件信息。
从一个网络日志文件中计算独立IP及其出现次数,可以通过将任务划分为较小的任务来处理大量数据。
可以设置一个集群管理者YARN,它包含一个Master用于接收和分配任务,以及多个Slave用于执行任务。
Hadoop最初来源于Nutch项目,旨在构建一个大型全网搜索引擎。随着数据量的增长,遇到了扩展性问题,因此借鉴了Google的GFS和MapReduce论文解决了存储和索引问题。随后,Nutch的开发人员实现了HDFS和MapReduce,并将其从Nutch中分离出来,形成了独立的Hadoop项目。
HDFS是一个分布式文件系统,适合存储大型数据集。它的特点是“一次写入,多次读取”,支持高吞吐量访问。
所有文件都以block的形式存储在HDFS中。默认情况下,文件block大小为128M。HDFS通过块机制简化了存储子系统,并提高了数据的容错性和可用性。
HDFS的文件权限机制类似于Linux系统,通过r(读)、w(写)和x(执行)权限控制文件访问。
Hadoop集群中只有一个NameNode时,所有元数据信息都保存在FsImage和Edits文件中。SecondaryNameNode定期合并FsImage和Edits文件,以保持文件系统的一致性。
客户端发起文件上传请求,与NameNode建立通信。NameNode检查文件是否已存在,返回是否可以上传。客户端请求第一个block的传输目标DataNode服务器,NameNode根据配置文件和机架感知原理分配DataNode地址。
客户端向NameNode发起RPC请求,确定文件block的位置。NameNode返回文件的部分或全部block列表,这些DN地址按照距离客户端的远近进行排序。客户端选择排序靠前的DataNode来读取block。
在Java中操作HDFS,主要涉及以下类:
get
获取该对象。MapReduce是一种分布式计算框架,核心思想是“分而治之”。Map负责将复杂任务分解为多个简单任务,并行处理。Reduce负责将Map阶段的结果进行全局汇总。
MapReduce是一个分布式运算程序的编程框架,它将用户编写的业务逻辑代码与默认组件整合成一个完整的分布式运算程序。MapReduce的主要设计思路包括分而治之、一致的计算框架以及抽象模型Map和Reduce。
MapReduce的开发分为Map阶段、Shuffle阶段和Reduce阶段。Map阶段包括设置InputFormat类和自定义Map逻辑。Shuffle阶段包括分区、排序、规约和分组。Reduce阶段包括排序和合并,以及编写Reduce函数。
MapTask运行机制包括读取数据组件、RecordReader读取数据、执行用户自定义的Map函数、收集结果并通过Partitioner进行分区。结果写入内存,达到阈值后溢写到磁盘,支持Combiner优化中间结果。
ReduceTask大致分为Copy、Sort和Reduce三个阶段。Copy阶段通过HTTP方式获取MapTask的结果,Sort阶段对数据进行合并和排序,Reduce阶段调用用户定义的Reduce函数处理数据。
Shuffle是MapReduce框架中最关键的部分,包括Collect阶段、Spill阶段、Merge阶段、Copy阶段和Sort阶段。Shuffle机制确保Map阶段的数据能够正确传递给Reduce阶段,提高整体处理效率。
通过以上内容,希望能帮助大家更好地理解和掌握大数据处理的基础知识和技术。希望这些信息对你有所帮助。