JRubyとCRuby: 処理量を変えてみた
JRubyがCRubyに比べて遅すぎる件について - なぜか数学者にはワイン好きが多い
Hadoop Streamingを通さない時はJRubyの方が速かったので,ひょっとしたら処理量が多い時はJRubyがCRubyに(Hadoop Streamingでも)勝つんじゃないかと思って,喰わせるログの量を増やしてみました.
まず,元の状態.
喰わせるログの量は,だいたい非圧縮で8ギガバイトです.Hadoopに仕事をさせるには,少なめな感じです.
その状態で,
CRuby: 6分23秒
JRuby: 7分57秒
というのが前回のHadoop Streamingの結果です.
処理量を増やすために,ログを2倍突っ込んでみました!
[hadoop@hadoop_client$ time hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.0.0-cdh4.4.0.jar -file log_access.rb -mapper '/usr/local/jruby/bin/jruby log_access.rb' -input input/access_log input/access_log -output output 14/01/20 15:13:14 INFO mapred.FileInputFormat: Total input paths to process : 2 14/01/20 15:13:14 INFO mapreduce.JobSubmitter: number of splits:266 real 14m56.785s user 0m8.644s sys 0m0.346s [hadoop@hadoop_client$ time hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.0.0-cdh4.4.0.jar -file log_access.rb -mapper '/usr/local/bin/ruby log_access.rb' -input input/access_log input/access_log -output output 14/01/20 16:05:46 INFO mapred.FileInputFormat: Total input paths to process : 2 14/01/20 16:05:46 INFO mapreduce.JobSubmitter: number of splits:266 real 12m16.612s user 0m8.198s sys 0m0.280s
結果,処理するログファイルの量を倍にしたところ,CRubyは処理時間は6分23秒→12分16秒,JRubyは7分57秒→14分56秒でした.
割合で言うと,CRubyは1.9倍,JRubyは1.88倍で,JRubyの方が,少しだけデータが2倍になっても処理時間が2倍にはなってない的な...いや微妙過ぎる...文字列のパースについてはCRubyが速すぎるのだろうか...