POWER ON · SELF TEST · PASS
CH1
PWR

支持Ruby1.9的MRToolkit

25-MAR-2011↤ XUWENHAO.COM
POST · 2011 · LOG

虽然最近的工作整天用Java写各类数据处理代码,但是去年大半年用惯了Ruby的我每每要写个测试或者临时计算的MapReduce都觉得真是太麻烦了,于是又念叨起Ruby的好来了。

先看了看利用Hadoop Streaming和Ruby来写MapReduce,发现还是有些麻烦,一是mapper和reducer要分开两个文件,二是每个任务都要重复写从stdin读取数据解析,以及输出的代码,一点不符合DRY原则,于是就找到了mrtoolkit,然后一连串杯具开始发生了。

麻烦LJ同学先给所有的机器装了Ruby1.9,然后一跑,杯具地发现没跑起来,然后发现部分代码不兼容1.9……好吧,反正没多少源代码,改之,再跑,发现虽然每台机器都下载了mrtoolkit而且都设好了RUBYLIB但还是没能成功require mrtoolkit;于是,上github抄了个别人更改的mrtoolkit版本的gemspec和Rakefile,然后打包成gem,然后安装,于是MapReduce任务在各个node上跑起来了,但是,有一部分失败了,杯具地发现Ruby1.9开始对于字符串encoding有了很多限制,使用split通过正则分割字符串的时候居然还检查整个字符串的encoding的合法性,而我们要处理的日志里会存在GBK和UTF-8混在一行编码的可能性……试了好多种方法都不行,只好再跑到邮件组上去问,得高人指点先把字符串转成BINARY的encoding进行分割,然后再转回来,终于……能用了。

所以现在就有了这个支持Ruby1.9的mrtoolkit的版本啦,首个release包含以下变更:

  • 支持Ruby1.9
  • 将hadoop streaming中deprecated的-jobconf参数改成了-D
  • 单行的文本编码可以是混合编码的不合法的Ruby1.9的字符串
  • 可以打包成gem安装(抄袭自jashmenn的版本)

还准备做个小改动是默认output目录存在时输出警告,并且不提交任务不删除输出目录,直接删除现有的输出目录这种方法太容易搞出事情来了。

originally posted at medium.com/@xuwenhao/%E6%94%AF%E6%8C%81ruby1-...

NAVNEXT ON THE BENCHDATE
PREV 建议的程序员学习LDA算法的步骤 2011
NEXT 入手了个Kindle 2011
THIS BOARD HAS BEEN TESTED.
IT RUNS.
Engineer wouldn't write that last line.
He'd just put the board on your desk and walk away.
So - that's what this is.
XUWENHAO.COM  ◆  REV 4.7  ◆  MADE IN SHANGHAI  ◆  2026