返回 登录
5

Swift 如何实现 Hadoop 流处理程序开发?

本文为 Perfect 官方投稿,作者 Rocky,版权归原作者所有,未经作者同意,请勿转载。
原文地址:http://mp.weixin.qq.com/s/fxukFwNyT-rvqcOpZD3zaw
技术之路,共同进步,欢迎投稿、约稿,给文章纠错,请发送邮件至mobilehub@csdn.net

简介

本项目包括两类 Hadoop 流处理应用程序:映射器 mapper 和 总结器 reducer。这两类程序都是标准的控制台终端程序,即从标准输入读数据 readLine() 后推送到标准输出 print()

映射器的范例程序 mapper 是将来自标准输入的文本拆分为一个一个的英语单词,然后采用下列格式进行打印(假设输入内容是Hello, world! hello!):

hello 1
world 1
hello 1

而总结器 reducer 的目标是将这些输入进行统计,最后形成单词统计表:

hello 2
world 1

两个程序的结合使用即可提供单词统计的功能。

Hadoop 的 Map Reduce 正是为上述任务在大数据环境下而设计的,这里的大数据指的是单个文件输入达到 GB 甚至 TB。

编译

由于采用标准流程序开发,因此编译这些应用不需要任何其他依存关系。您只需打开一个终端窗口并运行 swift build 命令即可:

$ cd mapper
$ swift build
$ cd ../reducer
$ swift build

测试

在部署到 Hadoop 集群之前,您可以尝试在普通的命令行环境下进行测试(testdata.txt 文件是一个常规的文本文件,采用 ASCII 或 UTF-8 编码即可)。本工程目录下包括了可以用于测试的数据文件和脚本。

$ cat testdata.txt | ./mapper/.build/release/mapper | sort | ./reducer/.build/release/reducer

在 Hadoop 上运行程序

和上面的管道操作类似,试验成功后您可以尝试在一个真正的 Hadoop 集群上跑一下新编写的程序了:

$ mapred streaming -input /user/rockywei/input -output /user/rockywei/output -mapper /usr/local/bin/mapper -reducer /usr/local/bin/reducer

如果任务成功,您可以用下列命令在集群上查看输出:

$ hadoop fs -cat /user/rockywei/output/part-00000

详细说明

上述映射-总结程序的细节解释参考如下:

  • mapred streaming: 向 Hadoop 集群申请一个新的应用程序任务,采用流处理模式(即纯文本)。

  • -input /user/rockywei/input: 在 HADOOP HDFS 文件系统上的输入文件夹。典型情况是您需要向 Hadoop 管理员帮助您用 hadoop fs -mkdir 命令行建立文件,然后再通过命令将待处理数据上传到该文件夹:hadoop fs -put [cluster folder] /local/pathto/data.txt

  • -output /user/rockywei/output: 在 HADOOP HDFS 文件系统上的 输出文件夹。特别注意最后一个子目录/output 不应该创建,也就是说,只要您有/user/rockywei 就好,mapreduce 会自动创建这个输出文件夹。

  • -mapper /usr/local/bin/mapper: 我们刚编译好的映射器,您可以采用下列命令安装到服务器本地文件夹: swift build; sudo mv ./.build/release/mapper /usr/local/bin

  • -reducer /usr/local/bin/reducer: 我们刚编译好的总结器,您可以采用下列命令安装到服务器本地文件夹 swift build; sudo mv ./.build/release/reducer /usr/local/bin

下一步:Perfect Hadoop

Hadoop 是一个大数据生态系统 —— 包括 HDFS 高性能多冗余文件系统,Map-Reduce 文件处理程序和 YARN 集群资源管理系统 —— 构成了最基本的大数据系统。

如上所示,在 Hadoop 上编写流处理程序是一个很简单的工作,也不需要依赖于特定的软件体系。但是,除了编写流处理程序之外,您还可以使用 Perfect Hadoop 做更多更强大的事情——任务控制、大文件上下载、集群节点监控——现在所有这些工作都可以使用 Swift 语言实现了!

评论