#blog2navi()
*ニコニコデータビューアー向けテーブルスキーマ [#o0a0d56a]
ニコニコデータセットが公開された。コメントデータが約24億件。動画情報が約800万件ある。動画情報はMySQLに入るが、コメントデータはさすがに入りきらない。いきおいコメントデータは、hadoop等を用いた分散環境での解析が主になる。
しかし、いまだにhadoopを使うような分散環境を構築するのは素人には手が余る。何かを分析しようとしても、分析するための事前準備に多くの手間を取られる。
私は思いついた。それなら、環境構築の部分はこちらでやってWebUIを通してデータ解析に注力してもらうシステムを作れば良いのでは・・・・。
hadoopの上にHiveと言うSQL-Likeな問い合わせができるシステムがある。それを使うと比較的簡単(SQLを書くだけで)にデータの取得ができる。
つまり、Hive->Hadoop->ニコニコ動画のコメント情報を解析->結果出力の部分を詰め込んだ環境を作れば良いのでは。
と思って作ったのが[[これ>http://nicodata.info/]].ニコニコデータセットを手軽に解析できるwebアプリだ。
&ref(./WS000074.JPG,30%);
手始めに、上に書いている
SELECT count(*) FROM nicodata.comment_data_sampling100 WHERE comment_string LIKE "%wwwwww%"
を下のテキストエリアに貼り付けて、その下のexecuteボタンを押して見てほしい。
しばらくする(5分くらい待つ)と、Query Status:executedと言う表示が出てくるはずだ。
&ref(./WS000078.JPG,30%);
これが出ると言うことはすなわち、解析が終わったと言うことだ。ちなみに上のSQL文は、wwwwwを含むコメントは何個あるか数えるSQLだ。
これを使うことで、色々複雑な前準備無しに手軽にニコニコ動画の解析ができる。
バックエンドは、AmazonEC2を使っているためお金がかかる。当面は、土日だけ立ちあげて、平日は落としておこうと思っている。
SELECTしか使えないようにしているので、初心者がデータを壊すことはありません。安心して使ってください。
** 何故作ったかの説明 [#i068916f]
このスライドに何故作ったの説明がある。
http://www.slideshare.net/shibacow/n-24673260
スライド中あった、日本語が通らない問題は現在解決されている。
** 仕様 [#x4a087ac]
- SELECTは使えます。
- INSERTは使えません。
- ALTERは使えません。
- そのため初心者がデータを壊すことはありませんので安心して使ってください。
** バックエンド [#d8f024d7]
- AmazonEC2-ElasticMapReduce Master-m1.mediam,Slave-m1.large x 4
- [[Shib>https://github.com/tagomoris/shib]](Simple Hive Interface) by tagomoris
* テーブル情報 [#effb0691]
** スキーマ - nicodata [#w910500b]
** テーブルサンプリング [#gf21e395]
全数のデータが入ったテーブルの他に、サンプリングデータを用意した。
10分の位置のレコードを入れたテーブル(sm数値の部分で、10で割り切れるもののみ格納)と100分の1レコードを入れたテーブル(sm数値の部分の100で割り切れるもののみ格納)を用意した。なるだけサンプリングデータで解析してほしい。
全数で検査をする前に、100分の一、10分の一で正しく動くか試してほしい。全数検査はよほどのことが無い限りやら無い方向で。
** テーブル(動画情報) [#u30f7878]
- nicodata.videoinfo_sampling100 (100分の一サンプリング)(八万)
- nicodata.videoinfo_sampling10 (10分の一サンプリング)(八十万)
- nicodata.videoinfo (全数)(八百万)
*** テーブルスキーマ [#m76f1f22]
|カラム名|型|説明|h
|smid| string|動画ID|
|thread_id| string|スレッドID(コメントID)|
|title|string|動画タイトル|
|description|string|動画説明文|
|thumbnail_url|string|サムネイル画像へのURL|
|upload_time|string|投稿日(ISO 8601 形式) 2007-03-06T00:33:00+09:00|
|length|int|動画再生長 (秒数)|
|movie_type|string|動画フォーマット|
|size_high|int|高画質動画のファイルサイズ (byte)|
|size_low|int|低画質動画のファイルサイズ (byte)|
|view_counter|int|動画の再生数|
|comment_counter|int|コメント数|
|mylist_counter|int|マイリスト登録数|
|last_res_body|string|最近のコメントのサマリ|
** テーブル(タグ情報) [#i2bfe700]
- nicodata.tags_sampling100(100分の1サンプリング)(40万)
- nicodata.tags_sampling10(10分の1サンプリング)(400万)
- nicodata.tags (4千万)
*** テーブルスキーマ [#lf6f3c5e]
|カラム名|型|説明|h
|smid|string|動画ID(smid)|
|locked|tinyint|ロックされているか?(1 or 0)|
|category|tinyint|カテゴリータグか(1 or 0)|
|tag|string|タグ名(初音ミク)とか|
** テーブル(コメント情報) [#u51a5dff]
- nicodata.comment_data_sampling100(100分の1サンプリング)(二千万)
- nicodata.comment_data_sampling10(10分の1サンプリング)(二億四千万)
- nicodata.comment_data (24億件)
*** テーブルスキーマ [#la658c13]
|カラム名|型|説明|h
|smid|string|動画ID(smid)|
|date|int|コメント投稿日時 (UNIX秒)|
|vpos|int|コメント書き込み再生位置 (1/100秒)|
|no|int|コメント番号|
|command|string|コマンド(184 sita等)|
|comment_string|string|コメント本文|
- 注意
コメントテーブルのdateを参照する場合には、`date`とした方が良いようです。hiveが自分のコマンドのdateと区別ができず、エラーになります。
SELECT count(`date`) FROM nicodata.comment_data_sampling100 WHERE `date` > 1341994948
のようにした方が良いです。
RIGHT:Category: [[[ニコニコ動画 hadoop>日記/Category/ニコニコ動画 hadoop]]] - 03:01:45
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()