hadoop中WritableComparator和WritableComparable的区别是什么

2020-08-11 11:02发布

3条回答
水默
2楼 · 2020-08-11 20:34

WritableComparable排序(接口):

1.WritableComparable是Hadoop的排序方式之一,而排序是MapReduce框架中最重要的操作之一,它就是用来给数据排序的(按照Key排好),常发生在MapTask与ReduceTask的传输过程中(就是数据从map方法写到reduce方法之间)

任何应用程序中的数据均会被排序,不管逻辑上是否需要,都排序

Map Task和Reduce Task均会对数据(按照key)进行排序,此操作属于Hadoop的默认行为

默认排序是按照字典顺序排序,且实现该排序的方法是快速排序,例如环形缓冲区中将数据写入分区后会进行区内的局部排序,使用的就是快排

2.实现接口后通常重写 compareTo() ,write(),readFields()方法来实现自定义排序和序列化

查看WritableComparable,原来它同时实现了Writable和java中的Comparable这两个接口

3.对于Map Task,它会将处理的结果暂时放到一个缓冲区中,当缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次排序(部分排序-,每个分区内部进行,方式为快速排序),并将这些有序数据写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行一次合并,以将这些文件合并成一个大的有序文件(全排序,方式为归并)

Mapreduce框架在记录到达reducer之前按键对记录排序(GroupingComparator分组),但键所对应的值并没有被排序。甚至在不同的执行轮次中,这些值的排序也不固定,因为它们来自不同的map任务且这些map任务在不同轮次中完成时间各不相同。一般来说,大多数MapReduce程序会避免让reduce函数依赖于值的排序。但是,有时也需要通过特定的方法对键进行排序和分组等以实现对值的排序。

对于Reduce Task,它从每个Map Task上远程拷贝相应的数据文件,如果文件大小超过一定值,则放到磁盘上(这个过程就是环形缓冲区的溢写功能),否则放到内存中。如果磁盘上文件数目达到一定值,则进行一次合并以生成一个更大文件;如果内存中文件大小或者数目超过一定值,则进行一次合并后将数据写到磁盘上。当所有数据拷贝完毕后,Reduce Task统一对内存和磁盘上的所有数据进行一次合并。

WritableComparator排序(类):

它是用来给Key分组的

它在ReduceTask中进行,默认的类型是GroupingComparator也可以自定义

WritableComparator为辅助排序手段提供基础(继承它),用来应对不同的业务需求

比如GroupingComparator会在ReduceTask将文件写入磁盘并排序后按照Key进行分组,判断下一个key是否相同,将同组的Key传给reduce()执行


我的网名不再改
3楼 · 2020-08-12 13:36

Hadoop中Writable,WritableComparable,WritableComparator之间有什么区别?

先大致了解一下"

一、Writable(接口):

    其实Java用的是一套重量级的序列化框架(Serializable),一个类实现了序列化之后此类对象会附带各类校验啊、继承体啊、header等额外信息,更多的信息使得此种序列化机制不便于在网络中高效传输,对于本就是用来传输大数据的hadoop框架更不合适 。所以Hadoop使用自己的序列化机制,就是Writable,它不像Serializable这么复杂,Writable大致特点如下:

     1.紧凑:紧凑的格式能让我们充分利用网络带宽,而带宽是数据中心最稀缺的资源

     2.快速:进程通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是基本的

     3.可扩展:协议为了满足新的需求变化,所以控制客户端和服务器过程中,需要直接引进相应的协议,这些是新协议,原序列化方式能支持新的协议报文

     4.交互操作: 能支持不同语言写的客户端和服务端进行交互

     简单来说,加入我自定义了一个bean类,加入涉及到此对象在mapper、reducer等这种数据传输,都要实现Writable接口

二、WritableComparable排序(接口):

首先,

    WritableComparable是Hadoop的排序方式之一,而排序是MapReduce框架中最重要的操作之一,它就是用来给数据排序的(按照Key排好),常发生在MapTask与ReduceTask的传输过程中(就是数据从map方法写到reduce方法之间)

    任何应用程序中的数据均会被排序,不管逻辑上是否需要,都排序

    Map Task和Reduce Task均会对数据(按照key)进行排序,此操作属于Hadoop的默认行为

    默认排序是按照字典顺序排序,且实现该排序的方法是快速排序,例如环形缓冲区中将数据写入分区后会进行区内的局部排序,使用的就是快排

 

其次,

    实现接口后通常重写 compareTo() ,write(),readFields()方法来实现自定义排序和序列化

    查看WritableComparable,原来它同时实现了Writable和java中的Comparable这两个接口

 

