SlideShare une entreprise Scribd logo
1  sur  31
Apache Drill で見る
Twitter の世界Tokyo Apache Drill Meetup
2015 年11 月12 日
渡部優
自己紹介
名前: 渡部優( Watanabe Masaru )
所属: 株式会社CyberAgent / AMoAd
職種: サーバサイドエンジニア
普段の業務
AMoAd
スマホ向けのアドネットワークサービス
RTB 配信サーバ、集計バッチの開発など
ユーザx メディアx 広告主
言語
Scala, Java, Python (, Ruby)
分析
Hadoop, Spark, BigQuery
Notebook : Zeppelin, Jupyter
Drill : 1 week ← New!
なぜTwitter ?
1. 知らない人はいなそう
2. それなりにデータが大きい
3. 分散モードでDrill してみたい
今回分析するデータ
Twitter REST API で取れるユーザプロファイル
※ツイート情報ではありません
収集時期 2013年10月中旬
アカウント数 約8 億
フォーマット Line-delimited JSON
データサイズ 約150 GB (GZip圧縮)
ユーザプロファイル?
Twitter REST API 1.1 'Get user/lookup
アカウント設定、ツイート数、フォワー数などなど
{
"name": "Twitter API",
"profile_sidebar_fill_color": "DDEEF6",
"profile_background_tile": false,
"profile_sidebar_border_color": "C0DEED",
"profile_image_url": "http://a0.twimg.com/profile_images/2284174872/7df3h38
"location": "San Francisco, CA",
"created_at": "Wed May 23 06:01:13 +0000 2007",
"follow_request_sent": false,
"id_str": "6253282",
"profile_link_color": "0084B4",
"is_translator": false,
"default_profile": true,
"favourites_count": 24,
"contributors_enabled": true,
"url": "http://dev.twitter.com",
"profile_image_url_https": "https://si0.twimg.com/profile_images/2284174872
Drill クラスタ
Apache Drill ver. 1.2
コア数 120 ( 12 x 10 nodes)
メモリ 40GB / node
ストレージ MapR FS
補足
今回はデモに合わせて必要なカラムだけに絞りました
フォーマット Line-delimited JSON
変更後 Parquet
データサイズ 約150 GB (GZip圧縮)
変更後 約43 GB (Snappy圧縮)
デモ用データ生成クエリ
出力フォーマットを変更し
ALTER SYSTEM SET `store.format` = 'parquet'
1クエリでJSONからParquetに変換できます
CREATE TABLE
dfs.tmp.`twitter/user_2013_demo`
AS (
SELECT
name,
location,
created_at,
favourites_count,
url,
utc_offset,
id,
listed_count,
lang,
followers_count,
protected,
geo_enabled,
time_zone,
デモ分散モードでは、Webからクエリを投げます
Apache Drill Cluster
本当に8 億アカウントあるの?
SELECT
COUNT( id ) AS ids
FROM
dfs.`tmp/twitter/user_2013_demo`
本当に8 億アカウントあるの?
結果 ids
857,645,612
ツイート数ランキング
SELECT
RANK() OVER ( ORDER BY statuses_count DESC ) AS ranking,
screen_name,
statuses_count
FROM
dfs.`tmp/twitter/user_2013_demo`
WHERE
--statuses_count > 1E4 -- 90 sec
--statuses_count > 1E5 -- 60 sec
statuses_count > 1E6 -- 40 sec
ORDER BY
ranking
LIMIT 1000
ツイート数ランキング
rank screen tweets
1 YOUGAKUDAN_00 37,300,610
2 RS_ian 10,675,618
3 NotFoundProfile 8,156,645
4 ___Scc____ 7,083,202
5 ____S__A____ 7,099,741
ツイート速度ランキング
SELECT
RANK() OVER ( ORDER BY tweets_per_hour DESC ) AS ranking,
*
FROM (
SELECT
screen_name,
statuses_count / (
UNIX_TIMESTAMP( '2013-10-25 00:00:00' ) -
UNIX_TIMESTAMP( created_at, 'EEE MMM dd HH:mm:ss Z yyyy' )
) * 60 * 60 AS tweets_per_hour,
statuses_count,
created_at
FROM
dfs.`tmp/twitter/user_2013_demo`
WHERE
statuses_count > 2E6 -- 60 sec
)
ツイート速度ランキング
rank screen tweets (/1h) tweets
1 YOUGAKUDAN_00 1008.8 37,300,610
2 RS_ian 645.7 10,675,618
3 NotFoundProfile 544.6 8,156,645
4 ___Scc____ 444.2 7,083,202
5 ____S__A____ 374.3 7,099,741
ユーザ数の多い地域ランキング
location(任意テキスト) の代わりにtime_zoneで算
出
SELECT
RANK() OVER ( ORDER BY users DESC ) AS ranking,
*
FROM (
SELECT
time_zone, -- not use 'location'
COUNT(1) AS users
FROM
dfs.`tmp/twitter/user_2013_demo`
WHERE
NOT (time_zone = '') -- 30 sec
GROUP BY
time_zone )
ORDER BY
ranking
LIMIT 1000
rank time_zone users
1 Central Time (US & Canada) 15,198,713
2 Eastern Time (US & Canada) 14,932,129
3 Pacific Time (US & Canada) 13,234,999
4 Tokyo 11,972,200
5 Hawaii 9,652,707
6 Brasilia 9,350,127
7 Quito 8,553,937
8 Santiago 6,684,055
9 Greenland 6,330,616
10 Bangkok 6,251,371
さらにアカウント作成日を考慮す
れば
アカウント作成日x 地域別ユーザ増加数
参考: 2009: ハドソン川飛行機事故
http://jp.techcrunch.com/2009/01/16/20090115plane-
crashes-in-hudson-first-pictures-on-flickr-tumblr-twitpic
フォロワー数ランキング
SELECT
RANK() OVER ( ORDER BY followers_count DESC ) AS ranking,
screen_name,
followers_count
FROM
dfs.`tmp/twitter/user_2013_demo`
WHERE
followers_count > 1E5 -- 40 sec
ORDER BY
ranking
LIMIT 1000
rank screen followers
1 justinbieber 44,608,861
2 katyperry 42,862,721
3 ladygaga 40,127,107
4 BarackObama 36,678,153
5 taylorswift13 34,121,718
6 YouTube 33,581,290
7 britneyspears 31,940,642
8 rihanna 31,666,558
9 instagram 26,664,278
10 jtimberlake 25,837,905
フォロー数ランキング
SELECT
RANK() OVER ( ORDER BY friends_count DESC ) AS ranking,
screen_name,
friends_count
FROM
dfs.`tmp/twitter/user_2013_demo`
WHERE
friends_count > 1E5 -- 40 sec
ORDER BY
ranking
LIMIT 1000
rank screen follows
1 ArabicBest 2,122,665
2 TheArabHash 2,035,893
3 Asr3Follow 1,896,414
4 ArabicScience 1,436,979
5 STOP_Q80 1,428,028
6 VenGalL 1,395,800
7 hootsuite 1,354,751
8 7madms 1,327,781
9 3LCHBOSAHAM 1,252,964
10 Do3av 1,165,899
有名人の影響力を調べる
仮) フォロワー数10,000人以上を有名人とする
SELECT
SUM( followers_count ) AS total_followers,
SUM( CASE WHEN followers_count > 10000 THEN followers_count ELSE 0
SUM( CASE WHEN followers_count <= 10000 THEN followers_count ELSE 0
COUNT( 1 ) AS total_users,
SUM( CASE WHEN followers_count > 10000 THEN 1 END ) AS celb_users,
SUM( CASE WHEN followers_count <= 10000 THEN 1 ELSE 0 END ) AS normal_users
FROM
dfs.`tmp/twitter/user_2013_demo`
有名人の影響力を調べる
count percent
total_followers 52,002,443,928 100.0 %
celb_followers 21,410,243,998 41.2 %
normal_followers 30,592,199,930 58.8 %
count percent
total_users 857,645,612 100.0 %
celb_users 381,567 4.44 %
normal_users 857,264,045 95.56 %
"The rich get richer and the poor get poorer"
まとめ
Apache Drill でTwitter を見渡した
結果
1. Drill 初心者でも簡単に分散環境でクエリが投げれた
2. 様々なデータソースへのアドホッククエリが本当にお
手軽
3. 大きいデータに対するクエリは少し注意
Thank you!
(機会があれば、ツイート分析とかもやってみたいです
ね)

Contenu connexe

Tendances

Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
moai kids
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係
moai kids
 
Dockerの利用事例
Dockerの利用事例Dockerの利用事例
Dockerの利用事例
maebashi
 
Stream processing and Norikra
Stream processing and NorikraStream processing and Norikra
Stream processing and Norikra
SATOSHI TAGOMORI
 

Tendances (20)

ROMA のアーキテクチャと社内事例
ROMA のアーキテクチャと社内事例ROMA のアーキテクチャと社内事例
ROMA のアーキテクチャと社内事例
 
リアルタイム処理エンジン Gearpumpの紹介
リアルタイム処理エンジンGearpumpの紹介リアルタイム処理エンジンGearpumpの紹介
リアルタイム処理エンジン Gearpumpの紹介
 
Vespa 機能紹介 #yjmu
Vespa 機能紹介 #yjmuVespa 機能紹介 #yjmu
Vespa 機能紹介 #yjmu
 
Treasure Dataを支える技術 - MessagePack編
Treasure Dataを支える技術 - MessagePack編Treasure Dataを支える技術 - MessagePack編
Treasure Dataを支える技術 - MessagePack編
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編
 
20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.Japan
 
EmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについてEmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについて
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
 
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
 
ISUCON夏期講習2015_2 実践編
ISUCON夏期講習2015_2 実践編ISUCON夏期講習2015_2 実践編
ISUCON夏期講習2015_2 実践編
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係
 
Dockerの利用事例
Dockerの利用事例Dockerの利用事例
Dockerの利用事例
 
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー) #jpug
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー)  #jpugAmazon RDS for PostgreSQL ( JPUG 2014夏セミナー)  #jpug
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー) #jpug
 
