ビッグ・データと - oracle ·...

Post on 25-Jul-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

写真:BOB ADLER/GETTY IMAGES、PAULO FRIDMAN

ORACLE.COM/JAVAMAGAZINE ////////////////////////////// MARCH/APRIL 2015

34

blog

JAVA TECH

COMMUNITY

JAVA IN ACTION

ABOUT US

Apache HadoopやApache Hive、Apache Pig、Apache、 HBaseなどのツールが登場したことで、Javaはビッグ・データ革命を後押しする原動力となりました。Java開発者として、Javaアプリケーションを取り巻く新世代の一員

となる準備はできていますか。誰にも聞けない質問をいくつも抱えていませんか。この記事では、JavaOne 2014の”Big Data and Java: Ask the Experts”パネルで、参加者からの優れた質問に対して、ビッグ・データの専門家がどう回答したかをご紹介します。Duke’s Choice Awardを受賞したFabiane Nardon氏はTail Targetの主任研究員であり、これまでにない新しいデータ・サイエンス・サービスの設計に取り組んでいます。Fernando Babadopulos氏は高パフォーマンス・ソフトウェア設計の専門家で、Tail TargetのCTOを務めています。2009年からビッグ・データに力を入れてきたDaniel Templeton氏は、開発者向けとデータ・サイエンス分野向けのCloudera Certified Professional認定を開発しているClouderaに勤務しています。Simon Elliston Ball氏はHortonworksのソリュー

専門家がご質問に答えます。 FABIANE NARDON、FERNANDO BABADOPULOS、 DANIEL TEMPLETON、SIMON ELLISTON BALL、 CHRIS RICHARDSON

ビッグ・データとJAVA

Hadoopと従来型リレーショナル・システムを比べると、「似ている点よりも違う点の方が多いかもしれません」とDaniel Templeton氏(上)は言います。Fabiane Nardon氏(下):「解決すべき問題によって、どのエンタープライズ対応NoSQLデータベースを選ぶ必要があるかは異なります」

写真:BOB ADLER/GETTY IMAGES

ORACLE.COM/JAVAMAGAZINE ////////////////////////////// MARCH/APRIL 2015

35

blog

JAVA TECH

COMMUNITY

JAVA IN ACTION

ABOUT US

RICHARDSON氏:

「ビッグ・データは必ずしも大量のデータであるとは限らず、高速で生成されるデータを指す場合もあります。また、非構造化データのように多様性に富むデータを指すこともあります」

ション・エンジニアであり、Hadoopを使用した問題解決を支援しています。Java Championであり、『POJOs in Action』の著者でもあるChris Richardson氏は、Amazon EC2向けのJava Platform as a Service(PaaS)であった、元々のCloud Foundryプロジェクトの創始者です。Richardson氏は現在、マイクロサービスに関するコンサルティングに従事しており、3社目と

なる起業に取り組んでいます。質問:ビッグ・データとは何ですか。Richardson氏:ビッグ・データという用語はやや漠然としていますが、単一マシン上で稼働するRDBMSベース・アプリケーションなどの、従来のデータ処理技法では処理できないデータを指します。ビッグ・データは必ずしも大量のデータであるとは限らず、高速で生成されるデータを指す場合もあります。また、非構造化データのように多様性に富むデータを指すこともあります。Apache Hadoopなどのビッグ・データ・テクノロジーは、フォルト・トレラントなソフトウェアを使用した水平方向への拡張によって、データ量と速度の問題に対応しています。この方法は、信頼性が非常に高いハードウェアを垂直方向に拡張する従来型のアプローチと比べると、安価でスケーラビリティが高くなる傾向があります。Apache Hadoopは、多様なデータを処理するため、構造化データと非構造化データの両方をサポートするストレージ形式を使用しています。ビッグ・データの処理には機械学習(ML)アルゴリズムがよく使われます。質問:主要なNoSQLデータベースを教えてください。Nardon氏:エンタープライズ対応のNoSQL

データベースは多数存在します。解決すべき問題によってその選択肢は大きく異なります。一般的なデータ・モデルの分類別に、いくつか良い例を挙げましょう。

■ カラム・ストア:Apache Cassandra、Apache HBase、Apache Accumulo

■ ドキュメント・ストア:MongoDB、CouchDB、RavenDB

