Part1:Hadoop、Hive、Spark关系概览
1、MapReduce on Hadoop 和spark都是数据计算框架,一般以为spark的速度比MR快2-3倍。
2、mapreduce是数据计算的过程,map将一个使命分成多个小使命,reduce的部门将结果汇总之后返回。
3、HIve中有metastore存储结构化信息,另有实行引擎将sql翻译成mapreduce,再把加工结果返回给用户。
Part2:十道Hadoop相关的题目
一、Hadoop生态系统简介:请简要形貌Hadoop的核心组件及其作用。
Hadoop是一个开源的分布式计算框架,专门用于存储和处理大规模数据集(通常从TB到PB级别)。Hadoop的核心头脑是分布式存储和分布式计算,通过将数据和计算使命分散到多个节点上,实现高性能和高容错性。
其核心组件包括HDFS、mapreduce、TARN.
(1)HDFS(Hadoop Distributed File System)
- 作用:HDFS是Hadoop的分布式文件系统,用于存储海量数据。
- 特点:
- 数据被分割成多个块(默认128MB或256MB),并分布存储在不同的节点上。
- 具有高容错性,数据会主动复制多份(默认3份)存储在不同的节点上。
- 关键角色:
- NameNode:管理文件系统的元数据(如文件目次结构、块的位置等)。
- DataNode:存储现实的数据块。
(2)MapReduce
- 作用:MapReduce是Hadoop的分布式计算框架(the same with Hadoop),用于处理大规模数据集。
- 工作原理:
- Map阶段:将输入数据分割成小块,并行处理并天生中央结果(键值对)。
- Reduce阶段:对Map阶段的中央结果举行汇总和计算,天生终极结果。
- 特点:
- 适合批处理使命,但不适合实时计算(因为mapreduce的机制)。
(3)YARN(Yet Another Resource Negotiator)
- 作用:YARN是Hadoop的资源管理系统,负责集群资源的调度和使命管理。
- 特点:
- 将资源管理和使命调度分离,支持多种计算框架(如MapReduce、Spark等)。
- 提高了集群的利用率和机动性。
二、Hadoop的工作流程
1. 数据存储:
数据被上传到HDFS,分割成多个块并分布存储在不同的DataNode,NameNode记载文件的元数据和块的位置信息。
2. 数据处理:
用户提交一个MapReduce使命:YARN负责分配资源,启动Map使命和Reduce使命,Map使命读取HDFS上的数据,天生中央结果,Reduce使命对中央结果举行汇总,天生终极结果并写回HDFS。
三、HDFS:表明HDFS的架构,说明NameNode和DataNode的作用。
HDFS是Hadoop的核心组件,存储和管理大规模数据,具有高容错性和高吞吐量的特点。其架构接纳主从模式,主要包括以下组件:
1. NameNode(主节点)
作用:
元数据管理:存储文件系统的元数据,如文件名、目次结构、文件块位置等。
协调客户端访问:处理客户端的读写请求,并协调DataNode的操作。
特点:
单点故障:NameNode是单点,故障会导致整个系统不可用。Hadoop 2.0通过备用NameNode解决这一问题。
内存存储:元数据存储在内存中,以加快访问速度。
2. DataNode(从节点)
作用:
数据存储:现实存储文件数据,文件被分割成多个块(默认128MB),并在多个DataNode上复制(默认3份)以实现容错。
数据块管理:负责数据块的创建、删除和复制,并定期向NameNode报告状态。
特点:
分布式存储:数据块分布在多个DataNode上,提供高吞吐量和容错性。
当地存储:数据块存储在当地文件系统中。
3. Secondary NameNode(辅助NameNode)
作用:
辅助NameNode:定期合并NameNode的编辑日记和镜像文件,淘汰NameNode的启动时间。
非备用NameNode:它不是NameNode的备用节点,不能直接接受NameNode的工作。
总结
NameNode:负责管理元数据和协调客户端访问,是HDFS的核心。
DataNode:负责现实数据存储和块管理,分布在多个节点上以提供高吞吐量和容错性。
Secondary NameNode:辅助NameNode举行元数据管理,但不提供故障切换功能。
四、HDFS的工作流程
1. 文件写入:
客户端向NameNode请求写入文件;NameNode分配DataNode并返回其列表;客户端将数据写入第一个DataNode,该节点再将数据复制到其他DataNode。
2. 文件读取:
客户端向NameNode请求读取文件;NameNode返回存储该文件块的DataNode列表;客户端直接从DataNode读取数据。
3. 容错与复制:
每个数据块默认复制3份,存储在不同DataNode上;如果某个DataNode失效,NameNode会检测到并将数据块复制到其他节点。
五、MapReduce:形貌其工作流程,并表明Mapper和Reducer作用。
MapReduce是一种用于大规模数据处理的编程模子,由Google提出,主要用于分布式计算。它将使命分解为两个主要阶段:Map和Reduce。
工作流程
1. 输入分片(Input Splitting):
输入数据被划分为多个分片(splits),每个分片由一个Mapper处理。
2. Map阶段:
每个Mapper处理一个输入分片,天生键值对(key-value pairs)作为中央结果。
3. Shuffle和Sort:
系统将Mapper输出的中央结果按键分组并排序,确保类似键的值被送到同一个Reducer。
4. Reduce阶段:
Reducer吸收分组后的中央结果,举行汇总处理,天生终极输出。
5. 输出:
Reducer的输出写入存储系统,如HDFS。
Mapper的作用:
数据处理:Mapper读取输入分片,逐条处理并天生键值对。
并行处理:多个Mapper可以同时处理不同分片,提升服从。
中央结果天生:Mapper的输出是中央结果,供Reducer进一步处理。
Reducer的作用
数据汇总:Reducer对Mapper输出的中央结果举行汇总。
聚合计算:Reducer实行如求和、计数等聚合操作。
天生终极结果:Reducer的输出是终极结果,通常存储在分布式文件系统中。
示例:假设统计文本中单词的出现次数
1. Map阶段:每个Mapper读取一部门文本,天生形如`(word, 1)`的键值对。
2. Shuffle和Sort:系统将类似单词的键值对分组,如`("hello", [1, 1, 1])`。
3. Reduce阶段:Reducer对每个单词的计数求和,天生`("hello", 3)`。
4. 输出:终极结果写入文件,如`hello 3`。
总结
Mapper:负责数据的分片处理和中央结果的天生。
Reducer:负责中央结果的汇总和终极结果的天生。
六、MapReduce中,数据是怎样举行分区和排序的?表明Partitioner和Combiner的作用。
在MapReduce中,数据的分区和排序的步骤主要由Partitioner和Combiner来完成。
数据分区(Partitioning)
Partitioner的作用
数据分配:Partitioner负责将Mapper输出的键值对分配到不同的Reducer。它通过哈希函数对键举行计算,决定数据应发送到哪个Reducer。
负载均衡:公道的分区策略可以确保各Reducer的负载均衡,制止某些Reducer过载。
分区过程:
1. Mapper输出:Mapper天生键值对后,Partitioner根据键的哈希值决定其所属分区。
2.分区数量:分区数量通常等于Reducer的数量。
3. 数据发送:每个分区的数据被发送到对应的Reducer。
默认Partitioner
HashPartitioner:MapReduce默认使用哈希分区器,通过`hash(key) % numReduceTasks`计算分区。
数据排序(Sorting)
排序过程
1. Mapper端排序:Mapper输出的键值对在发送到Reducer之前,会在当地举行排序。
2. Reducer端排序:Reducer在吸收到所有Mapper的数据后,会再次举行全局排序,确保类似键的值按顺序处理。
排序机制
按键排序:MapReduce框架默认按键举行排序,确保Reducer处理时键是有序的。
自界说排序:可以通过实现`WritableComparable`接口自界说排序逻辑。
示例:假设统计文本中单词的出现次数:
1. Map阶段:
Mapper天生键值对,如`("hello", 1)`。
2. Combiner阶段:
Combiner对Mapper的输出举行局部聚合,如将`("hello", [1, 1, 1])`合并为`("hello", 3)`。
3. Partitioner阶段:
Partitioner根据键的哈希值决定数据发送到哪个Reducer。
4. Sort阶段:
数据在发送到Reducer之前举行排序,确保类似键的值按顺序处理。
5. Reduce阶段:
Reducer对吸收到的数据举行终极聚合,天生`("hello", 3)`。
总结:
Partitioner:负责将Mapper输出的键值对分配到不同的Reducer,确保负载均衡。
Combiner:在Mapper端举行局部聚合,淘汰数据传输量,优化性能。
七、YARN在Hadoop中的作用,及其与MapReduce的关系
YARN是Hadoop 2.0引入的核心组件,用于资源管理和作业调度。它的主要作用是解耦资源管理和数据处理逻辑,使得MapReduce只需专注于数据处理,同时支持其他计算框架。
YARN的架构
YARN主要由以下几个组件组成:
1. ResourceManager (RM):全局资源管理+启动ApplicationMaster。
2. NodeManager (NM):节点资源管理+向ResourceManager报告资源使用情况和使命状态。
3. ApplicationMaster (AM):
- 作业管理:每个应用步伐都有一个ApplicationMaster,负责与ResourceManager协商资源,与NodeManager协作实行使命。
- 使命调度:ApplicationMaster负责将使命调度到合适的容器中实行。
4. Container:理解为资源的封装,使命在Container中实行,由NodeManager监控。
YARN与MapReduce的关系:
1. 解耦资源管理和作业调度:
- 在Hadoop 1.0中,MapReduce既负责资源管理又负责作业调度,导致扩展性和机动性受限。
- YARN将资源管理和作业调度解耦,使得MapReduce只需专注于数据处理逻辑。
2. MapReduce作为YARN的一个应用步伐:
- 在YARN架构下,MapReduce作为一个应用步伐运行,由ApplicationMaster负责作业的管理和使命调度。
- MapReduce的ResourceManager和JobTracker功能被YARN的ResourceManager和ApplicationMaster取代。
3. 支持多计算框架:
YARN不但支持MapReduce,还支持其他计算框架如Spark、Flink等,使得Hadoop成为一个通用的数据处理平台。
示例:一个MapReduce作业
用户提交MapReduce作业到YARN的ResourceManager,ResourceManager为该作业分配资源,并启动一个ApplicationMaster,ApplicationMaster与ResourceManager协商资源,将Map和Reduce使命调度到各个NodeManager的Container中实行,NodeManager监控使命的实行情况,并向ApplicationMaster报告状,ApplicationMaster在作业完成后,向ResourceManager注销并释放资源。
八、Hadoop MapReduce和Apache Spark都是大数据处理框架,请简要说明它们的主要区别。
1. 数据处理模子
Hadoop MapReduce:批处理,适合静态数据;数据处理分为Map和Reduce两个阶段,中央结果需要写入磁盘。
Apache Spark:支持批处理、流处理、交互式查询和呆板学习等多种数据处理模式;利用内存举行计算,淘汰磁盘I/O,显著提高性能。
2. 性能
Hadoop MapReduce:磁盘I/O性能相对较低,适合高延迟的批处理作业。
Apache Spark:内存计算+低延迟。
3. 易用性
Hadoop MapReduce:编程模子相对复杂+API限制(API较为底层,开发服从较低)
Apache Spark:高级API(Spark提供了丰富的高级API(如Scala、Java、Python、R),易于使用。)+开发服从高。
4. 生态系统
Hadoop MapReduce:MapReduce是Hadoop生态系统的一部门,依赖HDFS举行数据存储,
Hadoop生态系统成熟稳固,适合大规模批处理。
Apache Spark: Spark有本身的生态系统(独立),支持多种数据源(如HDFS、S3、Cassandra)。+丰富库:Spark提供了丰富的库(如Spark SQL、Spark Streaming、MLlib、GraphX),支持多种数据处理需求。
总结:
Hadoop MapReduce:适合大规模批处理和高容错性需求的场景,但性能较低,编程复杂。
Apache Spark:适合实时数据处理、迭代计算和多种数据处理模式,性能高,易于使用。
九、在配置Hadoop集群时的关键配置参数
1. dfs.replication:
◦ 作用:指定HDFS中每个数据块的副本数量。
◦ 表明:默认值为3,表示每个数据块会在集群中存储3个副本。增加副本数可以提高数据的可靠性和容错性,但也会增加存储开销。
2.mapreduce.tasktracker.map.tasks.maximum和 mapreduce.tasktracker.reduce.tasks.maximum:
◦ 作用:分别指定每个NodeManager上可以同时运行的Map使命和Reduce使命的最大数量。
◦ 表明:这些参数影响集群的并发处理本领。公道设置这些参数可以优化资源利用率和作业实行服从。
3. yarn.scheduler.maximum-allocation-mb:
◦ 作用:指定YARN可以为每个容器分配的最大内存量。
◦ 表明:这个参数决定了单个使命可以使用的最大内存资源。公道设置可以防止单个使命占用过多资源,影响其他使命的实行。
十、数据当地性优化:在Hadoop中,数据当地性(Data Locality)是什么?为什么它对性能优化至关告急?
**数据当地性(Data Locality)**是指计算使命在数据所在的节点上实行,尽量淘汰数据的网络传输。
• 告急性:
◦ 淘汰网络开销:数据当地性可以淘汰数据在网络中的传输,降低网络带宽的斲丧。
◦ 提高性能:当地数据处理速度远快于通过网络传输数据后再处理,显著提高作业的实行服从。
◦ 负载均衡:数据当地性有助于均衡集群中各节点的负载,制止某些节点过载。
十一、Hadoop故障处理:在Hadoop集群中,如果某个DataNode宕机,系统会怎样处理?NameNode在这个过程中扮演了什么角色?
1. 检测故障:
◦ NameNode通过心跳机制检测到DataNode宕机。
2. 副本复制:
◦ NameNode会查抄宕机DataNode上存储的数据块,发现副本数量不足时,会启动副本复制过程,将数据块复制到其他健康的DataNode上。
3. 更新元数据:
◦ NameNode更新元数据信息,记载新的数据块副本位置。
NameNode的角色:
• 元数据管理:NameNode负责管理文件系统的元数据,包括文件到数据块的映射和数据块的位置信息。
• 故障检测与恢复:NameNode通过心跳机制检测DataNode的状态,并在DataNode宕机时协调数据块的复制和恢复。
十二、Hadoop应用场景
应用场景:日记分析
• 场景形貌:大型互联网公司天天天生大量的日记数据,需要对这些日记举行分析,以提取用户活动、系统性能等信息。(大规模数据处理+成本效益+高容错性+批处理)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |