Upload
insight-technology-inc
View
1.292
Download
2
Embed Size (px)
Citation preview
© 2015 IBM Corporation2
いまさら聞けない?!Hadoopとは。
○○という単語の出現回数を調べたいな・・・
プログラムを書けば、なんだってできるさ!だってコンピュータだもの
パソコン1台では荷が重いよ。容量も足りないよ。
ファイルを複数のコンピュータに分散して、処理も各自で行ったものを後で集計すればいい!
ついでに、障害にも強くして、プログラムを作りやすいようにライブラリも整えよう!
© 2015 IBM Corporation3
Hadoopとは、複数のコンピュータで構成された分散型のファイルシステム(HDFS)にファイルを格納し、それに対してプログラムを分散実行する環境です
プログラム(基本はJava)さえ書けば、どんな処理でも実行できます
処理はシステムを構成する複数のコンピュータで分散して実行(Map)されます。実行結果は親玉コンピュータで集計(Reduce)します
分散処理の実行や集計、プログラム作成を楽にするライブラリは、Hadoopに組み込まれています
それどころか、データベースっぽく使える機能(HiveやHbase)や、データをかき集める機能(Scoop)などを組み合わせれば、相当便利に使えます
ファイルは自動的に3つのコピーを異なるコンピュータに配置するなど、耐障害性についてもよく考えられています
安価なx86サーバーを大量に並べれば、処理能力も格納容量もリニアに増やせるので、コストが安いく拡張しやすいこともメリットです
いまさら聞けない?!Hadoopとは。
© 2015 IBM Corporation4
Hadoop(主にMapReduce)の問題点
•深いJavaの知識とスキルが必要
•分析のための機能がほとんど備わっていない
使い方が難しい
• In-Memoryで処理を行うためのフレームワークがない
•処理のステップ毎にファイルへの書き出しが必要
メモリを活用した性能向上が不可能
•インタラクティブな処理は実行できない(バッチ処理にしか向いていない)
ワークフローの柔軟性がない
•データの更新ができない/できるとしても簡単じゃない
•ANSI標準のSQLが通らない
•絶望的に遅い
データベース的に使うには無理がある
© 2015 IBM Corporation5
解決策1:Sparkを使う
• APIを使って簡単に実装
• Python, Scala, Javaなど幅広い言語への対応
使い方が簡単
• 処理のステップ毎にファイルを作らないから高速
In-Memoryで処理
• インタラクティブに処理を実行可能
• バッチ処理ももちろん可能
柔軟なワークフロー
© 2015 IBM Corporation6
Spark on HadoopだけじゃないのがSpark
Apache Spark
Spark SQLSpark
StreamingGraphX MLlib SparkR
Apache Hadoop-HDFS
Apache Hadoop-YARNリソース管
理
ストレージ管理
コンピューティング層
Slave node 1 Slave node 2 Slave node n…
Single node, with local
storage
© 2015 IBM Corporation7
IBM Open Platform with Apache HadoopでSpark
100%オープンソース
最新のソースを配布: “days, not months”
Sparkも入っています
無償で本番環境に適用可能
IBM analyticsやデータ分析技術と、Apache Hadoopを分離
サポートサービスを提供
Apache Open Source Components
HDFS
YARN
MapReduce
Ambari HBase
Spark
Flume
Hive Pig
Sqoop
HCatalog
Solr/Lucene
IBM Open Platform with Apache Hadoop
http://www.ibm.com/analytics/us/en/technology/spark/
© 2015 IBM Corporation8
解決策2:ANSI標準のSQLが使えるモジュールを使う(BigSQL)
SQLベースのアプリケーション
Big SQL Engine
Data Storage
IBM data server client
SQL MPP Run-time
DFS
複雑なSQLにも標準技術でしっかり対応–SELECT: joins, unions, aggregates, 副問い合わせ . . . –GRANT/REVOKE, INSERT … INTO–ストアド・プログラムやユーザー定義関数に対応–標準的な(DB2用の)JDBC/ODBCドライバで接続
高速に実行–Javaで記述されたMapReduce層を、C++で書き換え–デーモンとして常時待機(起動にかかる遅延がない)–可能ならばメモリ上で処理し、ディスクへのアクセスを抑える (アグリゲーションやソートなどの処理において有効)–DB2出自のコストベースのオプティマイザ(140以上のクエリ・リライト・ルールを実装)
複数のストレージ形式をサポート–Text (delimited), Sequence, RCFile, ORC, Avro, Parquet –Data persisted in DFS, Hive, HBase–IBM独自の形式を利用する必要なし
他のRDBMSとの間で、データのロードやクエリーを統合して実行可能
BigInsights
© 2015 IBM Corporation9
IBM Big SQLはTPC-DSのすべてのSQLを実行可能
ImpalaやHiveでは、多くのクエリーで書き換えを必要とし、いくつかは大幅な書き換えが必要でした。
中には、製品の制約から、書き換えても動作させることができなかったり、長時間実行しても応答がないクエリーもありました。
© 2015 IBM Corporation10
解決策3:in-Hadoop Analyticsへの対応(BigR)
R言語をHadoopに格納されたデータに対して実行したい
けれど・・・
R言語で表現されたアルゴリズムをMapReduce処理に置
き換える(複数ノードでの並列実行処理に書き換える)
手段が必要
メモリを活用するなど、処理の最適化をしないと、実行
速度が上がらなくて使い物にならない
R言語から機械学習のアルゴリズムをHadoopクラスタ上で並列実行
メモリを活用して高速に動作
© 2015 IBM Corporation11
Text Analytics
POSIX Distributed File System
Multi-workload, Multi-tenant
scheduling
IBM BigInsights
Enterprise Management
Machine Learning
with Big R
Big R
IBM Open Platform with Apache Hadoop
IBM BigInsights
Data Scientist
IBM BigInsights
Analyst
Big SQL
BigSheets
Big SQL
BigSheets
for Apache Hadoop
IBM BigInsights for Apache Hadoop
© 2015 IBM Corporation13
データベースは、「現在が正確にわかる」から、「将来を予測する」へ
クラウド素早いデプロイ管理不要常に最新の機能が実装
分析対応In-DB analytics
複数のデータソースを統合HadoopNoSQL
用途特化型の高性能列指向In-Memory
高可用性と拡張性クラスタ
TCOの削減アプライアンス自働管理
基本的なアーキテクチャ分離レベル読み取り一貫性
基本的な機能バックアップチューニング
高性能TPC-Cパーティショニングマテリアライズド・ビュー
© 2015 IBM Corporation14
一般的な予測分析の実行環境と問題点
予測分析にかかる時間=データ転送+分析時間
分析に必要となるすべてのデータを、データベースから実行環境へ転送するため、対象となるデータ量に応じて膨大な時間が必要
分析処理にかかる時間は実行環境の性能に依存
© 2015 IBM Corporation15
“予測”ができるデータベースによる解決
• 予測分析にかかる時間=分析時間+結果の転送時間• 分析に必要となるすべてのデータを保持している、データベース上で分析を実行するため、その処理結果のみを転送するだけ
• 分析処理にかかる時間はデータベースの処理性能に強く依存
© 2015 IBM Corporation16
データの形式や場所に縛られないアプローチ
クラウド上のデータベース
OLTP用のデータベース
DWH用のデータベース HadoopNoSQL
これらすべてで同じように分析を引き受けられる?複数の場所にまたがるデータを横断的に分析する方法は?
Federation / Fluid Query
© 2015 IBM Corporation17
場所に縛られないデータへのアプローチには共通技術基盤が必要
オンプレミスかクラウドか(クラウド・ファースト)
オンプレミスでもプライベート・クラウドでもパブリック・クラウドでも、データが存在する意識せずに同じ機能を活用(最も適した場所に配置されたデータを、あらゆる場所から活用できる環境作り)
© 2015 IBM Corporation19
プロセス中心から洞察中心へのシフト
Systems ofEngageme
nt
Systems of Record
Systems of Insight
すべての意思決定に作用すべての意思疎通を刺激すべてのプロセスの動力
顧客の声個々への理解
製品の開発/改善満たされていないニーズの把握
振舞駆動型のサービス
文脈に基づいた対応
人材開発適材適所の人材配置
リアルタイムに対応要求の変化を把握
Twitterから得た洞察によって、憶測に頼らない経営判断を可能にする
© 2015 IBM Corporation20
“声”をアクションに結びつけるパートナーシップ
世界中で行われている会話を把握することのできる稀有の存在
アドバンスド・アナリティクス
豊富な業界知識と経験
ビッグデータの取り込みとマッチング
クラウドからオンプレミスまで幅広く対応
両者
のパ
ート
ナー
シッ
プ新しい価値の創造• IBMは非構造化データのソーシャル分析に集中• IBMの有するアドバンスド・アナリティクスの技術を
ソーシャル・メディアに活用• クラウド/オンプレミス/モバイルあるいは業務プロ
セスとの融合など、柔軟なデリバリ手法を準備
価値につなげるまでの時間を短縮• 企業で活用する価値のある洞察を導き出すための業界知
識と経験• 無駄なく迅速にデータを解析するための技術
© 2015 IBM Corporation22
Hadoopの利点と欠点
高い拡張性低いコスト様々なデータ形式や処理形式に対応
扱いにくいデータベース技術者にとっては足かせが多いできないこと(不便すぎること)も多い
© 2015 IBM Corporation24
データウェアハウスによる将来の“予測”
蓄積されたデータから、「事実」を計算するだけでなく、「予測」した結果を算出するアルゴリズムを実行できるデータウェアハウス
© 2015 IBM Corporation25
あらゆる場所にあるデータを連携
データは1カ所にあるとは限らないデータが発生した場所にとどめるのか適切な処理と移動を行うのか複数の場所に分散したデータを分析するにはどうするのがいいのか
© 2015 IBM Corporation28
Sample Code – BigR
Code using Big R
library(bigr)
temperatureData <- bigr.frame(dataSource="DEL",
dataPath="/user/temperature.csv", header=TRUE)
coltypes(temperatureData)=ifelse(1:10 %in% c(3, 6),
"numeric", "character")
buildAvgTempFunc <- function(df) {
maxMin <- df[ , c(‘minTemp’, ‘maxTemp’)]
df$avgTempDay <- rowMeans(maxMin)
avgTempCity <- aggregate (df$avgTempDay,
by=list(city=df$city), FUN=mean)
return(data.frame(avgTempCity))
}
avgTemperature <- groupApply(temperatureData,
temperatureData$city, buildAvgTempFunc,
data.frame(city=“city", average_temperature=1.0))
bigr.persist(avgTemperature, dataSource="DEL",
dataPath="/user/output.csv", header=T, del=',')
This code (using Big R) achieves the same as the original R code on the same dataset in the csv file in HDFS.
Note that the function call buildAvgTempFunc has same R code snippet as in original R code.
The groupApply function is specific to bigr package. Other similar useful functions are rowApply and tableApply
Original R Code
tempData <- read.table(“temperature.csv", header =
TRUE, sep=“,’)
coltypes(tempData) = ifelse(1:10 %in% c(3, 4), numeric,
character)
maxMin <- tempData[ , c(‘minTemp’, ‘maxTemp’)]
tempData$avgTempDay <- rowMeans(maxMin)
avgTempCity <- aggregate (tempData$avgTempDay,
by=list(city=tempData$city), FUN=mean)
write(avgTempCity, file = “output.csv", sep = “, “)