個人利用から大規模開発までConoHaで始めるクラウド開発入門

第4回 実際の業務開発におけるConoHaの活用例

この記事を読むのに必要な時間:およそ 3 分

3.spark-shellのYARNクライアントモード

spark-shellをYARNクライアントモードで起動し,シェルで実行するSparkの処理をHadoopクラスタで分散させます。

[hive@slave_node1]$ spark-shell --master yarn-client
scala>

 Hiveテーブルを扱うため,Hiveのパッケージをインポート
import org.apache.spark.sql.hive.HiveContext

SparkContextでspark-shellを起動すると,scは自動的に作られる
val hiveCtx = new HiveContext(sc)

HiveQLでSQLを実行
val rows = hiveCtx.sql("select uid, url from noda_conoha_sd4.log_data")

重複行を削除
val rdd = rows.distinct.rdd

map形式に変換 (ユーザID => ページURL)
val pairs = rdd.map( u => (u{0}.asInstanceOf[String], u{1}.asInstanceOf[String]))

ユーザIDをキーにデータを集約する (ユーザID => ページ  URL1, ページURL2)
val group = pairs.groupByKey()

データを10個取り出す
group.take(10)

結果は次のようになります。

Array[(String, Iterable[String])] =
Array((uid_203708,CompactBuffer(http://maru/page/1909,
http://maru/page/4316),(uid_66952,CompactBuffer(http://maru/page/3593,http://maru/page/3497),
 ……略……

イメージ保存機能を利用したサーバのチューニング

今回は,ConoHaが持つイメージ保存機能の活用方法も紹介しておきます。ここで取り上げるのは,Webサーバのチューニングの事例です。

Nginxの設定(nginx.conf)を変更してチューニングをしたかったのですが,あいにくほかのメンバーが試験で使用中のため,気軽にWebサーバの設定を変更できない状況でした(設定の変更によってNginxの動作に不具合が生じ,バックエンドの処理で試験データが破損するのを避けたかったからです)⁠そこで,ConoHaのイメージ保存機能を使ってWebサーバのインスタンスをコピーし,新たに検証用のWebサーバを構築してチューニングをしました。

図2は,そのチューニングの手順の全体像を示したものです。以下,順を追って説明します。

図2 チューニング全体のイメージ図

図2 チューニング全体のイメージ図

1.イメージを保存する

ConoHaのインスタンスは,起動中はイメージを保存できないため,いったんWEB1を停止してからイメージを保存します。イメージのネームタグは「WEB1_COPY」とします図3)⁠

図3 インスタンスのイメージの作成

図3 インスタンスのイメージの作成

2.イメージから新規インスタンスを構築する

WEB1を再起動し,試験で使用可能な状態に戻します。次に,メニューの「サーバー追加」からイメージタイプ「保存イメージ」を選択し,ネームタグから「WEB1_COPY」を選択して,新規インスタンスをWEB3として1台構築します図4)⁠

図4 イメージを元にインスタンスを構築

図4 イメージを元にインスタンスを構築

3.Nginxをチューニングする

WEB3単体でNginxをチューニングします。httperfなどでHTTPのパフォーマンスを見ながら,nginx.confの最適値を算出します。

[noda@gateway]# httperf --server=WEB3のIP --port=80 --uri=/index.html --rate 5000 --num-conn 250000 --num-call 5 --timeout 5
4.チューニングしたインスタンスをコピーする

WEB3のチューニングが終わったらWEB3を停止します。WEB3の保存イメージを作成し,そのイメージを使用してさらにインスタンスWEB4を1台構築します。ロードバランサ経由でのHTTPアクセスの動作を確認するため,ロードバランサ2を追加します。

ロードバランサ2をWEB3とWEB4に接続し,ロードバランサ経由でのチューニングと動作確認を行います。結果に問題がなければ,夜間などWebインスタンスが使用されていないときに,ロードバランサ1に紐付けているWEB1とWEB2を,それぞれWEB3とWEB4に変更します。インスタンスを残しておくと料金が発生するため,WEB1,WEB2,ロードバランサ2は削除します注1)⁠

注1)
ロードバランサ1のIPにはドメインを紐付けているため,ロードバランサ1を残すことにしました。

まとめ

今回は,実際の業務でConoHaを使った事例を紹介しました。月額7万円以下でSparkも使えるHadoopクラスタが構築できるのは魅力です。また,イメージ保存機能を利用したサーバのチューニングについてイメージをつかんでいただけたら幸いです。皆さんもぜひ,業務での開発にConoHaを活かしてください。

著者プロフィール

野田純一(のだじゅんいち)

GMOインターネット(株)次世代システム研究室 アーキテクト 兼 GMOアドパートナーズ(株)グループCTO室 アーキテクト

アルファシステムズで大規模業務開発を長年行い,DeNAでのソーシャルゲームフレームワーク開発等を経て,2014年よりGMOインターネットに参加。

GMOインターネットではHadoopを使ったアドテク関連開発を主に行う(DMPやリコメンドエンジン等)。GMOアドパートナーズではエンジニアが成長していくための向上施策を行っている。ConoHa(たん)には個人的な興味もありヘビーユーザーとしてConoHa開発チームに協力している。またQiitaに頻繁にConoHa関連記事を上げており今のところはConoHaタグではトップストックユーザーである。

最近,本格的に個人的なOSS活動を開始。今後「秋葉原IT戦略研究所」名義でオープンソースカンファレンスで出展,セミナーをする予定。

趣味は,秋葉原周辺の喫茶店でドヤリング,アニメとITの融合を促す活動など。

Twitter(@n428dev):https://twitter.com/n428dev
GitHub:https://github.com/AKB428
Qiita:http://qiita.com/AKB428
Slideshare:http://www.slideshare.net/JunichiNoda
はてなブログ:http://akb428.hatenablog.com/
秋葉原IT戦略研究所:http://akibalab.info/

GMOインターネット:Webサイト:https://www.gmo.jp/
次世代システム研究室 エンジニアブログ:http://recruit.gmo.jp/engineer/jisedai/blog/