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

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

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

    posts - 28, comments - 37, trackbacks - 0, articles - 0

    2012年5月20日


    淘寶招聘hadoop工程師若干, 面向在校生(2014年畢業),工作地點:杭州或北京

    Hadoop研發工程師
    職位描述
    您將負責:
    1.預研、開發、測試hdfs/mapreduce/hive/hbase的功能、性能和擴展;
    2.對有助于提升集群處理能力/高可用性/高擴展性的各種解決方案進行跟蹤和落地;
    3.解決海量數據不斷增長面臨的挑戰,解決業務需求。

    您需要具備:
    1、熟練運用java語言;
    2、熟悉jvm運行機制、熟悉linux;
    3、至少熟悉hadoop、hbase、hive等軟件之一;

     

    有意者請發送郵件到 yuling.sh@taobao.com 

    posted @ 2013-09-15 18:21 俞靈 閱讀(955) | 評論 (1)編輯 收藏


    mapreduce,一個jobmap個數, 每個map處理的數據量是如何決定的呢? 另外每個map又是如何讀取輸入文件的內容呢? 用戶是否可以自己決定輸入方式, 決定map個數呢? 這篇文章將詳細講述hadoop中各種InputFormat的功能和如何編寫自定義的InputFormat.

     

    簡介: mapreduce作業會根據輸入目錄產生多個map任務, 通過多個map任務并行執行來提高作業運行速度, 但如果map數量過少, 并行量低, 作業執行慢, 如果map數過多, 資源有限, 也會增加調度開銷. 因此, 根據輸入產生合理的map, 為每個map分配合適的數據量, 能有效的提升資源利用率, 并使作業運行速度加快.

        mapreduce, 每個作業都會通過 InputFormat來決定map數量. InputFormat是一個接口, 提供兩個方法:

    InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;

    RecordReader<K, V> getRecordReader(InputSplit split,

                                         JobConf job,

                                         Reporter reporter) throws IOException;

        其中getSplits方法會根據輸入目錄產生InputSplit數組, 每個InputSplit會相應產生一個map任務, map的輸入定義在InputSplit. getRecordReader方法返回一個RecordReader對象, RecordReader決定了map任務如何讀取輸入數據, 例如一行一行的讀取還是一個字節一個字節的讀取, 等等.

        下圖是InputFormat的實現類:

           (暫時無法上傳)

        這理詳細介紹FileInputFormatCombineFileInputFormat, 其它不常用,有興趣的可以自己查看hadoop源碼.


     

    FileInputFormat(舊接口org.apache.hadoop.mapred)

     

    mapreduce默認使用TextInputFormatTextInputFormat沒有實現自己的getSplits方法,繼承于FileInputFormat, 因此使用了FileInputFormat的.

    org.apache.hadoop.mapred.FileInputFormatgetSplits流程:

    兩個配置

    mapred.min.split.size        (一個map最小輸入長度),

    mapred.map.tasks                (推薦map數量)

    如何決定每個map輸入長度呢? 首先獲取輸入目錄下所有文件的長度和, 除以mapred.map.tasks得到一個推薦長度goalSize, 然后通過式子: Math.max(minSize, Math.min(goalSize, blockSize))決定map輸入長度. 這里的minSizemapred.min.split.size, blockSize為相應文件的block長度. 這式子能保證一個map的輸入至少大于mapred.min.split.size, 對于推薦的map長度,只有它的長度小于blockSize且大于mapred.min.split.size才會有效果. 由于mapred.min.split.size默認長度為1, 因此通常情況下只要小于blockSize就有效果,否則使用blockSize做為map輸入長度.

    因此, 如果想增加map, 可以把mapred.min.split.size調小(其實默認值即可), 另外還需要把mapred.map.tasks設置大.

    如果需要減少map,可以把mapred.min.split.size調大, 另外把mapred.map.tasks調小.

    這里要特別指出的是FileInputFormat會讓每個輸入文件至少產生一個map任務, 因此如果你的輸入目錄下有許多文件, 而每個文件都很小, 例如幾十kb, 那么每個文件都產生一個map會增加調度開銷. 作業變慢.

    那么如何防止這種問題呢? CombineFileInputFormat能有效的減少map數量.


    FileInputFormat(新接口org.apache.hadoop.mapreduce.lib.input)

    Hadoop 0.20開始定義了一套新的mapreduce編程接口, 使用新的FileInputFormat, 它與舊接口下的FileInputFormat主要區別在于, 它不再使用mapred.map.tasks, 而使用mapred.max.split.size參數代替goalSize, 通過Math.max(minSize, Math.min(maxSize, blockSize))決定map輸入長度, 一個map的輸入要大于minSize,小于

    Math.min(maxSize, blockSize).

        若需增加map,可以把mapred.min.split.size調小,mapred.max.split.size調大. 若需減少map, 可以把mapred.min.split.size調大, 并把mapred.max.split.size調小.


    CombineFileInputFormat

    顧名思義, CombineFileInputFormat的作用是把許多文件合并作為一個map的輸入.

    在它之前,可以使用MultiFileInputFormat,不過其功能太簡單, 以文件為單位,一個文件至多分給一個map處理, 如果某個目錄下有許多小文件, 另外還有一個超大文件, 處理大文件的map會嚴重偏慢.

    CombineFileInputFormat是一個被推薦使用的InputFormat. 它有三個配置:

    mapred.min.split.size.per.node 一個節點上split的至少的大小

    mapred.min.split.size.per.rack   一個交換機下split至少的大小

    mapred.max.split.size             一個split最大的大小

    它的主要思路是把輸入目錄下的大文件分成多個map的輸入, 并合并小文件, 做為一個map的輸入. 具體的原理是下述三步:

    1.根據輸入目錄下的每個文件,如果其長度超過mapred.max.split.size,block為單位分成多個split(一個split是一個map的輸入),每個split的長度都大于mapred.max.split.size, 因為以block為單位, 因此也會大于blockSize, 此文件剩下的長度如果大于mapred.min.split.size.per.node, 則生成一個split, 否則先暫時保留.

    2. 現在剩下的都是一些長度效短的碎片,把每個rack下碎片合并, 只要長度超過mapred.max.split.size就合并成一個split, 最后如果剩下的碎片比mapred.min.split.size.per.rack, 就合并成一個split, 否則暫時保留.

    3. 把不同rack下的碎片合并, 只要長度超過mapred.max.split.size就合并成一個split, 剩下的碎片無論長度, 合并成一個split.

    舉例: mapred.max.split.size=1000

         mapred.min.split.size.per.node=300

          mapred.min.split.size.per.rack=100

    輸入目錄下五個文件,rack1下三個文件,長度為2050,1499,10, rack2下兩個文件,長度為1010,80. 另外blockSize500.

    經過第一步, 生成五個split: 1000,1000,1000,499,1000. 剩下的碎片為rack1:50,10; rack210:80

    由于兩個rack下的碎片和都不超過100, 所以經過第二步, split和碎片都沒有變化.

    第三步,合并四個碎片成一個split, 長度為150.

     

    如果要減少map數量, 可以調大mapred.max.split.size, 否則調小即可.

    其特點是: 一個塊至多作為一個map的輸入,一個文件可能有多個塊,一個文件可能因為塊多分給做為不同map的輸入, 一個map可能處理多個塊,可能處理多個文件。


    編寫自己的InputFormat

     

        待續


     

    posted @ 2012-07-03 22:17 俞靈 閱讀(16459) | 評論 (2)編輯 收藏

    Yarn做為hadoop下一代集群資源管理和調度平臺, 其上能支持多種計算框架, 本文就簡要介紹一下這些計算框架.


    1.       MapReduce

    首先是大家熟悉的mapreduce, MR2之前, hadoop包括HDFSmapreduce, 做為hadoop上唯一的分布式計算框架, 其優點是用戶可以很方便的編寫分布式計算程序, 并支持許多的應用, hive, mahout, pig. 但是其缺點是無法充分利用集群資源, 不支持DAG, 迭代式計算等. 為了解決這些問題, yahoo提出了Yarn (next generation mapreduce), 一個分布式集群集群資源管理和調度平臺. 這樣除了mapreduce, 還可以支持各種計算框架.

    2.       Spark

    Spark是一種與mapreduce相似的開源計算框架, 不同之處在于Spark在某些工作負載方面表現更優, 因為它使用了內存分布式數據集, 另外除了提供交互式查詢外, 它還可以優化迭代工作負載.

    3.       Apache HAMA

    Apache Hama 是一個運行在HDFS上的BSP(Bulk Synchronous Parallel大容量同步并行) 計算框架, 主要針對大規模科學計算,如矩陣, 圖像, 網絡算法等.當前它有一下功能:

    • 作業提交和管理接口
    • 單節點上運行多個任務
    • 輸入/輸出格式化
    • 備份恢復
    • 支持通過Apache Whirr運行在云端
    • 支持與Yarn一起運行

    4.       Apache Giraph

    圖像處理平臺上運行這大型算法(page rank, shared connections, personalization-based popularity )已經很流行, Giraph采用BSP模型(bulk-synchronous parallel model),可用于等迭代類算法。

    5.       Open MPI

    這是一個高性能計算函數庫,通常在HPCHigh Performance Computing)中采用,與MapReduce相比,其性能更高,用戶可控性更強,但編程復雜,容錯性差,可以說,各有所長,在實際應用中,針對不同 該應用會采用MPI或者MapReduce

    6.       Apache HBase

    HBase是一個hadoop數據庫, 其特點是分布式,可擴展的,存儲大數據。當有需要隨機,實時讀寫的大數據時, 使用HBase很適合.

    本文參考:

    http://wiki.apache.org/hadoop/PoweredByYarn
    http://www.oschina.net/p/open+mpi

    http://incubator.apache.org/hama/
    http://incubator.apache.org/giraph/

    http://hbase.apache.org/

    posted @ 2012-06-03 11:43 俞靈 閱讀(3654) | 評論 (0)編輯 收藏

    轉載
    http://fujun.sinaapp.com/2011/11/02/68.html

    第一步,打開終端,看看你的顯卡Ubuntu能認出多少顯示分辨率設置,輸入命令

    wufujun@wufujun-VirtualBox:~$ xrandr

    系統給出的結果

    Screen 0: minimum 64 x 64, current 1024 x 768, maximum 32000 x 32000
    VBOX0 connected 1024×768+0+0 0mm x 0mm
    1024×768 60.0 + 60.0
    1600×1200 60.0
    1440×1050 60.0
    1280×960 60.0
    800×600 60.0
    640×480 60.0

    這里可以看到,沒有16:9的的分辨率設置

    第二步,用cvt命令測試1368×768是否可用

    wufujun@wufujun-VirtualBox:~$ cvt 1368 768

    顯示結果如下
    # 1368×768 59.88 Hz (CVT) hsync: 47.79 kHz; pclk: 85.86 MHz
    Modeline “1368x768_60.00″ 85.25 1368 1440 1576 1784 768 771 781 798 -hsync +vsync

    從這個結果里可以到,16:9的分辨率是可以用的

    第三步 輸入

    wufujun@wufujun-VirtualBox:~$ sudo xrandr --newmode "1368x768" 85.86 1368 1440 1576 1784 768 771 781 798 -hsync +vsync

    建立新的分辨率模式1368×768,把剛才cvt得到的數據寫進參數

    第四步 繼續輸入

    sudo xrandr --addmode VBOX0 "1368x768"

    給當前顯示器VBOX0增加1368×768分辨率設置

    做完以上操作后,可以在”顯示“設置里面看到顯示的分辨率列表中多了一個 1368×768(16:9)的選項。選中這個選項,點擊應用,完美的寬屏顯示回來了!

    經過測試,上面的方法做完以后,每次注銷后就又變回了4:3的比例,而且會有的報錯,沒辦法,按上面的修改完畢后,還要再修改一下/etc/X11/xorg.conf這個文件,這個配置文件在現在的版里已經取消了,所以需要我們新建一個


    $ sudo gedit /etc/X11/xorg.conf

    編輯內容為:

    Section "Device"
    Identifier "Configured Video Device"
    EndSection

    Section "Monitor"
    Identifier "Configured Monitor"
    Modeline "1368x768_60.00" 85.86 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync
    EndSection

    Section "Screen"
    Identifier "Default Screen"
    Monitor "Configured Monitor"
    Device "Configured Video Device"
    SubSection "Display"
    Modes "1368x768@60"
    EndSubSection
    EndSection

    其中 Modeline “1368x768_60.00″ 85.86 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync 就是用$ cvt 1368 768得到的值。也可以用$ gtf 1368 768 60命令來得到這個Modeline的值,這個命令中,1368 768是分辨率 60為刷新率,用這個命令得到的值可能會更為準確一些。

    SubSection "Display"
    Modes "1368x768@60"
    EndSubSection

    這段是設置默認顯示最佳分辨率。

    注意這段文件中的一些規則

    Section “Device”區塊中,Identifier指定了顯卡的唯一名稱,這個名稱可以隨便取,但一定要與Section “Screen”區塊中的device選項中的名稱相同。在Section “Monitor”區塊中,Identifier指定了顯示器的唯一名稱,這個名稱可以隨便取,但一定要與Section “Screen”區塊中的Monitor選項中所指定的名稱相同。Section “Screen”區塊中的Identifier選項,指定了這個顯卡與顯示器相結合的唯一名稱。這個名稱也可以隨便取的。這個名稱需要與Section “ServerLayout” 區塊中的名稱相同。這個Section “ServerLayout” 區塊我們一般不必編寫

    posted @ 2012-05-24 14:46 俞靈 閱讀(2881) | 評論 (0)編輯 收藏

         摘要:      最近這些天學習了classLoader的原理, 原因是因為服務器上的一個java進程啟動時加載兩個不同版本的jar包, 含有相同名字的類, 而且服務端的jar包排在前面, 我上傳的jar包排在后面, 于是每次都使用服務端的jar包, 我的jar包便無法生效, 因此希望修改classLader, 讓它按相反的順序加載jar包.  ...  閱讀全文

    posted @ 2012-05-20 19:43 俞靈 閱讀(5654) | 評論 (1)編輯 收藏

    主站蜘蛛池模板: 在线观看免费黄网站| 爽爽日本在线视频免费| 亚洲va久久久久| 亚洲精品国自产拍在线观看| 亚洲AV中文无码字幕色三| 国产精品hd免费观看| 精品亚洲成AV人在线观看| 暖暖免费高清日本一区二区三区 | 亚洲视频.com| 在线观看免费成人| baoyu116.永久免费视频| 亚洲日韩精品无码专区| 亚洲精品无码成人AAA片| 女人张开腿给人桶免费视频 | 99久久久国产精品免费牛牛四川| 久久青草亚洲AV无码麻豆| 在线观看无码的免费网站| AAA日本高清在线播放免费观看| 亚洲精品无码久久久久| 无码囯产精品一区二区免费| 久久亚洲精品无码gv| 伊人久久综在合线亚洲2019| 精品福利一区二区三区免费视频| 亚洲依依成人精品| 亚洲精品乱码久久久久久久久久久久| 在线免费播放一级毛片| 看Aⅴ免费毛片手机播放| 亚洲精品成a人在线观看| 无码一区二区三区免费视频| 日本视频免费高清一本18| 亚洲天堂中文字幕在线观看| 国产亚洲精久久久久久无码77777| a级特黄毛片免费观看| 亚洲av日韩av永久在线观看 | 国产精品免费一级在线观看| 九九免费久久这里有精品23| 亚洲欧洲国产综合AV无码久久| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲美女人黄网成人女| 亚洲一区无码中文字幕| 啊灬啊灬别停啊灬用力啊免费看|