此外,

    对于Map Task,它会将处理的结果暂时放到一个缓冲区中,当缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次排序(部分排序-,每个分区内部进行,方式为快速排序),并将这些有序数据写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行一次合并,以将这些文件合并成一个大的有序文件(全排序,方式为归并)

    Mapreduce框架在记录到达reducer之前按键对记录排序(GroupingComparator分组),但键所对应的值并没有被排序。甚至在不同的执行轮次中,这些值的排序也不固定,因为它们来自不同的map任务且这些map任务在不同轮次中完成时间各不相同。一般来说,大多数MapReduce程序会避免让reduce函数依赖于值的排序。但是,有时也需要通过特定的方法对键进行排序和分组等以实现对值的排序。

    对于Reduce Task,它从每个Map Task上远程拷贝相应的数据文件,如果文件大小超过一定值,则放到磁盘上(这个过程就是环形缓冲区的溢写功能),否则放到内存中。如果磁盘上文件数目达到一定值,则进行一次合并以生成一个更大文件;如果内存中文件大小或者数目超过一定值,则进行一次合并后将数据写到磁盘上。当所有数据拷贝完毕后,Reduce Task统一对内存和磁盘上的所有数据进行一次合并。

 

二、WritableComparator排序(类):

    它是用来给Key分组的

    它在ReduceTask中进行,默认的类型是GroupingComparator也可以自定义

    WritableComparator为辅助排序手段提供基础(继承它),用来应对不同的业务需求

    比如GroupingComparator会在ReduceTask将文件写入磁盘并排序后按照Key进行分组,判断下一个key是否相同,将同组的Key传给reduce()执行


乐xenia
4楼 · 2020-08-12 17:20

一、Writable(接口):

    其实Java用的是一套重量级的序列化框架(Serializable),一个类实现了序列化之后此类对象会附带各类校验啊、继承体啊、header等额外信息,更多的信息使得此种序列化机制不便于在网络中高效传输,对于本就是用来传输大数据的hadoop框架更不合适 。所以Hadoop使用自己的序列化机制,就是Writable,它不像Serializable这么复杂,Writable大致特点如下:

     1.紧凑:紧凑的格式能让我们充分利用网络带宽,而带宽是数据中心最稀缺的资源

     2.快速:进程通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是基本的

     3.可扩展:协议为了满足新的需求变化,所以控制客户端和服务器过程中,需要直接引进相应的协议,这些是新协议,原序列化方式能支持新的协议报文

     4.交互操作: 能支持不同语言写的客户端和服务端进行交互

     简单来说,加入我自定义了一个bean类,加入涉及到此对象在mapper、reducer等这种数据传输,都要实现Writable接口

二、WritableComparable排序(接口):

首先,

    WritableComparable是Hadoop的排序方式之一,而排序是MapReduce框架中最重要的操作之一,它就是用来给数据排序的(按照Key排好),常发生在MapTask与ReduceTask的传输过程中(就是数据从map方法写到reduce方法之间)

    任何应用程序中的数据均会被排序,不管逻辑上是否需要,都排序

    Map Task和Reduce Task均会对数据(按照key)进行排序,此操作属于Hadoop的默认行为

    默认排序是按照字典顺序排序,且实现该排序的方法是快速排序,例如环形缓冲区中将数据写入分区后会进行区内的局部排序,使用的就是快排

 

其次,

    实现接口后通常重写 compareTo() ,write(),readFields()方法来实现自定义排序和序列化

    查看WritableComparable,原来它同时实现了Writable和java中的Comparable这两个接口

 

此外,

    对于Map Task,它会将处理的结果暂时放到一个缓冲区中,当缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次排序(部分排序-,每个分区内部进行,方式为快速排序),并将这些有序数据写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行一次合并,以将这些文件合并成一个大的有序文件(全排序,方式为归并)

    Mapreduce框架在记录到达reducer之前按键对记录排序(GroupingComparator分组),但键所对应的值并没有被排序。甚至在不同的执行轮次中,这些值的排序也不固定,因为它们来自不同的map任务且这些map任务在不同轮次中完成时间各不相同。一般来说,大多数MapReduce程序会避免让reduce函数依赖于值的排序。但是,有时也需要通过特定的方法对键进行排序和分组等以实现对值的排序。

    对于Reduce Task,它从每个Map Task上远程拷贝相应的数据文件,如果文件大小超过一定值,则放到磁盘上(这个过程就是环形缓冲区的溢写功能),否则放到内存中。如果磁盘上文件数目达到一定值,则进行一次合并以生成一个更大文件;如果内存中文件大小或者数目超过一定值,则进行一次合并后将数据写到磁盘上。当所有数据拷贝完毕后,Reduce Task统一对内存和磁盘上的所有数据进行一次合并。

 

