<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    靈魂-放水

    為學日益,為道日損。

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks
    作者:江南白衣

    ??? Hadoop 是 Google labs 的MapReduce的一個實現,Nutch項目的全部數據處理都構建在其之上。MapReduce是一種簡化的分布式編程模式,讓程序可以自動在普通機器組成的集群中以并行方式分布執行。

    ??? 就如同java程序員可以不考慮內存泄露一樣,MapReduce程序員也不許要關心海量數據如何被分配到多臺機器上,不需要考慮機器失效的處理,不需要考慮這些機器間如何協作共同完成工作,程序員不需要什么并發處理或者分布式系統的經驗,就可以進行分布式的編程。

    ?? MapReduce來源于函數式編程的Map,Reduce概念,Map是映射,Reduce是規約。說了非常簡單,就真的是非常簡單的,先看Hadoop自帶的sample-WordCount?,再看Nutch里的Indexer,Fetcher兩個實戰的例子,最后閱讀Hadoop wiki 上的HadoopMapReduce,很快就可以上手:
    ?
    ?? MapReduce過程簡記:
    ??? 1.根據輸入路徑,先用FileSplit把輸入的文件剁碎,根據InputFormat(讀入資料的格式)內含的RecordReader把資料讀入成一組(key,value)對,然后按mapper count平均分給不同的Mapper處理。(這段因為沒看過源碼,還有點模糊)
    ??? 2.Mapper進行Map操作 :: (InitialKey, IntialValue) -> [(InterKey, InterValue)] 從Inupt key,value 產生中間數據集
    ??? 3.Reducer進行Reduce操作:: (Interkey, InterValuesIterator) -> [(InterKey, InterValue)],Reducer遍歷所有節點取得需要的中間數據集,再對其進行去重、過濾等后期處理,得到結果。
    ?? ?4.最后由OutputFormat類(輸出資料的格式)內含的RecordWriter,將最終結果輸出。結果輸出可以是文件,也可以是其他形式,比如Nutch的Indexer,output時并不是去寫文件,而是調用Lucene的IndexWriter將作為中間數據集的Lucene Document存盤。

    ? 一段典型的Hadoop代碼:

    ??public?static?void?main(String[]?args)?main()
    ???{?
    ????JobConf?conf?
    =?new?JobConf(WordCount.class);
    ????conf.setJobName(
    "wordcount");???

    ????jobConf.setInputFormat(MyInputFormat.
    class);
    ????jobConf.setOutputFormat(MyOutputFormat.
    class);
    ???
    ????jobConf.setInputKeyClass(BytesWritable.
    class);
    ????jobConf.setInputValueClass(BytesWritable.
    class);
    ????jobConf.setOutputKeyClass(BytesWritable.
    class);
    ????jobConf.setOutputValueClass(BytesWritable.
    class);
    ????
    ????jobConf.setMapperClass(MyMapper.
    class);????????
    ????jobConf.setReducerClass(MyReducer.
    class);

    ????jobConf.setNumMapTasks(num_maps);
    ????jobConf.setNumReduceTasks(num_reduces);
    ????
    ????JobClient.runJob(jobConf);
    ???
    ???}

    ???? 這就是一段hadoop式程序的主代碼,用戶自行實現四個內部類,MyInputFormat,MyOutputFormat,MyMapper和MyReducer,然后一一在jobConf里配置,最后執行runJob()即可。對比一下Nutch的源碼就知道,只要把原來一段順序執行的代碼,拆分到上面四個類里面去,再在jobConf里進行指定,就可以擁有分布式執行的能力,無須要處理分布式編程的代碼。配置一下服務器列表,在每臺服務器上執行nutch/bin/start-all.sh,你的代碼就分布式地執行了。

    ?? 最后看一下Hadoop的結構,除了MapReduce的分發外,還有兩個很重要的部分:

    ?? Hadoop的快速接口反射式RPC系統:IPC

    ?? Hadoop的分布式文件系統NDFS:見 CSharpProgrammer blog上的文章

    ???注1:筆記中部分句子直接從網上文章摘錄,不一一聲明。

    ?? 注2:Hadoop 目前版本為0.5,還不夠成熟,看過源碼的Donald對其源碼評價一般,值得繼續等待。



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1063315

    posted on 2006-09-15 11:05 放水老倌 閱讀(572) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 女人18毛片特级一级免费视频| 美女被暴羞羞免费视频| 亚洲一区二区三区无码中文字幕 | 亚洲高清中文字幕| 亚洲乱码日产精品BD在线观看| 久久精品国产99精品国产亚洲性色| 亚洲精品综合久久中文字幕| 亚洲av无码专区亚洲av不卡| 国产精品玖玖美女张开腿让男人桶爽免费看 | 91短视频在线免费观看| 野花高清在线电影观看免费视频| 国产精品嫩草影院免费| 国产亚洲精品自在久久| 亚洲人成网站色在线观看| 一级人做人爰a全过程免费视频| 99re6在线视频精品免费下载| 精品久久免费视频| 91情国产l精品国产亚洲区| 99热这里有免费国产精品| 亚洲视频免费播放| 妻子5免费完整高清电视| 狠狠亚洲婷婷综合色香五月排名 | 亚洲成网777777国产精品| 亚洲国产美国国产综合一区二区| 亚洲av纯肉无码精品动漫| 免费大黄网站在线观| 亚洲国产中文在线二区三区免| 福利免费观看午夜体检区| 亚洲欧美aⅴ在线资源| 日韩精品无码免费专区午夜| 永久免费AV无码网站在线观看| 国产精品亚洲综合| 成人午夜视频免费| 亚洲一区二区三区播放在线| 一区二区三区福利视频免费观看| 中文字幕精品无码亚洲字| 国产产在线精品亚洲AAVV| 亚洲尤码不卡AV麻豆| 国产精品免费精品自在线观看| 亚洲热线99精品视频| 永久免费毛片在线播放|