[db tech showcase tokyo 2014] b22: hadoop rush!!...
DESCRIPTION
あなたのHadoopクラスタに貯まっているデータ、何を使って加工してますか? MapReduce? 鉄板ですね。遅いけど。Impala? Spark? お目が高い。でも他にもあるんですよ。速く、お手軽なものが。今回はそれを使ってバリバリデータの加工・分析をしちゃいます。合言葉はRush!!TRANSCRIPT
Hadoop Rush!! HDFSからデータを自在に取得、 加工するにはどうする?
BI, AnalyticsとしてのHadoopの世界
RDBMS (Columnar)
Serv
er
Mult
icore
速く!無駄なく!簡単に! - Actian DataFlow
Dataflow Apps
Scale Up and Out
Clu
ster
Hadoop
Clu
ster
Actian DataFlow
Applications
Actian DataFlow Engine
Connect
Databases
Log and Flat Files
Text
Google BigQuery
Actian Vector
HDFS/HBASE
Actian Matrix
Prepare
Transform
Profile
Match-Merge
Standardize
Optimize
Multicore Parallelism
Auto-Scale Up/Out
Code-Free Parallelism
Native Hadoop
No MapReduce
Analyze
Discovery
Association Rules
Classifiers
Regressions
Clustering
Connect Prepare Analyze
Optimize
• なんでもできるぜ! - ETLから分析まで • 自動でスケール! - マルチコアからクラスタノードまで • データはどこでも! - HDFS, RDBMS, BigQuery • インプリ簡単! - GUIでコーディングレス開発 • 管理も簡単! - Web管理ツール
GUIでちょちょいと – DataFlow Plugin to KNIME
GUIじゃなくても使えるぜ
Quality data
Actionable analytics
Large volumes of data
Dataflow Modules
Dataflow ETL
Dataflow DQ
Graphical
Composer
High Performance Data Provisioning &
Analytics
User-defined Modules
Data preparation
Analytics
Dataflow Core
Prep Lib
User-defined
Libraries
Dataflow Core
Analytics Lib
Actian Dataflow SDK
…
Actian Dataflow Engine
作りこむには?… Java or RushScript!!
作った処理は自動でパラレルに
Reader FilterRows DeriveFields Group(partial)
Reader FilterRows DeriveFields Group(partial)
Reader FilterRows DeriveFields Group(partial)
Reader FilterRows DeriveFields Group(partial)
Repartition Group(final) Writer
Repartition Group(final) Writer
Repartition Group(final) Writer
Repartition Group(final) Writer
Phase 1 Phase 2
作成した処理を
パラレルな
実行計画に変換
DataFlowを構成する各プロセス
Cluster
Manager Node
Manager
Client Executor
Job投入
リソース配置
(HDFS)
データ
実行
Perf
Monitor
Web管理ツール
Master Node (NameNode / JobTracker or ResourceManager)
Slave Nodes (DataNode / TaskTracker or NodeManager)
DataFlow Designer
Java
JavaScript
Data
ジョブ・リソースはWebから管理
YARN上でのリソース管理もOK
DataFlow vs Spark
• No MapReduceで高速なデータ加工・分析をクラスタで実行可能 • 特定の処理に特化しない汎用フレームワーク • YARNでリソース管理可能
• プロプライエタリ • Pipeline parallelismパラダイム • コーディングレス • 並列処理の知識は不要
• オープンソース • In memoryパラダイム • 基本はScala • 並列処理の知識がある程度必要
データアナリスト向け プログラマ向け ※個人の感想です。
DEMO!!!
DEMO1: HDFS上のデータをロードしたい!
• クラスタ同士のロードって…マスタノード経由でロードなんてしないよね?すごく遅くなるだろうし。
• スキーマの指定が面倒だなあ。 • ファイルが分かれちゃってるんだよなあ。 • 特定の年のデータだけ欲しいんだけど。
[datarush@iq121 ~]$ hadoop fs -ls /tpch/lineitem/ Found 6 items -rw-r--r-- 2 root supergroup 3916511725 2014-09-19 14:00 /tpch/lineitem/lineitem.tbl.1 -rw-r--r-- 2 root supergroup 3925859331 2014-09-19 14:01 /tpch/lineitem/lineitem.tbl.2 -rw-r--r-- 2 root supergroup 3927782376 2014-09-19 14:01 /tpch/lineitem/lineitem.tbl.3 -rw-r--r-- 2 root supergroup 3948580214 2014-09-19 14:02 /tpch/lineitem/lineitem.tbl.4 -rw-r--r-- 2 root supergroup 3957770475 2014-09-19 14:03 /tpch/lineitem/lineitem.tbl.5 -rw-r--r-- 2 root supergroup 3957995960 2014-09-19 14:03 /tpch/lineitem/lineitem.tbl.6
Actian Analytics Database - Matrix
1億8000万件 (23.5GB)
らくらくロード、しかも高速
DEMO2: JOINができるならSQLいらない?
DataFlow単独でJOINもフィルタリングもできるなんて! じゃあRDBMSにロードしなくても集計できるんじゃない?
select n_name, sum(l_extendedprice * (1 - l_discount)) as revenue from customer, orders, lineitem, supplier, nation, region where c_custkey = o_custkey and l_orderkey = o_orderkey and l_suppkey = s_suppkey and c_nationkey = s_nationkey and s_nationkey = n_nationkey and n_regionkey = r_regionkey and r_name = 'MIDDLE EAST' and o_orderdate >= '1996-01-01' and o_orderdate < '1997-01-01' group by n_name order by revenue desc;
lineitem.tbl.1 customer.tbl.1
TPC-H Query5
Hive: 6分48秒 Impala: 1分25秒
使うツールは適材適所で
DEMO3: 分析してみる?
得意先をグループ分けして、それぞれのグループに効果的な営業をかけられないかな。 単純に購入額や顧客属性で分けてもいいけど、注文の仕方の特徴でグループ分けすることはできないかな。予想もしなかったつながりが見えてくるかもしれないし。
得意先
受注 (1億件)
受注明細 (10億件)
商品
商品区分
○ ○
○ ○
□ □
□
△ △
△ △
はやりの機械学習だ! select t.tokuisaki_cd, t.tokuisaki_mei, sum(jm_suryo) sum_suryo, avg(jm_suryo) avg_suryo, stddev_pop(jm_suryo) stddev_suryo, sum(jm_kakaku) sum_kakaku, avg(jm_kakaku) avg_kakaku, stddev_pop(jm_kakaku) stddev_kakaku, sum(drink) drink, sum(chomiryo) chomiryo, sum(snack) snack, sum(milk) milk, sum(serial) serial, sum(meat) meat, sum(kakou) kakou, sum(fish) fish from tokuisaki t join juchu j on t.tokuisaki_cd = j.tokuisaki_cd join ( select jm1.juchu_cd, sum(jm1.suryo) jm_suryo, sum(jm1.tanka * jm1.suryo - jm1.waribiki) jm_kakaku, sum(case when k.kbn_cd = '1' then 1 else 0 end) drink, sum(case when k.kbn_cd = '2' then 1 else 0 end) chomiryo, sum(case when k.kbn_cd = '3' then 1 else 0 end) snack, sum(case when k.kbn_cd = '4' then 1 else 0 end) milk, sum(case when k.kbn_cd = '5' then 1 else 0 end) serial, sum(case when k.kbn_cd = '6' then 1 else 0 end) meat, sum(case when k.kbn_cd = '7' then 1 else 0 end) kakou, sum(case when k.kbn_cd = '8' then 1 else 0 end) fish from juchu_meisai jm1 join syohin s on jm1.shohin_cd = s.syohin_cd join syohinkbn k on s.kbn_cd = k.kbn_cd group by jm1.juchu_cd ) jm on j.juchu_cd = jm.juchu_cd group by t.tokuisaki_cd, t.tokuisaki_mei
Actian Vectorで集計! (適材適所)
集計結果の各項目をベクトルとして、
k-Meansで クラスタリング!
k-Meansとは?
①ランダムに重心を決め ②近い点をグループ分け (クラスタリング)
③クラスタの中心に来るように重心を移動
クラスタ間を移動するデータが なくなるまで②と③を繰り返す。
まずはMahoutで!
哀れ… MapReduce
DataFlowなら?
SQLじゃなくたって、 Hadoop上でお手軽にデータ加工・分析が できるんだ!!!!
最後にこれを覚えて帰ってください
無断転載を禁ず この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。
株式会社インサイトテクノロジーは本書の内容に関していかなる保証もしません。また、本書の内容に関連したいかなる損害についても責任を負いかねます。 本書で使用している製品やサービス名の名称は、各社の商標または登録商標です。