在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 大數(shù)據(jù)/ MapReduce計(jì)數(shù)器和連接
Hadoop命令參考
Hadoop教程
Hadoop介紹快速入門
Pig & Hive介紹
Hadoop MapReduce
Hadoop安裝
Hadoop環(huán)境安裝設(shè)置
Hadoop HDFS入門
理解 MapReducer
Hadoop多節(jié)點(diǎn)集群
OOZIE 五分鐘入門學(xué)習(xí)
Flume和Sqoop
Hadoop是什么?
MapReduce計(jì)數(shù)器和連接
MapReduce Hadoop程序連接數(shù)據(jù)
Hadoop Streaming
Hadoop HDFS
Hadoop程序入門實(shí)踐
MapReduce簡(jiǎn)介和入門
Hadoop大數(shù)據(jù)解決方案
Hadoop HDFS操作

MapReduce計(jì)數(shù)器和連接


在MapReduce的計(jì)數(shù)器是用于收集關(guān)于 MapReduce 工作的統(tǒng)計(jì)信息的機(jī)制。這個(gè)信息在MapReduce的作業(yè)處理的問(wèn)題的診斷是很有用的。 計(jì)數(shù)器類似于將在 map 或 reduce 在代碼日志信息中。

通常情況下,這些計(jì)數(shù)器在一個(gè)程序(map 或 reduce)中定義,當(dāng)一個(gè)特定事件或條件(特定于該計(jì)數(shù)器)發(fā)生執(zhí)行期間遞增。計(jì)數(shù)器是一個(gè)很好的應(yīng)用來(lái)從輸入數(shù)據(jù)集跟蹤有效和無(wú)效的記錄。

有兩種類型的計(jì)數(shù)器:

1. Hadoop 內(nèi)置計(jì)數(shù)器: 有一些內(nèi)置計(jì)數(shù)器存在每個(gè)作業(yè)中。下面是內(nèi)置計(jì)數(shù)器組:

  • MapReduce任務(wù)計(jì)數(shù)器 - 收集任務(wù)的具體信息(例如,輸入記錄的數(shù)量)在它的執(zhí)行期間。
  • 文件系統(tǒng)計(jì)數(shù)器 - 收集信息像由一個(gè)任務(wù)讀取或?qū)懭氲淖止?jié)數(shù)
  • FileInputFormat計(jì)數(shù)器 - 收集通過(guò)FileInputFormat讀取的字節(jié)數(shù)的信息
  • FileOutputFormat計(jì)數(shù)器 - 收集的字節(jié)數(shù)量的信息通過(guò) FileOutputFormat 寫入
  • Job 計(jì)數(shù)器- 這些計(jì)數(shù)器使用 JobTracker。它們收集統(tǒng)計(jì)數(shù)據(jù)包括如,任務(wù)發(fā)起了作業(yè)的數(shù)量。

2. 用戶定義的計(jì)數(shù)器

除了內(nèi)置的計(jì)數(shù)器,用戶可以定義自己的計(jì)數(shù)器,通過(guò)使用編程語(yǔ)言提供了類似的功能。 例如,在 Java 的枚舉用于定義用戶定義的計(jì)數(shù)器。

一個(gè)MapClass例子使用計(jì)數(shù)器計(jì)算缺失和無(wú)效值的數(shù)量:

 
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 實(shí)現(xiàn)計(jì)數(shù)器的示例。

在這里,SalesCounters是用“枚舉”定義的計(jì)數(shù)器。它被用來(lái)計(jì)算 MISSING 和 INVALID 的輸入記錄。

在代碼段中,如果 “country” 字段的長(zhǎng)度為零那么它的值丟失,因此相應(yīng)的計(jì)數(shù)器 SalesCounters.MISSING 遞增。

接下來(lái),如果 “sales” 字段開頭是符號(hào) '' ,則記錄被視為無(wú)效。這通過(guò)遞增計(jì)數(shù)器 SalesCounters.INVALID 來(lái)表示。

MapReduce 連接

連接兩個(gè)大的數(shù)據(jù)集可以使用 MapReduce Join 來(lái)實(shí)現(xiàn)。然而,這個(gè)過(guò)程需要編寫大量的代碼來(lái)執(zhí)行實(shí)際的連接操作。

連接兩個(gè)數(shù)據(jù)集開始是通過(guò)比較每個(gè)數(shù)據(jù)集的大小。如果因?yàn)橄啾绕渌麛?shù)據(jù)集一個(gè)數(shù)據(jù)集小,那么小數(shù)據(jù)集被分布到集群中的每個(gè)數(shù)據(jù)節(jié)點(diǎn)。一旦分散,無(wú)論是 Mapper 或 Reducer 使用更小的數(shù)據(jù)集進(jìn)行查找匹配的大型數(shù)據(jù)集的記錄,然后結(jié)合這些記錄,形成輸出記錄。

這取決于在實(shí)際連接進(jìn)行的地方,這個(gè)連接分為:

1. 映射端連接 - 當(dāng)該聯(lián)接是由映射器執(zhí)行的,它稱為映射端鏈接。在這種類型中,聯(lián)結(jié)前的數(shù)據(jù)由映射函數(shù)實(shí)際來(lái)消耗的處理。它是強(qiáng)制性的,輸入到每個(gè)映射是在分區(qū)中的形式,并且是按排序順序。另外,必須有一個(gè)相等數(shù)目的分區(qū),它必須由連接鍵進(jìn)行排序。

2. Reduce端連接- 當(dāng)連接是通過(guò)減速器進(jìn)行的,稱為reduce端連接。沒(méi)有必要在此連接有數(shù)據(jù)集中在以結(jié)構(gòu)化形式(或分區(qū))。

在這里,映射端的處理發(fā)出連接這兩個(gè)表的關(guān)鍵字和對(duì)應(yīng)的元組。作為該處理的效果,所有的元組相同連接鍵都落在相同的 reducer,然后使用相同的連接鍵連接記錄。

整體處理流程示于下圖。


上一篇:Hadoop HDFS操作