国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
精通HADOOP(五) - 初識(shí)Hadoop - 執(zhí)行和測(cè)試Hadoop樣例程序
2012-07-24 12:32:34
精通HADOOP(五) - 初識(shí)Hadoop - 執(zhí)行和測(cè)試Hadoop樣例程序
瀏覽(354)|評(píng)論(0) 交流分類:Java|筆記分類: 精通hadoop


1.1 執(zhí)行和測(cè)試Hadoop樣例程序

在Hadoop安裝目錄中你會(huì)找到包含Hadoop樣例程序的JAR文件,你可以用它來(lái)試用Hadoop。在你執(zhí)行這些樣例程序以前,你應(yīng)該保證你的安裝是完全的和你的執(zhí)行時(shí)環(huán)境的設(shè)置是正確的。我們?cè)谇懊嫘」?jié)中提到,check_basic_env.sh腳本能夠幫助你校驗(yàn)安裝,如果安裝有任何錯(cuò)誤,它會(huì)提示你改正。

1.1.1 Hadoop的樣例代碼

hadoop-0.19.0-examples.jar文件包含著數(shù)個(gè)可以直接運(yùn)行的樣例程序。我們?cè)趫D標(biāo)1-4中列出包含在這個(gè)JAR文件的樣例程序。

圖表 1?4 hadoop-0.19.0-examples.jar文件中的樣例程序

程序

描述

aggregatewordcount

計(jì)算輸入文件中文字個(gè)數(shù)的基于聚合的MapReduce程序。

aggregatewordhist

生成輸入文件中文字個(gè)數(shù)的統(tǒng)計(jì)圖的基于聚合的MapReduce程序。

grep

計(jì)算輸入文件中匹配正則表達(dá)式的文字個(gè)數(shù)的MapReduce程序。

join

合并排序的平均分割的數(shù)據(jù)集的作業(yè)。

multifilewc

計(jì)算幾個(gè)文件的文字個(gè)數(shù)的作業(yè)。

pentomino

解決五格拼版問(wèn)題的分塊分層的MapReduce程序。

pi

使用蒙地卡羅法計(jì)算PI的MapReduce程序。

randomtextwriter

在一個(gè)節(jié)點(diǎn)上寫(xiě)10G隨機(jī)文本的MapReduce程序。

randomwriter

在每個(gè)節(jié)點(diǎn)上寫(xiě)10G隨機(jī)數(shù)據(jù)的MapReduce程序。

sleep

在每個(gè)Map和Reduce作業(yè)中休憩的程序。

sort

排序隨機(jī)寫(xiě)入器生成的數(shù)據(jù)的MapReduce程序。

sudoku

一個(gè)九宮格游戲的解決方案。

wordcount

在輸入文件中統(tǒng)計(jì)文字個(gè)數(shù)的統(tǒng)計(jì)器。

1.1.1.1 執(zhí)行PI計(jì)算器

PI計(jì)算器樣例程序通過(guò)蒙地卡羅法計(jì)算PI值。網(wǎng)址http://www.chem.unl.edu/zeng/joy/mclab/mcintro.html提供了關(guān)于這個(gè)算法的技術(shù)討論。抽樣數(shù)量是正方形內(nèi)隨機(jī)集合的點(diǎn)數(shù)。抽樣數(shù)越多,PI值的計(jì)算就越精確。為了程序的簡(jiǎn)單性,我們只用很少的操作粗略的計(jì)算出PI的值。

PI程序使用了兩個(gè)整形參數(shù)。Map作業(yè)數(shù)量和每個(gè)Map作業(yè)中的抽樣數(shù)量。計(jì)算中的總共的抽樣數(shù)量是Map作業(yè)的數(shù)量乘以每個(gè)Map作業(yè)中的抽樣數(shù)量。

