使用JavaScript編寫MapReduce程序

2021-02-06 過往記憶大數據


本文轉載自:http://www.jianshu.com/p/227c4155941e


最近在學習 Hadoop ,權威指南 中介紹到了 Hadoop Streaming,說 Hadoop Streaming 是 Hadoop 提供的一個編程工具,它允許用戶使用任何可執行文件或者腳本文件作為 Mapper 和 Reducer 。書中分別介紹了如何使用 Ruby 和 Python 結合 Hadoop Streaming 進行開發,但是並沒有介紹如何使用JavaScript編寫MapReduce程序,所有本文就是為了解決這個。

我們先來分析 Hadoop Streaming 的原理,如下:
mapper 和 reducer 會從標準輸入中讀取用戶數據,一行一行處理後發送給標準輸出。Streaming 工具會創建 MapReduce 作業,發送給各個 TaskTracker,同時監控整個作業的執行過程。

分析完原理之後我們知道了只需構造 mapper 和 reducer 即可,他們的工作是從標準輸入讀取用戶數據,以行(hang)為單位處理完成後發送到標準輸出。

JavaScript 如何從標準輸入輸出讀寫數據呢?別擔心,我們有 NodeJS。
準備好 JavaScript 的運行環境之後開始搭建 Hadoop 的運行環境,參考 Hadoop: 單節點集群配置。

先貼目錄結構:

$ find .../map./reduce./wordcount.txt

map 中的代碼如下:

reduce 中的代碼如下:

wordcount.txt 中的內容如下:

JS JavaJS PythonJS Hadoop

目前 map 和 reduce 這兩個程序還無法運行,需要加可執行權限,方法如下:

$ chmod +x map reduce

現在可以在終端測試一下程序是否能正確執行:

$ cat wordcount.txt | ./map | ./reduceJS      3Java    1Python  1Hadoop  1

可以看到,已經正確統計出了詞頻。

接下來只需把作業提交給 Hadoop ,讓它去執行就可以了。

此時要確保 Hadoop 正常運行

在 HDFS 中創建目錄:

$ hdfs dfs -mkdir input

將待處理文件上傳至 HDFS:

$ hdfs dfs -put wordcount.txt input

此時可以通過 web 接口查看文件是否正確上傳:


向 Hadoop 提交作業

$ hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar \> -input input/wordcount.txt \> -output output \> -mapper map \> -reducer reduce

檢查計算結果:

$ hdfs dfs -cat output/*Hadoop    1JS        3Java      1Python    1

可以看到與之前的結果一致。

解釋一下 Hadoop Streaming 的幾個參數:

-input:輸入文件路徑

-output:輸出文件路徑

-mapper:用戶自己寫的 mapper 程序,可以是可執行文件或者腳本

-reducer:用戶自己寫的 reducer 程序,可以是可執行文件或者腳本

歡迎關注本公眾號:iteblog_hadoop:

0、回復 spark_2017_all 獲取 Spark Summit East 2017高清視頻和PPT

1、回復 hive_es 獲取 基於 Hive/ES 金融大數據指標系統PPT

2、回復 bigdata_e 獲取 《大規模數據處理演變》PPT

3、回復 大數據分析 獲取 《Big Data Analytics》電子書

4、回復 spark2電子書 獲取 《Apache Spark 2 for Beginners》電子書

5、回復 spark2_data 獲取  《Spark for Data Science》電子書

6、回復 架構師大會ppt 獲取 《2016年中國架構師[大數據場]》 PPT

7、回復 intro_flink 獲取 《Introduction to Apache Flink》 電子書

8、回復 learning_flink 獲取《Learning Apache Flink》電子書

8、回復 Hadoop權威指南  獲取 《Hadoop權威指南中文第三版》電子書

9、回復 flink未來 獲取 《The Future of Apache Flink》

10、回復 Learning_PySpark 獲取《Learning PySpark》電子書

11、更多大數據文章歡迎訪問https://www.iteblog.com及本公眾號(iteblog_hadoop)

相關焦點

  • 0基礎學習JavaScript一定要知道如何使用VS2019去編寫代碼
    編寫JS代碼對於.NET開發者來說,前端技術也是不能少的,0基礎的開發者來說,使用Visual Studio 2019開發工具是非常容易上手的。這裡創建一個空白的Web應用程式項目,ASP.NET Web應用程式是完全支持JavaScript代碼編寫的。
  • [分享]Rhino使JavaScript應用程式更靈動
    導讀:腳本語言有良好的快速開發,高效率的執行,解釋而非編譯執行等優點,並且具有與其他語言編寫的組件之間強大的通信功能。JavaScript一直是腳本語言中的領頭羊,它是一門具有非常豐富特性的語言。除了瀏覽器之外,JavaScript也可以應用在其他場合,比如伺服器端程序中。
  • JavaScript是什麼
    面向對象的思想—java、 C#腳本—寫好的程序不需要中間轉換,就能立即在運行環境中運行。javaScript,SQL為html網頁提供動態效果【特效】。完成與後臺處理程序數據交互。【1.發請求{要} 2.處理數據】簡單的具體操作:1.直接向html文件中寫出標記和內容。
  • MapReduce 閱讀筆記
    原文:http://blog.luoyuanhang.com/2017/04/19/mapreduce-notes/這篇文章是我閱讀
  • 使用HTML5和Javascript設計繪圖程序
    【IT168 專稿】前言  在本文中,將會介紹如何使用HTML5和Javascript去設計一個簡單的繪圖程序。HTML5的一個新的特性是canvas畫布功能,通過canvas畫布的強大功能可以實現繪畫不少圖形和其他絢麗的功能。
  • javascript流程語句
    程序的三大流程控控制 1.我們的計算機在執行一個程序的時候,最基本的方式是一條語句接一條語句的執行。但不可能所有的問題都能用順序執行方式就能解決,總會有一些跳轉。2.採用結構化的程序設計,可以大大提高開發程序的速度、提高程序的可讀性、程序運行的速度和效率。
  • 使用 JavaScript 編寫更好的條件語句
    如果你使用JavaScript工作,你將寫很多包含條件調用的代碼。條件調用可能初學很簡單,但是還有比寫一對對if/else更多的東西。這裡有些編寫更好更清晰的條件代碼的有用提示。用 Array.every & Array.some 匹配全部/部分內容1.
  • HBase與mapreduce集成
    在公司中,大多數都是hbase和mapreduce共同進行業務操作,hbase多數都是讀寫操作,hbase和hadoop在內部已經封裝好了,我們要做的就是調用。importtsv: 導入一個tsv的文件數據rowcounter: 統計rowkeyverifyrep:比較兩個不同集群中的表的數據這是目前的表有7行使用下命令統計
  • 用Jasmine和Blanket編寫基於Web的客戶端單元測試
    在本文中,我們將介紹兩種基於JavaScript的編寫單元測試的軟體包,它們背後的代碼以及最佳使用方式。前言在編寫一個網站時,或者更經常地 - 一個單頁的應用程式 - 需要測試它,就像其他任何代碼一樣。
  • 【實驗任務】MapReduce社交好友推薦算法
    任務步驟1.首先,我們來準備實驗需要用到的數據,切換到/data/mydata目錄下,使用vim編輯一個friend_data.txt文件。10.下面開始編寫;  import org.apache.hadoop.mapreduce.Mapper;  import org.apache.hadoop.mapreduce.Reducer;  import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat
  • 3.2.3 JavaScript中for循環語句的使用
    實例1:請應用javaScript中的for循環語句編寫計算1+2+…+100的程序,並在頁面中輸出計算的結果。代碼如下:<script type="text/javascript">var sum=0;for(var i=1;i<=100;i++){sum+=i; //相當於
  • 譯文:在JavaScript應用程式中包含CSS的多種方法
    原文連結:https://css-tricks.com/the-many-ways-to-include-css-in-javascript-applications/,作者:Dominic Magnifico如有翻譯不準確,請多指正。歡迎來到這個在前端開發領域極具爭議性的話題!
  • 3.2.1 JavaScript中while循環語句的使用
    實例:請應用javaScript中的while循環語句編寫程序,輸出1~20這20個數字。代碼如下:<script type="text/javascript">var i=1;while(i<=20){ //條件表達式也可以寫成(i<21)document.write
  • Hadoop之wordcount實例-MapReduce程序
    使用 Python 語言背後的「技巧」是我們將使用 Hadoop Streaming API 來幫助我們通過 STDIN(標準輸入)和 STDOUT(標準輸出)在 Map 和 Reduce 代碼之間傳遞數據。我們將簡單地使用 Python 的 sys.stdin 來讀取輸入數據並將我們自己的輸出列印到 sys.stdout。
  • 3.1.1 JavaScript簡單if語句的使用
    如果一位學生的語文成績為79,請用JavaScript的簡單if語句編寫一個程序來判斷這位學生的等級。代碼如下:<script type="text/javascript">var fs=79;if(fs>=60){document.write("及格");
  • Code::Blocks使用教程(使用Code::Blocks編寫C語言程序)
    CodeBlocks 完全支持單個源文件的編譯,如果你的程序只有一個源文件(初學者基本上都是在單個源文件下編寫代碼),那麼不用創建項目,直接運行即可;如果有多個源文件,才需要創建項目。 按下鍵盤上的任意一個鍵,程序就會關閉。更加快捷的方式實際開發中我們一般使用菜單中的」構建 --> 構建並運行」選項:
  • JavaScript引擎實現JVM 支持運行Java
    而使用JVM是實現這一特點的關鍵。一般的高級語言如果要在不同的平臺上運行,至少需要編譯成不同的目標代碼。而引入JVM後,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用JVM屏蔽了與具體平臺相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。JVM在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行。
  • 3.1.5 JavaScript中switch語句的使用
    在JavaScript中使用if-else-if語句可以實現多路選擇功能,但其結構使程序看起來很不清晰,也不容易維護。請用JavaScript的switch語句編寫一段程序,判斷輸出清風同學的任職情況。
  • Hive與MapReduce相關排序及自定義UDF函數
    Hive和mapreduce相關的排序和運行的參數1.設置每個reduce處理的數據量(單位是字節)我們在hive中查看下配置文件hive-site.xml.template我們打開配置文件可以看到這是256MB如果超過1G,將使用4個reducers2、設置最大運行的reduce的個數同上我們可以在配置中找到下面的內容複製到記事本裡
  • 3.1.2 JavaScript中if-else語句的使用
    如果一位學生的數學成績為59,請用JavaScript的if語句編寫一個程序來判斷這位學生的等級。代碼如下:<script type="text/javascript">var sxcj=59;if(sxcj>=60){document.write("合格");