[Cloud OnAir] Google Kubernetes Engine と Cloud Spanner の紹介 2020 年 1 月 30 日放送
 [Cloud OnAir] Google Kubernetes Engine と Cloud Spanner の紹介 2020 年 1 月 30 日放送 [Cloud OnAir] Google Kubernetes Engine と Cloud Spanner の紹介 2020 年 1 月 30 日放送
[Cloud OnAir] Google Kubernetes Engine と Cloud Spanner の紹介 2020 年 1 月 30 日放送
 
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
Kafka・Storm・ZooKeeperの認証と認可について #kafkajpKafka・Storm・ZooKeeperの認証と認可について #kafkajp
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
 
Stream processing and Norikra
Stream processing and NorikraStream processing and Norikra
Stream processing and Norikra
 

En vedette

En vedette (12)

F.O.Xを支える技術
F.O.Xを支える技術F.O.Xを支える技術
F.O.Xを支える技術
 
ご注文はRxですか? -RxSwiftを実際に導入してみた件-
ご注文はRxですか? -RxSwiftを実際に導入してみた件-ご注文はRxですか? -RxSwiftを実際に導入してみた件-
ご注文はRxですか? -RxSwiftを実際に導入してみた件-
 
Ironicを運用して半年が経過しました - OpenStack最新情報セミナー(2016年7月)
Ironicを運用して半年が経過しました  - OpenStack最新情報セミナー(2016年7月)Ironicを運用して半年が経過しました  - OpenStack最新情報セミナー(2016年7月)
Ironicを運用して半年が経過しました - OpenStack最新情報セミナー(2016年7月)
 