Map作業(yè)在1乘1的矩形面積內(nèi)產(chǎn)生隨機(jī)的點(diǎn)。對(duì)于其中的每個(gè)抽樣如果滿足X2+Y2 <=1, 那么這個(gè)點(diǎn)就在圓的里面。否則,這個(gè)點(diǎn)就在圓的外面。Map作業(yè)輸出鍵值為1或者0,1代表在直徑為1的圓內(nèi),0代表在直徑為1的圓外,映射的數(shù)據(jù)值均為1,Reduce任務(wù)計(jì)算圓內(nèi)點(diǎn)的數(shù)量和圓外點(diǎn)的數(shù)量。這兩個(gè)數(shù)量的比例就是極限值PI.

在這個(gè)樣例程序中,為了使程序執(zhí)行得更快和有更少的輸出,你會(huì)選擇2個(gè)Map作業(yè),每個(gè)作業(yè)有10個(gè)抽樣,一共有20個(gè)抽樣。

如果你想執(zhí)行這個(gè)程序,你需要改變你的工作目錄去HADOOP_HOME(通過(guò) cd ${HADOOP_HOME}),然后,鍵入命令如下:

jason@cloud9:~/src/hadoop-0.19.0$ hadoop jar hadoop-0.19.0-examples.jar pi 2 10

bin/hadoop jar命令提交作業(yè)到集群中。它通過(guò)三個(gè)步驟處理命令行參數(shù),每一個(gè)步驟處理命令行參數(shù)中的一部分。我們會(huì)在第5章會(huì)看到處理參數(shù)的細(xì)節(jié)。但是現(xiàn)在,我們只需要知道hadoop_0.19.0-examples.jar文件包含此應(yīng)用程序的主類,而且這個(gè)類接受3個(gè)參數(shù)。

1.1.1.2 查看輸出:輸入分割,混淆,溢出和排序

列表1-3就是此應(yīng)用程序的輸出。

列表 1-3 樣例PI程序的輸出

Number of Maps = 2 Samples per Map = 10

Wrote input for Map #0

Wrote input for Map #1

Starting Job

jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=

mapred.FileInputFormat: Total input paths to process : 2

mapred.FileInputFormat: Total input paths to process : 2

mapred.JobClient: Running job: job_local_0001

mapred.FileInputFormat: Total input paths to process : 2

mapred.FileInputFormat: Total input paths to process : 2

mapred.MapTask: numReduceTasks: 1

mapred.MapTask: io.sort.mb = 100

mapred.MapTask: data buffer = 79691776/99614720

mapred.MapTask: record buffer = 262144/327680

mapred.JobClient: map 0% reduce 0%

mapred.MapTask: Starting flush of map output

mapred.MapTask: bufstart = 0; bufend = 32; bufvoid = 99614720

mapred.MapTask: kvstart = 0; kvend = 2; length = 327680

mapred.LocalJobRunner: Generated 1 samples

mapred.MapTask: Index: (0, 38, 38)

mapred.MapTask: Finished spill 0

mapred.LocalJobRunner: Generated 1 samples.

mapred.TaskRunner: Task 'attempt_local_0001_m_000000_0' done.

mapred.TaskRunner: Saved output of task 'attempt_local_0001_m_000000_0' ?

to file:/home/jason/src/hadoop-0.19.0/test-mini-mr/outmapred.

MapTask: numReduceTasks: 1

mapred.MapTask: io.sort.mb = 100

mapred.JobClient: map 0% reduce 0%

mapred.LocalJobRunner: Generated 1 samples

mapred.MapTask: data buffer = 79691776/99614720

mapred.MapTask: record buffer = 262144/327680

mapred.MapTask: Starting flush of map output

mapred.MapTask: bufstart = 0; bufend = 32; bufvoid = 99614720

mapred.MapTask: kvstart = 0; kvend = 2; length = 327680

mapred.JobClient: map 100% reduce 0%

mapred.MapTask: Index: (0, 38, 38)

