国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Hadoop:使用 JavaScript 構建

Magicer / 3299人閱讀

摘要:說明本文所有操作均在環境下進行。任何可以使用來編寫的應用,最終會由編寫。書中分別介紹了如何使用和結合進行開發。工具會創建作業,發送給各個,同時監控整個作業的執行過程。準備好的運行環境之后開始搭建的運行環境,參考單節點集群配置。

說明

本文所有操作均在 linux 環境下進行。

轉載請注明出處。

"任何可以使用JavaScript來編寫的應用,最終會由JavaScript編寫。"

作為一名小前端,我深受 Jeff Atwood 前輩的鼓舞。上面這條定律便是他提出來的。

背景

最近在學習 Hadoop ,權威指南 中介紹到了 Hadoop Streaming,說 Hadoop Streaming 是 Hadoop 提供的一個編程工具,它允許用戶使用任何可執行文件或者腳本文件作為 Mapper 和 Reducer 。書中分別介紹了如何使用 Ruby 和 Python 結合 Hadoop Streaming 進行開發。沒有 JS,不開心。我們 JS 這么強大,一定也可以。。。

分析

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

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

準備

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

編寫代碼

先貼目錄結構:

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

map 中的代碼如下:

#!/usr/bin/env node

// 引入readline模塊
const readline = require("readline")

// 創建readline接口實例
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
})

rl.on("line", line => {
    // 分離每一行的單詞
    line.split(" ").map((word) => {
        // 將單詞以如下格式寫入標準輸出
        console.log(`${word}	1`)
    })
})

rl.on("close", () => {
    process.exit(0)
})

reduce 中的代碼如下:

#!/usr/bin/env node
const readline = require("readline")

const  rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout,
    terminal: false
})

// 存儲鍵值對 
let words = new Map()

rl.on("line", line => {
    // 解構賦值
    const [word, count] = line.split("	")
    // 如果 Map 中沒有該單詞,則將該單詞放入 Map ,即第一次添加
    if (!words.has(word)) {
        words.set(word, parseInt(count))
    } else {
        // 如果該單詞已存在,則將該單詞對應的 count 加 1
        words.set(word, words.get(word) + 1)
    }
})

rl.on("close", () => {
    words.forEach((v, k) => {
        // 將統計結果寫入標準輸出
        console.log(`${k}	${v}`)
    })
    process.exit(0)
})

wordcount.txt 中的內容如下:

JS Java
JS Python
JS Hadoop

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

$ chmod +x map reduce

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

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

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

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

提交作業至 Hadoop

此時要確保 Hadoop 正常運行

在 HDFS 中創建目錄:

$ hdfs dfs -mkdir input

將待處理文件上傳至 HDFS:

$ hdfs dfs -put wordcount.txt input

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

http://localhost:50070/explor...
如下圖所示:

向 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    1
JS        3
Java      1
Python    1

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

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

-input:輸入文件路徑

-output:輸出文件路徑

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

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

參考資料

Hadoop?Streaming?編程
Node.js 命令行程序開發教程
Readline?|?Node.js v7.7.0 Documentation

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/81920.html

相關文章

  • 【譯】關于機器學習的11個開源工具

    摘要:雖然廣受歡迎,但是仍受到來自另外一個基于的機器學習庫的競爭年出現的。還提供更傳統的機器學習功能的庫,包括神經網絡和決策樹系統。和的機器學習庫。顧名思義,是用于神經網絡機器學習的庫,便于將瀏覽器用作數據工作臺。 關于機器學習的11個開源工具 翻譯:瘋狂的技術宅英文標題:11 open source tools to make the most of machine learning英文連...

    岳光 評論0 收藏0

發表評論

0條評論

Magicer

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<