■ キーバリュー・ストア:Redis、Riak、Amazon DynamoDB, Aerospike、FoundationDB

■ グラフ・ストア:Neo4j、Titan、OrientDB, Apache Giraph、InfiniteGraph質問:Apache Hadoopを使い始める際の最善の方法はどのようなものですか。Templeton氏:Hadoopは複雑ですから、最初は手ごわいかもしれません。けれども、役に立つチュートリアルやトレーニングが数多く提供されています。まずは『Hadoop: the Definitive Guide』を買って(読んで)ください。この本は参考資料としてもっともよく使用されており、非常に役立つHadoopテキストです。p.インターネット上にもたくさんのチュートリアルがあります。歴史あるYahoo! Hadoop Tutorialは今でも手始めとしてお勧めできます。JavaOne 2014のセッションHOL4041で開

「従来のデータ処理技法ではビッグ・データを処理できません」と語るJava ChampionのChris Richardson氏。

写真:PAULO FRIDMAN

ORACLE.COM/JAVAMAGAZINE ////////////////////////////// MARCH/APRIL 2015

36

blog

JAVA TECH

COMMUNITY

JAVA IN ACTION

ABOUT US

BABADOPULOS氏:

「Hadoopでのデータ処理にはジョブの設定と全ノードの同期が必要になるため、同時に処理するデータ量が多ければ多いほど、効率は高くなります」

催された”Hands-on Hadoop”ラボにも目を通すと良いでしょう。この記事の執筆時点ではまだラボ資料がオラクルのWebサイトに掲載されていませんが、GitHubで全体が公開されています。ラボのマニュアルには、JavaOne環境の外部でラボを実行する手順が載っています。ラボで使用されたスライドもWebサイトで参照できます。その他のハンズオン・トレーニングとして、Clouderaはもっとも人気のある一連のトレーニング・コースを提供しており、HadoopでのSQLを使用したデータ分析や、データ・サイエンス概要、Apache Sparkなどを選択できます。実際に動かしてみたければ、Clouderaが提供するCloudera QuickStar t VMとHor tonwork sが提供するHor tonwork s Sandboxがあります。どちらもVMイメージで、単一ノード・クラスタ全体が含まれています。さらに、Clouderaが提供するCloudera Liveは、クラウドでホストされた専用クラスタが目の前で動き、(最長2週間)無償で使用できます。Hadoopの入口としてMapReduceよりも簡単なのは、Apache Hive、Apache Pig、Cloudera Impalaなどの高水準プロジェクトです。HiveとImpalaで使用する言語はSQLに近いため、たいていは簡単に習得できます。上記3つのプロジェクト向けのチュートリアルもオンラインで提供されています。Hadoopを使い始めたばかりなら、Apache Sparkも確認することをお勧めします。Apache SparkはHadoopエコシステムのコア計算エンジンとして、MapReduceを置き換えつつあります。現時点でSparkの学習資料として使用できるものは若干限られていますが、最新のUC Berkeley AMP Campのアーカイブが良い情報源になります。また、Sparkにはスタンドアロン・モードがあるため、ダウンロードしてそのまま使用するのは非常に容易です。SparkはCloudera QuickStart VM、Cloudera Live、

Hortonworks Sandboxにも含まれています。質問:HadoopとNoSQLの使用を開始するためにはデータ量がどのくらい必要ですか。Babadopulos氏:必要なデータ量は、Hadoopで実行するジョブの種類によって異なります。Hadoopでのデータ処理にはジョブの設定と全ノードの同期が必要になるため、同時に処理するデータ量が多ければ多いほど、効率は高くなります。Hadoop Distributed File System(HDFS)内の領域を最適化するには、dfs.namenode.fs-limits.min-block-sizeプロパティに指定されたサイズよりも大きいファイルが必要です。Nardon氏:NoSQLデータベースでは多くの場合、データ量自体よりも、より柔軟なデータ・モデルを使用する必要性に応じて、どのデータベースを使用するかが決まります。たとえば、巨大なドキュメント・データベースがない場合でも、従来のリレーショナル・データベースよりは