mapred.MapTask: Finished spill 0

mapred.LocalJobRunner: Generated 1 samples.

mapred.TaskRunner: Task 'attempt_local_0001_m_000001_0' done.

mapred.TaskRunner: Saved output of task 'attempt_local_0001_m_000001_0' ?

to file:/home/jason/src/hadoop-0.19.0/test-mini-mr/out

mapred.ReduceTask: Initiating final on-disk merge with 2 files

mapred.Merger: Merging 2 sorted segments

mapred.Merger: Down to the last merge-pass, with 2 segments left of ?

total size: 76 bytes

mapred.LocalJobRunner: reduce > reduce

mapred.TaskRunner: Task 'attempt_local_0001_r_000000_0' done.

mapred.TaskRunner: Saved output of task 'attempt_local_0001_r_000000_0' ?

to file:/home/jason/src/hadoop-0.19.0/test-mini-mr/out

mapred.JobClient: Job complete: job_local_0001

mapred.JobClient: Counters: 11

mapred.JobClient: File Systems

mapred.JobClient: Local bytes read=314895

mapred.JobClient: Local bytes written=359635

mapred.JobClient: Map-Reduce Framework

mapred.JobClient: Reduce input groups=2

mapred.JobClient: Combine output records=0

mapred.JobClient: Map input records=2

mapred.JobClient: Reduce output records=0

mapred.JobClient: Map output bytes=64

mapred.JobClient: Map input bytes=48

mapred.JobClient: Combine input records=0

mapred.JobClient: Map output records=4

mapred.JobClient: Reduce input records=4

Job Finished in 2.322 seconds

Estimated value of PI is 3.8

請(qǐng)注意Hadoop項(xiàng)目使用阿帕奇基金的log4j包來(lái)處理日志。缺省情況下,框架的輸出日志是以時(shí)間戳開(kāi)始的,后面跟著日志級(jí)別和產(chǎn)生消息的類名。除此之外,缺省情況下只有INFO和更高級(jí)別日志消息才會(huì)被打印出來(lái)。為了簡(jiǎn)介,我已經(jīng)從輸出中移除了時(shí)間戳和日志級(jí)別。

在日志中,你最感興趣的就是日志輸出的最后一行,它說(shuō)” 計(jì)算的PI值是…”。這意味著你的Hadoop安裝是成功的,它能夠正確的執(zhí)行你的應(yīng)用程序。

下面我們將一步一步的詳細(xì)查看列表2-3的輸出,這能幫助你理解這個(gè)樣例程序是怎么工作的,甚至可以找到程序是否出現(xiàn)錯(cuò)誤。

第一段日志是在Hadoop初始化PI計(jì)算器程序時(shí)輸出的,我們可以看到,你的輸入是2個(gè)Map作業(yè)和每個(gè)Map作業(yè)有10個(gè)抽樣。

Number of Maps = 2 Samples per Map = 10

Wrote input for Map #0

Wrote input for Map #1

然后,框架程序啟動(dòng)并且接管控制流,它進(jìn)行輸入分割(把輸入分成不相干的部分稱為輸入分割)。

你可以從下面一行中獲得作業(yè)ID,你能使用作業(yè)ID在作業(yè)控制工具中找到此作業(yè)。

Running job: job_local_0001

通過(guò)下面一行我們可以得知,一共有兩個(gè)輸入文件和兩個(gè)輸入分割。

jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=

mapred.FileInputFormat: Total input paths to process : 2

mapred.FileInputFormat: Total input paths to process : 2

mapred.JobClient: Running job: job_local_0001

mapred.FileInputFormat: Total input paths to process : 2

mapred.FileInputFormat: Total input paths to process : 2

