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

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

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

ConoHaでお手軽Hadoop&Spark開発

筆者が所属している次世代システム研究室では,Hadoopを活用したビッグデータシステムを開発しています。以前の案件では,弊社のサービスであるGMOアプリクラウドを使用していましたが,新規案件では新しくなったConoHaを使用し,Hadoopクラスタの構築と周辺のアプリケーション開発を行いました。以下,その設計と料金の具体的な事例を紹介したいと思います。

ConoHaで構築するHadoopクラスタのインスタンス構成と料金

試験などのための開発環境として,図1に示す構成を設計しました。Hadoopディストリビューションは,Hortonworks社のHortonworks Data Platform(HDP)2.3を使用しています。HDPにあらかじめ用意されているAmbari,YARN,HBase,Hive,SparkなどのHadoopエコシステムをフル活用しています表1)⁠

図1 インスタンスの図

図1 インスタンスの図

表1 HDPに用意されているHadoopエコシステム

AmbariHDPのHadoop管理システム
YARNHadoopクラスタ上で動作するソフトウェアのスケジュール管理,リソース管理を行う
HBaseGoogleのBigTableをモデルとした列指向の分散データベース
HiveHadoopの上に構築されたデータベース。HiveQLというSQLに似たクエリを使用できる
Sparkインメモリで分散処理をするソフトウェア。リアルタイムストリーミング処理が行えるSparkStreaming,SQLが実行できるSpark SQLがある

リージョンは「日本」⁠OSはゲートウェイがCentOS 7.1,それ以外はCentOS 6.6を使用します。Hadoopのノード系インスタンスにはメモリ8GBは必要です。インスタンス14台,ロードバランサ1台で,合計67,640円でHadoopクラスタを使用したシステムがConoHaで構築できます表2)⁠Hadoopクラスタを使ったサービスを月額7万以下で作れるのは割安だと思います。ConoHaは転送料金など使用量に関する追加料金は発生しないので,この値段が固定の月額料金となります。

表2 Hadoopクラスタを使用したシステムの見積り料金

マシン名役割CPUメモリSSD月額料金
gatewayインターネットから接続できるSSHサーバ2コア1GB50GB900円
ci_ambariHDPのHadoop管理システムAmbariとデプロイサーバ4コア4GB50GB3,420円
master_node1~3Hadoopのマスタノード6コア8GB50GB6,670円×3
slave_node1~3Hadoopのスレーブノード6コア8GB550GB11,170円×3
dev-web1,2Nginxサーバ2コア1GB50GB900円×2
dev-ap1,2HTTPアプリケーションサーバ3コア2GB50GB1,750円×2
dev-batch1,2集計バッチサーバ(spark-submit)3コア2GB50GB1,750円×2
ロードバランサ1台Webサーバで使用1,000円
合計67,640円

システム構築作業の際にインスタンスを作って壊すことも何度かはあるため,プラス数千円が予算を通す際の値段になるでしょう。請求は1時間単位で,明細書に詳細に記載されます。

HadoopクラスタでのSparkの活用

構築したクラスタで,spark-shellのYARNクライアントモードを試してみます(YARNを使ってSparkの処理をクラスタで分散させます)⁠レコメンドの元ネタとなるデータとしてWebページのアクセスログを解析し,⁠ユーザごとの閲覧Webページの一覧」を算出するためSpark SQLを利用します。

1.ダミーデータの作成(1,000万レコード)

データベーステーブルの元となるアクセスログのダミーデータ(TSV)をPerlで作成しますリスト1)⁠

リスト1 ダミーデータを作成するPerlスクリプト

#!/usr/bin/perl
for ($i=0; $i < $ARGV[0]; $i++) {
 $user_id = "uid_".int(rand ($ARGV[1]));
 $page_url = "http://maru/page/".int(rand $ARGV[2]);
 print $user_id."\t".$page_url."\n";
}

あるサイトに1万ページのURLがあり,そのサイトにアクセスした100万人のユーザが合計1,000万アクセスしたと仮定し,ログ(TSV)を生成します。

[hive@slave_node1]$./dummy.pl 10000000 1000000 10000 > dummy10m.tsv

生成したログデータは次のようなものです。

uid_1    http://maru/page/1
uid_1    http://maru/page/2
uid_2    http://maru/page/3
uid_3    http://maru/page/4
uid_3    http://maru/page/5

このデータをリスト2のようなデータ形式にSpark SQLで変換してみます。

リスト2 Spark SQLで変換したデータ

uid_1    http://maru/page/1    http://maru/page/2
uid_2    http://maru/page/3
uid_3    http://maru/page/4    http://maru/page/5

2.テーブルにデータ(TSV)を登録

spark-sqlを起動し,データベースとテーブルを作成します。

spark-sql>
create database noda_conoha_sd4;
use noda_conoha_sd4;

CREATE TABLE raw_log_data (
  uid STRING,
  url STRING
)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '\t'
  LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

CREATE TABLE log_data (
  uid STRING,
  url STRING
)
STORED AS ORC tblproperties ("orc.compress"="SNAPPY");

TSVファイルをTEXTFILEフォーマットテーブルにロードしたあと,処理が最適化されたORCフォーマットテーブルに変換します。

spark-sql>
LOAD DATA LOCAL INPATH "./dummy10m.tsv" into table raw_log_data;
INSERT OVERWRITE TABLE log_data select uid, url from raw_log_data;

select * from log_data limit 10;
uid_387616	http://maru/page/2197
uid_734748	http://maru/page/6714
uid_982660	http://maru/page/6854

著者プロフィール

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

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/

コメント

コメントの記入