二、WritableComparator排序(类):

    它是用来给Key分组的

    它在ReduceTask中进行,默认的类型是GroupingComparator也可以自定义

    WritableComparator为辅助排序手段提供基础(继承它),用来应对不同的业务需求

    比如GroupingComparator会在ReduceTask将文件写入磁盘并排序后按照Key进行分组,判断下一个key是否相同,将同组的Key传给reduce()执行


相关问题推荐

  • 回答 10

    创建test文件夹hadoop fs -mkdir /test

  • 回答 7

    Hadoop的三大核心组件分别是:1、HDFS(Hadoop Distribute File System):hadoop的数据存储工具。2、YARN(Yet Another Resource Negotiator,另一种资源协调者):Hadoop 的资源管理器。3、Hadoop MapReduce:分布式计算框架。HDFS是一个高度容错性的系统,适合部...

  • 回答 18

    hbase依靠HDFS来存储底层数据。Hadoop分布式文件系统(HDFS)为HBase提供了高可靠性的底层存储支持,HBase中的所有数据文件都存储在Hadoop HDFS文件系统上。

  • 回答 24

    HBase分布式数据库具有如下的显著特点:容量大:HBase分布式数据库中的表可以存储成千上万的行和列组成的数据。面向列:HBase是面向列的存储和权限控制,并支持独立检索。列存储,其数据在表中是按照某列存储的,根据数据动态的增加列,并且可以单独对列进行...

  • 回答 19

    解决问题的层面不一样首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务...

  • 回答 14

    1、HBase写快读慢,HBase的读取时长通常是几毫秒,而Redis的读取时长通常是几十微秒。性能相差非常大。2、HBase和Redis都支持KV类型。但是Redis支持List、Set等更丰富的类型。3、Redis支持的数据量通常受内存限制,而HBase没有这个限制,可以存储远超内存大小...

  • 回答 15

    列式存储格式是指以列为单位存储数据的数据存储格式,相比于传统的行式存储格式,它具有压缩比高、读I/O少(此处指可避免无意义的读I/O)等优点,目前被广泛应用于各种存储引擎中。对于HBase而言,它并不是一个列式存储引擎,而是列簇式存储引擎,即同一列簇中...

  • 回答 14

    一、简单理解Hadoop是一个大象:一个hadoop集群主要包含三个主要的模块:Mapreduce,hdfs,yarn。mapreduce是一个分离在合并的计算框架,注意他不是一个集群,而是一个编程框架。hdfs是一个分布式文件系统,是一个分布式集群,用于存放数据。yarn集群是负责集群...

  • 回答 12

    01 网络公开数据集02 数据报采集03 网络爬虫04 日志收集05 社会调查06 业务数据集07 埋点采集08 传感器采集09 数据交易平台10 个人数据收集

  • 回答 9

    1 Hadoop 各个目录的解释bin:Hadoop管理脚本和使用脚本所在目录, sbin目录下的脚本都是使用此目录下的脚本实现的。etc:Hadoop的所有配置文件所在的目录,所有hadoop的配置在etc/hadoop目录下include:对外提供的库的头文件lib :对外提供的动态编程库和静态...

  • 回答 4

    HDFS存储机制,包括HDFS的写入过程和读取过程两个部分: 1、写入过程:  1)客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。2)namenode返回是否可以上传。3)客户端请求第一个 block上传到哪几个datanode服务器上。4)nam...

  • Shuffle 发生在哪里?2021-04-28 20:11
    回答 4

    adoop核心:MapReduce原理。 MR的核心是shuffle,被称为奇迹发生的地方。 shuffle,弄乱,洗牌的意思。partition 分区,sort 排序,spill溢出,disk 磁盘下面是官方对shuffle的配图: phase 阶段,fetch 最终,merge 合并...

  • 回答 2

    Shuffle阶段分为两部分:Map端和Reduce端。一 map端shuffle过程;1-内存预排序:默认每个map有100M内存进行预排序(为了效率),超过阈值,会把内容写到磁盘;    此过程使用快速排序算法;2-根据key和reducer的数量进行分区和排序;首先根据数据所属的Parti...

  • 回答 3

    大数据时代需要1存储大量数据2快速的处理大量数据3从大量数据中进行分析 

  • Hadoop有哪几种模式?2021-04-27 20:20
    回答 3

    hadoop的四种模式。1、本地模式:本地模式就是解压源码包,不需要做任何的配置。通常用于开发调试,或者感受hadoop。2、伪分布模式:在学习当中一般都是使用这种模式,伪分布模式就是在一台机器的多个进程运行多个模块。虽然每一个模块都有相应的进程,但是却...

  • 回答 1

    进入和退出安全模式 [root@localhost bin]# ./hdfs dfsadmin -safemode enter15/08/03 07:26:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where ......

没有解决我的问题,去提问