映射作業(yè)的輸出會(huì)被劃分為不同的輸出塊,每一個(gè)輸出塊都是排序的,這個(gè)過(guò)程被稱為混淆過(guò)程。包含每一個(gè)排序的輸出塊的文件成為輸出塊。對(duì)于每一個(gè)Reduce作業(yè),框架會(huì)從Map作業(yè)的輸出中得到輸出塊,然后合并并且排序這些輸出塊得到排序塊,這個(gè)過(guò)程成為排序過(guò)程。

在列表2-3的下一部分,我們可以看到Map作業(yè)的混淆過(guò)程執(zhí)行的詳細(xì)信息??蚣塬@得所有Map作業(yè)的輸出記錄,然后把這些輸出輸入給唯一的一個(gè)Reduce作業(yè)(numReduceTasks:1)。如果你指定了多個(gè)Reduce作業(yè),對(duì)于每一個(gè)Reduce作業(yè)你就會(huì)看到一個(gè)類似Finished spill N的日志。剩下的日志是用來(lái)記錄輸出緩沖,我們并不關(guān)注這些。

下面,你會(huì)看到:

mapred.MapTask: numReduceTasks: 1

...

mapred.MapTask: Finished spill 0

mapred.LocalJobRunner: Generated 1 samples.

mapred.TaskRunner: Task 'attempt_local_0001_m_000000_0' ?

done.mapred.TaskRunner: Saved output of task ?

'attempt_local_0001_m_000000_0' ?

to file:/home/jason/src/hadoop-0.19.0/test-mini-mr/out

Generated 1 samples是Map作業(yè)的最終狀態(tài)的輸出。Hadoop框架告訴你,第一個(gè)Map作業(yè)通過(guò)作業(yè)’attempt_local_0001_m_000000_0”完成的,而且輸出已經(jīng)保存到缺省的文件系統(tǒng)file:/home/Jason/src/hadoop-0.19.0/test-mini-mr/out。

下面一部分是排序過(guò)程的輸出:

mapred.ReduceTask: Initiating final on-disk merge with 2 files

mapred.Merger: Merging 2 sorted segments

mapred.Merger: Down to the last merge-pass, with 2 segments left of ?

total size: 76 bytes

根據(jù)命令行參數(shù),列表2-3運(yùn)行的程序中有2個(gè)Map作業(yè)和一個(gè)Reduce作業(yè)。因?yàn)閮H僅存在一個(gè)Reduce作業(yè),所有的Map作業(yè)的輸出會(huì)被組織成為一個(gè)排序的排序塊。但是,兩個(gè)Map作業(yè)會(huì)產(chǎn)生兩個(gè)輸出塊進(jìn)入排序階段。每一個(gè)Reduce作業(yè)會(huì)在輸出目錄下產(chǎn)生一個(gè)名字為part-ON的輸出文件,N是Reduce作業(yè)以0開(kāi)始的遞增的序數(shù)。通常來(lái)說(shuō),名字的數(shù)字部分是5位數(shù)字構(gòu)成的,如果不夠5位數(shù)以0補(bǔ)齊。

日志輸出的下一部分說(shuō)明了唯一的Reduce任務(wù)的執(zhí)行情況:

mapred.LocalJobRunner: reduce > reduce

mapred.TaskRunner: Task 'attempt_local_0001_r_000000_0' done.

mapred.TaskRunner: Saved output of task 'attempt_local_0001_r_000000_0' to ?

file:/home/jason/src/hadoop-0.19.0/test-mini-mr/out

我們可以看出,樣例程序把Reduce作業(yè)的輸出寫(xiě)入文件attempt_local_0001_4_000000_0,然后,把它重命名為part-00000,保存在作業(yè)的輸出目錄中。

下面的日志的輸出提供了詳細(xì)的作業(yè)完成信息。

mapred.JobClient: Job complete: job_local_0001

mapred.JobClient: Counters: 11

mapred.JobClient: File Systems

mapred.JobClient: Local bytes read=314895

mapred.JobClient: Local bytes written=359635

mapred.JobClient: Map-Reduce Framework

mapred.JobClient: Reduce input groups=2

