• <menu id="w2i4a"></menu>
  • logo Hadoop教程

    文檔首頁>>Hadoop教程>>Hadoop教程:用hadoop計算PI值

    Hadoop教程:用hadoop計算PI值


    一、計算PI值的方式與原理

    百度一下,計算PI的方法還真不少。但在hadoop examples代碼中的注釋寫的是:是采用 Quasi-Monte Carlo 算法來估算PI的值。 維基百科中對Quasi-Monte Carlo的描述比較理論,好多難懂的公式。 

    好在google了一把,找到了斯坦福大學(xué)網(wǎng)站上的一篇文章:《通過扔飛鏢也能得出PI的值?》,文章很短,圖文并茂,而且很好理解。 

    我這里將那篇文章的重要部分截了個圖: 

    adoop計算PI值

    對上面的圖再稍微解釋一下: 

    1. Figure2是Figure1的右上角的部分。 
    2. 向Figure2中投擲飛鏢若干次(一個很大的數(shù)目),并且每次都仍在不同的點上。 
    3. 如果投擲的次數(shù)非常多,F(xiàn)igure2將被刺得“千瘡百孔”。 
    4. 這時,“投擲在圓里的次數(shù)”除以“總投擲次數(shù)”,再乘以4,就是PI的值!(具體的推導(dǎo)過程參見原文) 

    在這個算法中,很重要的一點是:如何做到“隨機(jī)地向Figure2投擲”,就是說如何做到Figure2上的每個點被投中的概率相等。 

    hadoop examples代碼中,使用了Halton sequence保證這一點,關(guān)于Halton sequence,大家可以參考維基百科。

    我這里再總結(jié)一下Halton sequence的作用: 在1乘1的正方形中,產(chǎn)生不重復(fù),并且均勻的點。每個點的橫坐標(biāo)和縱坐標(biāo)的值都在0和1之間。 正是這樣,保證了能夠做到“隨機(jī)地向Figure2投擲”。

    有人總結(jié)了一下,這個實際上叫做蒙特卡洛算法,我們?nèi)∫粋€單位的正方形(1×1) 里面做一個內(nèi)切圓(單位圓),則 單位正方形面積 : 內(nèi)切單位圓面積 = 單位正方形內(nèi)的飛鏢數(shù) : 內(nèi)切單位圓內(nèi)的飛鏢數(shù) ,通過計算飛鏢個數(shù)就可以把單位圓面積算出來, 通過面積,在把圓周率計算出來。 注意 ,精度和你投擲的飛鏢次數(shù)成正比。

    二,運(yùn)行hadoop估算PI的命令

    adoop計算PI值

    后面2個數(shù)字參數(shù)的含義: 

    • 第1個100指的是要運(yùn)行100次map任務(wù) 
    • 第2個數(shù)字指的是每個map任務(wù),要投擲多少次 

    2個參數(shù)的乘積就是總的投擲次數(shù)。 

    我運(yùn)行的結(jié)果: 

    adoop計算PI值

    三,總結(jié)

    hadoop的examples中的計算PI的方法屬于是采用大量采樣的統(tǒng)計學(xué)方法,還是屬于數(shù)據(jù)密集型的工作。 

    怎計算PI的精確值?

    作單位圓,再作其內(nèi)接正N邊形(N為2的正整數(shù)次方)先計算其內(nèi)接正N邊形周長,可用公式C=N*2R*sin(180/N)計算,其中R為單位圓半徑1。sin(180/N)可以連用N次半角公式計算(因為N為2的正整數(shù)次方)最后用C/2便可得出圓周率的近似值(因為N可以無限大的取值,所以我們可以無限接近圓周率)

    Hadoop做什計算合適?

    主要針對大塊的數(shù)據(jù)文件,最好是數(shù)據(jù)規(guī)模上G、T級別的,hadoop把大塊數(shù)據(jù)進(jìn)行切割并進(jìn)行分布式存儲,對小塊數(shù)據(jù)由于系統(tǒng)開銷等原因處理速度并不一定比單個串行程序明顯。此外,hadoop的mapreduce計算模型通過map任務(wù)會產(chǎn)生中間結(jié)果文件,reduce任務(wù)在處理這些中間結(jié)果文件形成最終結(jié)果文件并輸出。

    由 于中間結(jié)果文件是存儲在各個分布式計算節(jié)點本地內(nèi)存或磁盤上的,如果計算產(chǎn)生的中間結(jié)果文件非常巨大,reduce過程需要通過遠(yuǎn)程過程調(diào)用來取得這些中 間結(jié)果文件,會加大網(wǎng)絡(luò)傳輸?shù)拈_銷,則不適合采用hadoop處理。所以對于是否何時采用hadoop來處理數(shù)據(jù),上面講的兩點是必須考慮的問題,對于大規(guī)模數(shù)據(jù)的統(tǒng)計分析,例如求期望方差、或者對海量數(shù)據(jù)的分布式查詢適合用hadoop來做。呵呵~~不知是否解答清楚了你的問題。

    轉(zhuǎn)載請注明出處:http://www.ming-yue.cn/hadoop-pi

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();