MongoDBデータベースにドキュメントを格納する方が便利で無理がないでしょう。MongoDBのデータ・モデルはドキュメントのような構造向けに最適化されているためです。質問:NoSQLを使用しないでHadoopにデータを移動するにはどうすればよいですか。Nardon氏:リレーショナル・データベースを使用しており、データをHDFSに移したい場合は、まずデータを処理してからその結果をリレーショナル・ストアに戻します。このプロセスにはApache Sqoopを使用できます。または、Hadoop DBInputFormatコンポーネントを使用してリレーショナル・データをHadoopに移動することもできます。

HadoopとNoSQLの使用を開始するためにはデータ量がどのくらい必要かを話し合うTail TargetのCTO、Fernando Babadopulos氏と主任研究員、Fabiane Nardon氏。

写真:BOB ADLER/GETTY IMAGES

ORACLE.COM/JAVAMAGAZINE ////////////////////////////// MARCH/APRIL 2015

37

blog

JAVA TECH

COMMUNITY

JAVA IN ACTION

ABOUT US

データがログ・ファイルに含まれている場合は、Apache Flumeを使用してHDFSにデータを移動できます。質問:Javaでコードを書かなくてもApache Hadoopを使用できますか。Templeton氏:もちろんです。JavaなしでHadoopを使用する方法は数多くあります。以下に、もっとも人気のある選択肢を簡単にまとめます。

■ HadoopでのSQL:現在、Hadoopに格納されたデータに対して、SQLとSQL的な問合せを実行するための選択肢は無数にあります。もっとも人気が高いのはHiveとImpalaであり、どちらもApacheライセンスを使用したオープンソース・プロジェクトです。

■ Apache Spark:Hadoopファミリのもっとも新しいメンバーであるSparkは、ジョブ実行エンジンとして、MapReduceを最終的に置き換える可能性があります。SparkはScala、Python、Javaで書かれたコードをサポートしています。

■ Hadoop streaming:Hadoopにはstreamingと呼ばれるパッケージが含まれており、シンプルな入力/出力規約を使用して、好きな言語でMapReduceジョブを作成することができます。実際に、Hadoop Streamingの一般的な使い方として、grep、cut、awkなどの標準Linuxコマンドを大規模データセットに対して実行します。

■ Pig Latin:Javaを使わないもう1つの一般的な方法はApache Pigであり、Pig Latinと呼ばれる高水準言語でデータを操作できます。質問:Hadoopで処理できる最大データ量はどのくらいですか。Babadopulos氏:Hadoopでは、HDFSと呼ばれる独自仕様の分散ファイル・システムとクラ

ウドベースのストレージ・システム(例:Amazon Simple Storage Service(S3))の両方にデータを格納できます。Hadoopで処理できるデータの最大量は、これらのファイル・システムに格納できるデータ量によって制限されます。HDFSは分散ファイル・システムですから、クラスタをスケールアップすることで、必要に応じてより多くのデータに対応できます。また、1つのDataNodeで複数のディスクを使用すると、ストレージを最適化して拡張できます。HDFSクラスタのストレージ容量を増やすには、新しいDataNodeをクラスタに追加するか、またはディスク・ボリュームを既存のDataNodeに追加します。質問:インフラストラクチャの観点から見ると、Apache Hadoopと従来のリレーショナル・システムにはどのような違いがありますか。Templeton氏:似ている点よりも違う点の方が多いかもしれません。もっとも顕著なインフラストラクチャ上の違いを2つ挙げましょう。

■ Hadoopは本質的に分散されたモデル上に構築されています。Hadoopは、安価で信頼性の低い多数のノードによるクラスタ構成を前提としているため、システム全体が冗長性とフォルト・トレランスを重視して構築されています。典型的なリレーショナル・システムは集中型システムとして構築され、高性能で信頼性の高い少数のノードで実行されます。

■ Hadoopでは、メタデータやテーブル構造から完全にデータが切り離されています。このアプローチはス

キーマ・オン・リード(Schema on Read)と呼ばれています。例を挙げると、HDFSにデータをアップロードし、後からApache Hiveにこのデータ用のテーブルを作成できます。テーブルのメタデータはHiveメタストア内にしか存在せず、データ自体に影響はありません。テーブル・スキーマに対する考えが変わった場合、(データに影響を与えることなく)テーブルを削除して新しく作り直すことができます。同じデータファイルに対して2つ以上のテーブルを作ることも可能です。リレーショナル・システムはスキーマ・オン・ライト(Schema on Write)であり、システムにデータが取り込まれると、データとテーブル・メタデータは密接に結び付けられます。

