在这里插入图片描述

  1. Hadoop的Combiner的作用

hadoop必记知识点(3)_Hadoop

Hadoop的Combiner是一个在map任务执行完之后、在数据被发送到reduce任务之前执行的函数。其主要作用是减少Map和Reduce之间的数据传输量,提高Hadoop处理大数据的效率。
具体来说,Combiner会对map任务输出的key-value对进行局部汇总。例如,如果我们进行一个求平均值的mapreduce任务,map任务输出的可能是一个(key,[value1, value2, …])的形式,其中key是某个特征,value是该特征在所有输入文件中出现的次数。而Combiner会对这些value进行求和,得到一个(key,sum(value))的输出。这样,当这些数据被发送到reduce任务时,reduce任务就不需要再对这些value进行求和,而可以直接对这些value进行平均,大大减少了数据传输和处理的量。
需要注意的是,Combiner的输出和Reduce的输出类型应该是一样的,而且Combiner的函数应该是可合并的,即多个Combiner的输出可以被合并成一个单一的输出。这是因为Combiner是在map任务上并行执行的,而reduce任务可能需要合并多个map任务的输出。计算逻辑上,Combine操作后不会影响计算结果,像求和,最大值就不会影响,求平均值就影响了。
12. Hadoop序列化和反序列化
Hadoop 框架提供了一种默认的序列化方式,称为序列化。Hadoop 序列化是用于在分布式系统中存储和传输数据的一种方式,它可以有效地存储和传输大量数据。

Hadoop 的序列化机制包括两个步骤:序列化和反序列化。

序列化:序列化是将对象转换为字节序列的过程,以便在网络上传输或写入到磁盘进行永久存储的过程。Hadoop使用了一种称为Writable的接口来实现序列化。实现Writable接口的对象可以被Hadoop MapReduce框架进行序列化。

反序列化:反序列化是字节序列转回为对象的过程。当从磁盘读取数据或者从网络接收数据时,Hadoop会将接收到的字节序列反序列化为对象。

  1. Hadoop的运行模式,适用场景

Hadoop有三种运行模式,分别是独立模式(本地模式)、伪分布式模式和完全分布式模式。

独立模式(本地模式):这种模式下,Hadoop的所有组件都在同一台机器上运行,无需额外的配置,主要用于单机上的快速测试和调试。

伪分布式模式:这种模式下,Hadoop的所有组件在同一台机器上运行,但是各个组件会在不同的进程中运行,更接近于真正的分布式环境。主要用于开发者在本机上进行开发和测试。

完全分布式模式:这是Hadoop的正式运行模式,所有的Hadoop组件在不同的节点上运行,每个节点都是集群中的一员,能够处理一些大型数据。主要用于生产环境。

  1. Hadoop RPC原理

hadoop必记知识点(3)_Hadoop_02

Hadoop的RPC(Remote Procedure Call)是Hadoop中非常重要的一个部分,主要用于Hadoop各个组件之间的通信。下面是Hadoop RPC涉及的一些源码的详细说明:

客户端调用接口:在客户端的Hadoop RPC客户端代码中,通常会有一段代码调用服务端的某个方法。这段代码通常会使用Hadoop的RPC客户端来发起一个RPC请求,并将请求发送到服务端。

请求序列化:在客户端发起RPC请求时,请求中的参数需要被序列化。Hadoop使用了一个叫做ProtocolBuffer的工具来进行序列化。在Hadoop的源码中,序列化的过程通常会涉及到ProtocolBuffer的一些方法,例如Message.newBuilder()、Message.build()等。

请求发送:在请求序列化完成后,Hadoop的RPC客户端会将请求发送到服务端。这个过程通常会涉及到Hadoop的RPC客户端的几个方法,例如call()、getProxy()等。

服务端接收请求:在服务端,Hadoop的RPC服务端代码会接收到客户端的请求。这个过程通常会涉及到Hadoop的RPC服务端的几个方法,例如serve()、run()等。

请求反序列化:在服务端接收到请求后,需要对请求进行反序列化。这个过程通常会涉及到ProtocolBuffer的一些方法,例如Message.parseFrom()等。

方法调用:在请求反序列化完成后,服务端的Hadoop RPC服务端代码会调用请求中指定的方法,并使用反序列化后的参数作为方法的参数。这个过程通常会涉及到Java反射的一些API,例如Method.invoke()等。

响应返回:在方法调用完成后,服务端的Hadoop RPC服务端代码会生成一个响应,并将其返回给客户端。这个过程通常会涉及到Hadoop的RPC服务端的几个方法,例如reply()、getProxy()等。

响应反序列化:在客户端接收到响应后,需要对响应进行反序列化。这个过程通常会涉及到ProtocolBuffer的一些方法,例如Message.parseFrom()等。

结果处理:在响应反序列化完成后,客户端的Hadoop RPC客户端代码会对响应中包含的结果进行处理。这个过程通常会涉及到Java的一些基本的数据类型和I/O操作

15.Hadoop设计思想

Hadoop的设计思想主要包括以下几点:

分布式处理:Hadoop采用分布式架构,将计算任务分解到各个节点上并行处理,充分利用集群的计算能力。

数据本地性:Hadoop的计算节点和存储节点在同一台机器上,减少了数据传输的开销,提高了处理速度。

容错性:Hadoop能够自动处理节点的故障,保证计算任务的正常进行。

水平扩展:Hadoop可以通过增加节点数来提升系统的处理能力,支持大规模数据的处理。

简单性:Hadoop使用简单的编程模型,只需要编写一次程序,就可以在本地运行,也可以在分布式环境下运行。

可扩展性:Hadoop的设计允许系统进行水平扩展,只需增加更多的服务器,就可以处理更多的数据。

高性价比:Hadoop使用普通的硬件设备,降低了成本,而且其开源特性也减少了软件成本。