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