TEMPLETON氏:

「Hadoopは複雑なので、最初のハードルは高いかもしれません。でもたくさんのチュートリアルやトレーニング・オプションがあるので大丈夫です」

「Hadoopへの入口として簡単なのは、Apache Hive、Apache Pig、Cloudera Impalaなどの 高水準プロジェクトです」と言うClouderaのDaniel Templeton氏。

写真:JOHN BLYTHE

ORACLE.COM/JAVAMAGAZINE ////////////////////////////// MARCH/APRIL 2015

38

blog

JAVA TECH

COMMUNITY

JAVA IN ACTION

ABOUT US

質問:HadoopでHiveを使用する場合、どの程度のオーバーヘッドがありますか。Elliston Ball氏:Hiveは、SQL問合せから一連のMapReduceステップが構築されることにより機能します。この部分がオーバーヘッドのおもな原因になります。Hiveは開始後すぐ、非常に高速に大規模データセットを処理するように設計されていますが、はじめから最速で処理できるわけではありません。もう1つ注目すべき点は、最近のHiveパフォーマンスがApache Tezによって向上していることです。Tezがもたらす大きな違いは、Hiveが作成したMapReduceジョブのグラフが最適化されることです。また、オーバーヘッドの主要な発生源がスキップされます。以前は、それぞれのMapReduceステップ間で多数の中間データをディスクに書き出す必要がありました。Tezを有効化すると、この大量のオーバーヘッドを解消できます。 Long-running Tez sessions and reuse of

Tezセッションの長時間実行とコンテナの再利用により、起動時間が数秒短くなる場合があります。また、Java仮想マシン(JVM)起動時のオーバーヘッドの軽減に役立つ幅広いチューニング・オプションが用意されています。ほとんどのディストリビューションでは、すべての最適化が有効になっているわけではないため、現時点でもっともよくあるオーバーヘッドの原因は、単に新機能を有効化していないことにあります。質問:ラムダ・アーキテクチャとHadoopの関係についてお話しいただけますか。Elliston Ball氏:ラムダ・アーキテクチャは現在、ビッグ・データ・コミュニティで多くの議論が交わされているトピックです。このアーキテクチャの概略を示したNathan Marz、James Warrenの両氏による著書、『Big Data: Principles and best practices of scalable realtime data systems』の出版直後から、開発者たちは賛否両論を唱えていました。 このアプローチでは、アプリケーションのバッチ・レイヤーとスピード・レイヤーを切り離します。Hadoopは従来からバッチ処理を中心としてきたため、リアルタイムで最新の分析を行うには、ストリーミング・システムを別途動かし、処理済みのバッチ結果に対して調整用の更新を適用する必要がありました。その後で、サービス・レイヤーが両データを集約します。もっとも効果的なラムダ・アーキテクチャの用途は、大規模データセット全体に対してバッチ処理で低速アルゴリズムを実行する場合です。この場合、更新のストリームに対して短時間バージョンのアルゴリズムを実行することで、近似結果を得ることができます。より正確な結果を得るには、その後でバッチ・アプローチを定期的に実行します。一例として挙げられるのが、ユーザーの全購入履歴に対して複雑

な計算を実行するリコメンド・システムです。この場合、当日のトランザクションに対してより単純な計算式を使用することで結果を段階的に改善しておき、後から夜間ジョブのバッチ・アルゴリズムを使用して取り込むことができます。Hadoopはラムダ・アーキテクチャの実装に最適なプラットフォームです。バッチ・レイヤーはMapReduce(またはHiveやPigなど)で実行できます。また、Apache Stormはサービス・レイヤーとしてHBaseを使用することで、リアルタイムのスピード・レイヤーを実装するための優れたプラットフォームになります。YARNを使うと、これらすべてを1つのクラスタ上に配置できます。Spark(とSpark Streaming)もまた、ラムダ・アーキテクチャに適したフレームワークを提供します。マイクロバッチ・アプローチを採用しているため、レイヤー間でコードを再利用できる場合があります。ただし、大量のコードを再利用している場合、ラムダ・アーキテクチャをその目的どおりに使用していないと思われます。質問:”Hadoop as a Service”は存在しますか。Babadopulos氏:はい。Hadoopをサービスとして提供している企業はいくつかあります。以下に例を挙げましょう。

