[db tech showcase tokyo 2014] b22: hadoop rush!!...

23
Hadoop Rush!! HDFSからデータを自在に取得、 加工するにはどうする?

Upload: insight-technology-inc

Post on 30-Jun-2015

648 views

Category:

Technology


0 download

DESCRIPTION

あなたのHadoopクラスタに貯まっているデータ、何を使って加工してますか? MapReduce? 鉄板ですね。遅いけど。Impala? Spark? お目が高い。でも他にもあるんですよ。速く、お手軽なものが。今回はそれを使ってバリバリデータの加工・分析をしちゃいます。合言葉はRush!!

TRANSCRIPT

Page 1: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

Hadoop Rush!! HDFSからデータを自在に取得、 加工するにはどうする?

Page 2: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

BI, AnalyticsとしてのHadoopの世界

RDBMS (Columnar)

Page 3: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

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管理ツール

Page 4: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

GUIでちょちょいと – DataFlow Plugin to KNIME

Page 5: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

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

Page 6: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

作りこむには?… Java or RushScript!!

Page 7: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

作った処理は自動でパラレルに

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

作成した処理を

パラレルな

実行計画に変換

Page 8: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

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

Page 9: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

ジョブ・リソースはWebから管理

Page 10: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

YARN上でのリソース管理もOK

Page 11: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

DataFlow vs Spark

• No MapReduceで高速なデータ加工・分析をクラスタで実行可能 • 特定の処理に特化しない汎用フレームワーク • YARNでリソース管理可能

• プロプライエタリ • Pipeline parallelismパラダイム • コーディングレス • 並列処理の知識は不要

• オープンソース • In memoryパラダイム • 基本はScala • 並列処理の知識がある程度必要

データアナリスト向け プログラマ向け ※個人の感想です。

Page 12: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

DEMO!!!

Page 13: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

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)

Page 14: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

らくらくロード、しかも高速

Page 15: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

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秒

Page 16: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

使うツールは適材適所で

Page 17: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

DEMO3: 分析してみる?

得意先をグループ分けして、それぞれのグループに効果的な営業をかけられないかな。 単純に購入額や顧客属性で分けてもいいけど、注文の仕方の特徴でグループ分けすることはできないかな。予想もしなかったつながりが見えてくるかもしれないし。

得意先

受注 (1億件)

受注明細 (10億件)

商品

商品区分

○ ○

○ ○

□ □

△ △

△ △

Page 18: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

はやりの機械学習だ! 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とは?

①ランダムに重心を決め ②近い点をグループ分け (クラスタリング)

③クラスタの中心に来るように重心を移動

クラスタ間を移動するデータが なくなるまで②と③を繰り返す。

Page 19: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

まずはMahoutで!

Page 20: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

哀れ… MapReduce

Page 21: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

DataFlowなら?

Page 22: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

SQLじゃなくたって、 Hadoop上でお手軽にデータ加工・分析が できるんだ!!!!

最後にこれを覚えて帰ってください

Page 23: [db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? by 株式会社インサイトテクノロジー 平間大輔

無断転載を禁ず この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。

株式会社インサイトテクノロジーは本書の内容に関していかなる保証もしません。また、本書の内容に関連したいかなる損害についても責任を負いかねます。 本書で使用している製品やサービス名の名称は、各社の商標または登録商標です。