MapReduce计数器和毗连
当前位置:以往代写 > 其他教程 >MapReduce计数器和毗连
2019-06-14

MapReduce计数器和毗连

MapReduce计数器和毗连



在MapReduce的计数器是用于收集关于 MapReduce 事情的统计信息的机制。这个信息在MapReduce的功课处理惩罚的问题的诊断是很有用的。 计数器雷同于将在 map 或 reduce 在代码日志信息中。

凡是环境下,这些计数器在一个措施(map 或 reduce)中界说,当一个特定事件或条件(特定于该计数器)产生执行期间递增。计数器是一个很好的应用来从输入数据集跟踪有效和无效的记录。

有两种范例的计数器:

1. Hadoop 内置计数器: 有一些内置计数器存在每个功课中。下面是内置计数器组:

  • MapReduce任务计数器 – 收集任务的详细信息(譬喻,输入记录的数量)在它的执行期间。
  • 文件系统计数器 – 收集信息像由一个任务读取或写入的字节数
  • FileInputFormat计数器 – 收集通过FileInputFormat读取的字节数的信息
  • FileOutputFormat计数器 – 收集的字节数量的信息通过 FileOutputFormat 写入
  • Job 计数器- 这些计数器利用 JobTracker。它们收集统计数据包罗如,任务提倡了功课的数量。
  • 2. 用户界说的计数器

    除了内置的计数器,用户可以界说本身的计数器,通过利用编程语言提供了雷同的成果。 譬喻,在 Java 的列举用于界说用户界说的计数器。

    一个MapClass例子利用计数器计较缺失和无效值的数量:

     

    publicstaticclassMapClass

                extendsMapReduceBase

                implementsMapper<LongWritable, Text, Text, Text>

    {

        staticenumSalesCounters { MISSING, INVALID };

        publicvoidmap ( LongWritable key, Text value,

                     OutputCollector<Text, Text> output,

                     Reporter reporter) throwsIOException

        {

            

            //Input string is split using ',' and stored in 'fields' array

            String fields[] = value.toString().split(",", -20);

            //Value at 4th index is country. It is stored in 'country' variable

            String country = fields[4];

            

            //Value at 8th index is sales data. It is stored in 'sales' variable

            String sales = fields[8];

          

            if(country.length() == 0) {

                reporter.incrCounter(SalesCounters.MISSING, 1);

            } elseif(sales.startsWith("\"")) {

                reporter.incrCounter(SalesCounters.INVALID, 1);

            } else{

                output.collect(newText(country), newText(sales + ",1"));

            }

        }

    }

    上面的代码片断显示在 Map Reduce 实现计数器的示例。

    在这里,SalesCounters是用“列举”界说的计数器。它被用来计较 MISSING 和 INVALID 的输入记录。

    在代码段中,假如 “country” 字段的长度为零那么它的值丢失,因此相应的计数器 SalesCounters.MISSING 递增。

    接下来,假如 “sales” 字段开头是标记 '' ,则记录被视为无效。这通过递增计数器 SalesCounters.INVALID 来暗示。

    MapReduce 毗连

    毗连两个大的数据集可以利用 MapReduce Join 来实现。然而,这个进程需要编写大量的代码来执行实际的毗连操纵。

    #p#分页标题#e#

    毗连两个数据集开始是通过较量每个数据集的巨细。假如因为对比其他数据集一个数据集小,那么小数据集被漫衍到集群中的每个数据节点。一旦分手,无论是 Mapper 或 Reducer 利用更小的数据集举办查找匹配的大型数据集的记录,然后团结这些记录,形成输出记录。

    这取决于在实际毗连举办的处所,这个毗连分为:

    1. 映射端毗连 – 当该联接是由映射器执行的,它称为映射端链接。在这种范例中,联络前的数据由映射函数实际来耗损的处理惩罚。它是强制性的,输入到每个映射是在分区中的形式,而且是按排序顺序。别的,必需有一个相等数目标分区,它必需由毗连键举办排序。

    2. Reduce端毗连- 当毗连是通过减速器举办的,称为reduce端毗连。没有须要在此毗连有数据会合在以布局化形式(或分区)。

    在这里,映射端的处理惩罚发出毗连这两个表的要害字和对应的元组。作为该处理惩罚的结果,所有的元组沟通毗连键都落在沟通的 reducer,然后利用沟通的毗连键毗连记录。

    整体处理惩罚流程示于下图。

    MapReduce计数器和毗邻

      关键字:

    在线提交作业