サイバーエージェント様 発表「OpenStackのNWと物理の話」
サイバーエージェント様 発表「OpenStackのNWと物理の話」サイバーエージェント様 発表「OpenStackのNWと物理の話」
サイバーエージェント様 発表「OpenStackのNWと物理の話」
 
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法
 
Atomic Design powered by React @ AbemaTV
Atomic Design powered by React @ AbemaTVAtomic Design powered by React @ AbemaTV
Atomic Design powered by React @ AbemaTV
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
 
Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01
 
ポコロンダンジョンズを彩るアニメーションノウハウ
ポコロンダンジョンズを彩るアニメーションノウハウポコロンダンジョンズを彩るアニメーションノウハウ
ポコロンダンジョンズを彩るアニメーションノウハウ
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
レスポンシブWebデザインでうまくやるための考え方
レスポンシブWebデザインでうまくやるための考え方レスポンシブWebデザインでうまくやるための考え方
レスポンシブWebデザインでうまくやるための考え方
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 

Similaire à Apache Drill で見る Twitter の世界

データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
Takahiro Inoue
 
Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!
Takahiro Inoue
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
Yasuyuki Sugai
 

Similaire à Apache Drill で見る Twitter の世界 (20)

クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccamp
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤
 
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようGoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
 
認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
 
高速処理と高信頼性を両立し、ペタバイト級の多種大量データを蓄積する、ビッグデータ/ IoT時代のデータベースとは??
高速処理と高信頼性を両立し、ペタバイト級の多種大量データを蓄積する、ビッグデータ/ IoT時代のデータベースとは??高速処理と高信頼性を両立し、ペタバイト級の多種大量データを蓄積する、ビッグデータ/ IoT時代のデータベースとは??
高速処理と高信頼性を両立し、ペタバイト級の多種大量データを蓄積する、ビッグデータ/ IoT時代のデータベースとは??
 
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービス
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
 
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
 
Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!
 
Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Python
 
Storm×couchbase serverで作るリアルタイム解析基盤
Storm×couchbase serverで作るリアルタイム解析基盤Storm×couchbase serverで作るリアルタイム解析基盤
Storm×couchbase serverで作るリアルタイム解析基盤
 
Google Cloud Platform 概要
Google Cloud Platform 概要Google Cloud Platform 概要
Google Cloud Platform 概要
 
QoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentQoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/Eloquent
 
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
 
LoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンLoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオン
 

Apache Drill で見る Twitter の世界