withJavaScript可见本文所有操作均在linux环境下进行。请注明出处。“任何可以用JavaScript编写的应用程序最终都会用JavaScript编写。”作为一个小前端,我受到了JeffAtwood前辈们的启发。上述法律是他提出来的。背景我最近在权威的Hadoop学习指南中介绍了HadoopStreaming,说HadoopStreaming是Hadoop提供的一种编程工具,它允许用户使用任何可执行文件或脚本文件作为Mapper和Reducer。本书介绍了如何使用Ruby和Python结合HadoopStreaming进行开发。没有JS,没有乐趣。我们的JS这么强大,肯定是可以的。..分析首先分析一下HadoopStreaming的原理,如下:mapper和reducer会从标准输入中读取用户数据,逐行处理后发送到标准输出。Streaming工具会创建一个MapReduce作业,发送给各个TaskTracker,监控整个作业的执行过程。分析完原理我们知道只需要构造mapper和reducer即可。他们的工作是从标准输入中读取用户数据,以行为单位进行处理(挂起)并将其发送到标准输出。准备JavaScript如何从标准输入输出中读写数据?别担心,我们有NodeJS。准备好JavaScript运行环境后,开始搭建Hadoop运行环境。请参阅Hadoop:单节点集群配置。先写代码,贴上目录结构:$find.../map./reduce./wordcount.txtmap中的代码如下:#!/usr/bin/envnode//引入readline模块constreadline=require('readline')//创建readline接口的实例constrl=readline.createInterface({input:process.stdin,output:process.stdout})rl.on('line',line=>{//每行分开单词line.split('').map((word)=>{//按照以下格式将单词写入标准输出console.log(`${word}\t1`)})})rl.on("close",()=>{process.exit(0)})reduce中的代码如下:#!/usr/bin/envnodeconstreadline=require('readline')constrl=readline.createInterface({input:process.stdin,output:process.stdout,terminal:false})//存储键值对
