Ruby Freaks Lounge
第30回 RubyとHadoopで分散処理 Hadoop Streamingで外部データを読み込む
前回のおさらい
第28回ではHadoop Streamingの仕組みについて説明しました。今回は,
実際に利用してみて困った (ハマった) こと
さて,
それで最初は
そもそもHadoop Streamingでは,
この問題が解決できれば,
- ※1
- Hadoop StreamingではなくHadoopを使えば,
JavaのAPIが用意されているため, そういったこともできます。
どうやって解決したか
調べてみてもこの問題を解決する情報を見つけられなかったため,
リスト1 外部データの読み込み
mapping_data = `hadoop dfs -cat s3://xxx/path/to/data`
Hadoopのコマンドでcatすることで,
なお,
具体的なコードの紹介
さて,
あくまで一つの例として挙げると,
リスト2 Hadoopで利用したコードの一例
#!/usr/bin/ruby
require 'csv';
# 外部データを読み込む
mapping_data = `hadoop dfs -cat s3://xxx/path/to/data`
ARGF.each do |line|
line.chomp!
csv = CSV.parse(line)
# 好きな処理を行う(結果はresultに入るとする)
end
# 必要であれば後処理を行う
result.each do |key, value|
# 最終的な処理,出力など
end
標準入力として,
データ処理の流れとしては,
どのくらい高速化したか
このようにして,
さらに,
- ※2
- もちろん,
どこまででも線形にスケールするわけではなく, ある一定のところで頭打ちにはなります。
まとめ
実際にデータ解析にHadoopを使ってみて,
Hadoopを利用するとスケールさせるのが非常に簡単であるため,
バックナンバー
Ruby Freaks Lounge
関連記事
- 「中高生国際Rubyプログラミングコンテスト2020 in Mitaka」の最終審査会進出者10組が決定,2021年3月6日オンラインで最終審査会
- プロのプログラマになるために必要なこと
- Vladimir Makarovさん「3x3を達成するには,極めて大きな改善が必要だ」Towards Ruby 3x3 performance 〜RubyKaigi 2017 基調講演 3日目
- まつもとゆきひろさん「Rubyはさまざまな言語やコミュニティから影響を受けデザインされている」The Many Faces of Module 〜RubyKaigi2017 基調講演 2日目
- 中田伸悦さん「Ruby開発者の日常」Making Ruby? ゆるふわRuby生活 〜RubyKaigi 2017 基調講演 1日目