nigoblog

技術系会社のCEOブログ~私的編~

ビッグデータ取り扱いまでの流れ3 自動化編

今回はhiveの動作を自動化させる方法に書いていきます。

前回の記事
ビッグデータ取り扱いまでの流れ2 解析編 - nigoblog
ではsshでEMRのmasterインスタンスにログインし、hiveの動作を行います。

基本的にはこの作業をrailsで自動化させます。(もっとうまいやり方があると思うが…)

というわけで早速やり方を見ていきます。

net/sshの利用

net/sshというgemを利用します。
Net::SSH、Net::SCP RubyでSSH/SCPコマンドを実行 [Ruby] - 酒と泪とRubyとRailsと
詳しい使い方はこちらの記事に。

このように利用します

require 'net/ssh'

Net::SSH.start(HOST, USER, opt) do |ssh|
    ssh.exec!("[何かしらのコマンド]") do |channel, stream, data|
      p data if stream == :stdout 
      p data if stream == :stderr
    end
end

ここでHOSTはEMR masterのpublic DNS
USERはhadoop, optは

opt = {
 keys: [公開鍵のパス]
 port: [sshのポート(普通は22)]
}

と定義しておきます。

感のいい方ならお気づきかもしれませんが、[何かしらコマンド]に

hive -e "[hiveのhql]"

とすることでhiveのコマンドを実行出来ます。

確認方法

テストコードを書ければ問題ないのですが、hiveを使うこともあってかなりしんどいです。
なので手動テストの方法を書いていきます。
先ほどのコードは

class Hoge < ApplicationController
  def fuga
     [hiveを実行する処理]
  end
end

のようにあるクラスのインスタンスメソッド内で行っているとします。

Railsのルートで

rails c

とするとirbが立ち上がります。
そこで

hoge = Hoge.new
hoge.fuga

とすると処理が走ります。
これで確認していきます。

(将来的にはhiveのテストコードを作りたい。hive_spec的な)

自動化

これはwheneverというgemを利用します。
wheneverの詳しい使い方はこちら
Wheneverは導入が超簡単なcrontab管理ライブラリGemです![Rails] - 酒と泪とRubyとRailsと
(本日2度目の引用です。いつもありがとうございます。(面識はありませんが笑))

gemをインストールすると
config/schedule.rbに

every '00 * * * *' do
  runner "Hoge.new.fuga"
end

とします。
なんとこれだけでオッケー。内部的にはcrontabの内容が書き換わっています。
確認には

crontab -e

で。
(cron系をやったことない人は何も知らずにこれをやると危険というかダメな気がするのでcronについて調べてみましょう)

というわけでhiveの処理を自動化しました。
あとはS3の内容を取得してRDS等、データベースに書き込む処理を同メソッド内に記述すればオッケー。

ここまででビッグデータの取り扱いまでの流れを書いていきました。
いずれ、得られたデータを解析するシステムについても書いていこうと思います。