mapred.JobClient: Combine output records=0

mapred.JobClient: Map input records=2

mapred.JobClient: Reduce output records=0

mapred.JobClient: Map output bytes=64

mapred.JobClient: Map input bytes=48

mapred.JobClient: Combine input records=0

mapred.JobClient: Map output records=4

mapred.JobClient: Reduce input records=4

最后的兩行日志并不是框架打印的,而是由PiEstimator程序代碼打印的。

Job Finished in 2.322 seconds

Estimated value of PI is 3.8

1.1.2 測(cè)試Hadoop

Hadoop框架提供了用來(lái)測(cè)試分布式文件系統(tǒng)和運(yùn)行在分布式文件系統(tǒng)的MapReduce作業(yè)的樣例程序,這些測(cè)試程序被包含在hadoop-0.19.0-test.jar文件中。圖標(biāo)1-5是這些測(cè)試程序的列表和他們提供的功能:

圖表 1?5 hadoop-0.19.0-tests.jar文件中的測(cè)試程序

測(cè)試

描述

DFSCIOTest

測(cè)試libhdfs中的分布式I/O的基準(zhǔn)。Libhdfs是一個(gè)為C/C++應(yīng)用程序提供HDFS文件服務(wù)的共享庫(kù)。

DistributedFSCheck

文件系統(tǒng)一致性的分布式檢查。

TestDFSIO

分布式的I/O基準(zhǔn)。

clustertestdfs

對(duì)分布式文件系統(tǒng)的偽分布式測(cè)試。

dfsthroughput

測(cè)量HDFS的吞吐量。

filebench

SequenceFileInputFormat和SequenceFileOutputFormat的基準(zhǔn),這包含BLOCK壓縮,RECORD壓縮和非壓縮的情況。TextInputFormat和TextOutputFormat的基準(zhǔn),包括壓縮和非壓縮的情況。

loadgen

通用的MapReduce加載產(chǎn)生器。

mapredtest

MapReduce作業(yè)的測(cè)試和檢測(cè)。

mrbench

創(chuàng)建大量小作業(yè)的MapReduce基準(zhǔn)。

nnbench

NameNode的性能基準(zhǔn)。

testarrayfile

對(duì)有鍵值對(duì)的文本文件的測(cè)試。

testbigmapoutput

這是一個(gè)MapReduce作業(yè),它用來(lái)處理不可分割的大文件來(lái)產(chǎn)生一個(gè)標(biāo)志MapReduce作業(yè)。

testfilesystem

文件系統(tǒng)讀寫(xiě)測(cè)試。

testipc

Hadoop核心的進(jìn)程間交互測(cè)試。

testmapredsort

用于校驗(yàn)MapReduce框架的排序的程序。

testrpc

對(duì)遠(yuǎn)程過(guò)程調(diào)用的測(cè)試。

testsequencefile

對(duì)包含二進(jìn)制鍵值對(duì)的文本文件的測(cè)試。

testsequencefileinputformat

對(duì)序列文件輸入格式的測(cè)試。

testsetfile

對(duì)包含二進(jìn)制鍵值對(duì)文本文件的測(cè)試。

testtextinputformat

對(duì)文本輸入格式的測(cè)試。

threadedmapbench

對(duì)比輸出一個(gè)排序塊的Map作業(yè)和輸出多個(gè)排序塊的Map作業(yè)的性能。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MapReduce 實(shí)例淺析
Hadoop | In Programming We Trust
windows下配置cygwin、hadoop等并運(yùn)行mapreduce及mapreduce程序講解
Hive學(xué)習(xí)之路 (二十一)Hive 優(yōu)化策略
sqoop導(dǎo)出hive數(shù)據(jù)到mysql錯(cuò)誤: Can''''t parse input data java.util.NoSuchElementException解決辦法
利用Cloudera實(shí)現(xiàn)Hadoop
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服