■ Amazon EMRは、Amazon EC2のインフラストラクチャ内にHadoopクラスタをデプロイしたものです。

■ Quboleでは、Amazon EC2またはGoogle’s Compute Engineを使用して、サービスとしてのHadoop(とHive、Pig、Apache Oozie、Sqoopなどの、Hadoopエコシステムを取り巻く多数のツール)をデプロイできます。

■ XplentyはETLデータ・フローの直感的な設計インタフェースを備えており、数回のクリックでHadoopを使用できます。

■ Microsoft’s HDInsightのHDInsightもまた、Microsoft Azureクラウド・プラットフォームを

「ラムダ・アーキテクチャは 現在、ビッグ・データ・ コミュニティで多くの議論が 交わされているトピックです」と話すHortonworks のSimon Elliston Ball 氏。

写真:BOB ADLER/GETTY IMAGES

ORACLE.COM/JAVAMAGAZINE ////////////////////////////// MARCH/APRIL 2015

39

blog

JAVA TECH

COMMUNITY

JAVA IN ACTION

ABOUT US

使用して、サービスとしてのHadoopを提供しています。質問:機械学習アルゴリズムについて何かご意見はありますか。Richardson氏:MLの狙いは、予測や意思決定を行うモデルを構築することにより、データから学習するアルゴリズムを開発し、利用することにあります。たとえば、よくあるMLの使用法は、ユーザーの過去の行動に基づく、製品や記事の推奨です。広く使用されているMLライブラリの1つにApache Mahoutがあります。Apache Mahoutで実装されたスケーラブルなアルゴリズムは元々、Hadoop MapReduceを使用して構築されていました。しかし、最近の実装は、ずっと高速なApache Sparkをベースにしています。Apache Sparkには、MLlibと呼ばれる独自のMLライブラリもあります。多数のアプリケーションにとっての重要部分はビッグ・データ・パイプラインであり、ここでオンライン・アプリケーションからビッグ・データ・システムへとデータを抽出し、MLアルゴリズムを実行してモデルを構築します。このモデルは後でオンライン・アプリケーションに使用されます。質問:ビッグ・データでのガバナンス・ツールはどうなっていますか。Elliston Ball氏:ガバナンスなしで済ませるという選択肢はもはや存在しません。初期のHadoopでは、優れたデータ・ガバナンスとデータ・セキュリティを実現するオプションはあまり多くありませんでした。今や、ガバナンスは欠かせないツールとして、データ・アーキテクチャ本流の大きな部分を占めています。ガバナンスという分野には、セキュリティの確保、データ・アクセスの制御と監査、メタデータの管理、データ系統の管理など、多数の事項が含まれますが、本質的には人間とポリシー

に集約されます。Hadoopプラットフォームにはこのようなタスクに役立つツールが含まれていますが、多くの場合、優れたガバナンスはメタデータを意識するという文化に帰着します。ツールに関しては、それぞれの主要ディストリビューションが、異なる方法でガバナンスの問題に対処しています。Clouderaは独自仕様のソリューション(Cloudera ManagerとCloudera Navigator)を提供しています。Hortonworksのツールは100%オープンソースであり、Apache RangerやApache Knox Gateway、Apache Falconを使用しています。InformaticaやTalendなど、従来のETLベンダーが提供するツールも、ガバナンス関連のサービスを提供するために十分役立ちます。質問:Hadoopはエンタープライズに対応していますか。Nardon氏:もちろんです。現在、多くの企業が本番でHadoopを使用し、重要なサービスを実行しています。また、Hadoopエコシステ

ムも活況を呈しています。多数の営利企業がディストリビューションやサポート、ホスティング、コンサルティングなどのHadoop向けサービスを提供しています。たとえば、Cloudera、Hortonworks、MapR、Amazonなどです。Richardson氏:Databricksなどの新興企業も参入しています。 </article>

LEARN MORE• “ Big Data and Java: Ask the Experts” panel at JavaOne 2014

「MLの狙いは、予測や意思決定を行うモデルを構築することにより、データから学習するアルゴリズムを開発し、利用することにあります」と言うChris Richardson氏。

NARDON氏:「現在、多くの企業が本番でHadoopを使用し、重要なサービスを実行しています。また、Hadoopエコシステムも活況を呈しています」

top related