序章

ビッグデータは、大規模なデータセットから洞察を収集、整理、処理、および収集するために必要な非従来型の戦略とテクノロジーの総称です。 単一のコンピューターのコンピューティング能力またはストレージを超えるデータを処理する問題は新しいものではありませんが、このタイプのコンピューティングの普及、規模、および価値は、近年大幅に拡大しています。

この記事では、基本的なレベルでビッグデータについて説明し、主題の調査中に遭遇する可能性のある一般的な概念を定義します。 また、この分野で現在使用されているプロセスとテクノロジーのいくつかについても概要を説明します。

ビッグデータとは?

「ビッグデータ」の正確な定義は、プロジェクト、ベンダー、実務家、およびビジネスの専門家がまったく異なる方法で使用するため、特定するのが困難です。 それを念頭に置いて、一般的に言えば、ビッグデータは次のとおりです。

  • 大規模なデータセット
  • 大規模なデータセットを処理するために使用されるコンピューティング戦略とテクノロジーのカテゴリ

このコンテキストでは、「大規模なデータセット」とは、従来のツールや単一のコンピューターで合理的に処理または保存するには大きすぎるデータセットを意味します。 これは、大きなデータセットの一般的な規模が絶えず変化しており、組織ごとに大幅に異なる可能性があることを意味します。

ビッグデータシステムが違うのはなぜですか?

ビッグデータを操作するための基本的な要件は、任意のサイズのデータセットを操作するための要件と同じです。 ただし、大規模なスケール、取り込みと処理の速度、およびプロセスの各段階で処理する必要のあるデータの特性は、ソリューションを設計する際に重要な新しい課題を提示します。 ほとんどのビッグデータシステムの目標は、従来の方法では不可能だった大量の異種データからの洞察と接続を明らかにすることです。

2001年、GartnerのDoug Laneyは、ビッグデータを他のデータ処理とは異なるものにするいくつかの特徴を説明するために、「ビッグデータの3つのV」として知られるようになったものを最初に発表しました。

音量

処理される情報の規模は、ビッグデータシステムの定義に役立ちます。 これらのデータセットは、従来のデータセットよりも桁違いに大きくなる可能性があり、処理とストレージのライフサイクルの各段階でより多くの検討が必要になります。

多くの場合、作業要件は1台のコンピューターの機能を超えるため、コンピューターのグループからのリソースをプール、割り当て、および調整することが課題になります。 タスクをより小さな部分に分割できるクラスター管理とアルゴリズムがますます重要になっています。

速度

ビッグデータが他のデータシステムと大きく異なるもう1つの方法は、情報がシステム内を移動する速度です。 データは複数のソースからシステムに頻繁に流入し、洞察を得てシステムの現在の理解を更新するためにリアルタイムで処理されることがしばしば期待されます。

ほぼ瞬時のフィードバックへのこの焦点は、多くのビッグデータ実践者をバッチ指向のアプローチから遠ざけ、リアルタイムストリーミングシステムに近づけました。 新しい情報の流入に対応し、最も関連性の高い早い段階で貴重な情報を明らかにするために、データは絶えず追加、マッサージ、処理、分析されています。 これらのアイデアには、データパイプラインに沿った障害を防ぐために、可用性の高いコンポーネントを備えた堅牢なシステムが必要です。

バラエティ

処理されるソースとそれらの相対的な品質の両方の範囲が広いため、ビッグデータの問題はしばしば独特です。

データは、アプリケーションやサーバーログなどの内部システム、ソーシャルメディアフィードやその他の外部API、物理デバイスセンサー、その他のプロバイダーから取り込むことができます。 ビッグデータは、すべての情報を単一のシステムに統合することにより、データがどこから来たかに関係なく、潜在的に有用なデータを処理しようとします。

メディアの形式と種類も大幅に異なる可能性があります。 画像、ビデオファイル、オーディオ録音などのリッチメディアは、テキストファイル、構造化ログなどと一緒に取り込まれます。 従来のデータ処理システムでは、データがすでにラベル付けされ、フォーマットされ、整理されたパイプラインに入ることが期待される場合がありますが、ビッグデータシステムは通常、生の状態に近いデータを受け入れて保存します。 理想的には、生データへの変換または変更は、処理時にメモリ内で行われます。

その他の特徴

さまざまな個人や組織が元の3つのVを拡張することを提案していますが、これらの提案はビッグデータの品質ではなく課題を説明する傾向があります。 いくつかの一般的な追加は次のとおりです。

  • Veracity :ソースの多様性と処理の複雑さは、データの品質(したがって、結果の分析の品質)を評価する際の課題につながる可能性があります。
  • 変動性:データの変動は、品質の大幅な変動につながります。 低品質のデータを識別、処理、またはフィルタリングして、データをより有用なものにするために、追加のリソースが必要になる場合があります。
  • Value :ビッグデータの究極の課題は価値を提供することです。 場合によっては、導入されているシステムとプロセスが非常に複雑であるため、データの使用と実際の値の抽出が困難になることがあります。

ビッグデータのライフサイクルはどのように見えますか?

では、ビッグデータシステムを扱う場合、データは実際にどのように処理されるのでしょうか。 実装へのアプローチは異なりますが、一般的に話すことができる戦略とソフトウェアにはいくつかの共通点があります。 以下に示す手順はすべての場合に当てはまるとは限りませんが、広く使用されています。

ビッグデータ処理に関連するアクティビティの一般的なカテゴリは次のとおりです。

  • システムへのデータの取り込み
  • データをストレージに永続化する
  • データの計算と分析
  • 結果の視覚化

これらの4つのワークフローカテゴリについて詳しく説明する前に、ほとんどのビッグデータソリューションで採用されている重要な戦略であるクラスターコンピューティングについて説明します。 コンピューティングクラスターのセットアップは、多くの場合、ライフサイクルの各段階で使用されるテクノロジーの基盤です。

クラスターコンピューティング

ビッグデータの品質のため、個々のコンピューターはほとんどの段階でデータを処理するには不十分なことがよくあります。 ビッグデータの高いストレージと計算のニーズにより適切に対応するには、コンピュータークラスターの方が適しています。

ビッグデータクラスタリングソフトウェアは、多くの小さなマシンのリソースを組み合わせて、多くの利点を提供しようとしています。

  • リソースプーリング:データを保持するために使用可能なストレージスペースを組み合わせるのは明らかな利点ですが、CPUとメモリのプーリングも非常に重要です。 大規模なデータセットを処理するには、これら3つのリソースすべてを大量に必要とします。
  • 高可用性:クラスターは、さまざまなレベルのフォールトトレランスと可用性の保証を提供して、ハードウェアまたはソフトウェアの障害がデータへのアクセスと処理に影響を与えるのを防ぎます。 リアルタイム分析の重要性を強調し続けるにつれて、これはますます重要になります。
  • Easy Scalability :クラスターを使用すると、グループにマシンを追加することで、水平方向に簡単に拡張できます。 これは、システムがマシン上の物理リソースを拡張することなく、リソース要件の変更に対応できることを意味します。

クラスターを使用するには、クラスターメンバーシップを管理し、リソース共有を調整し、個々のノードで実際の作業をスケジュールするためのソリューションが必要です。 クラスターメンバーシップとリソース割り当ては、HadoopのYARN(Yet Another Resource Negotiatorの略)や ApacheMesosなどのソフトウェアで処理できます。

アセンブルされたコンピューティングクラスターは、多くの場合、他のソフトウェアがデータを処理するためにインターフェイスする基盤として機能します。 コンピューティングクラスターに関与するマシンは、通常、分散ストレージシステムの管理にも関与します。これについては、データの永続性について説明するときに説明します。

システムへのデータの取り込み

データの取り込みは、生データを取得してシステムに追加するプロセスです。 この操作の複雑さは、データソースの形式と品質、およびデータが処理前の目的の状態からどれだけ離れているかに大きく依存します。

ビッグデータシステムにデータを追加する1つの方法は、専用の取り込みツールです。 Apache Sqoop のようなテクノロジーは、リレーショナルデータベースから既存のデータを取得し、それをビッグデータシステムに追加できます。 同様に、 ApacheFlumeおよびApacheChukwa は、アプリケーションとサーバーのログを集約およびインポートするように設計されたプロジェクトです。 Apache Kafka のようなキューイングシステムは、さまざまなデータジェネレーターとビッグデータシステム間のインターフェイスとしても使用できます。 Gobblin のような取り込みフレームワークは、取り込みパイプラインの最後でこれらのツールの出力を集約および正規化するのに役立ちます。

取り込みプロセス中に、通常、ある程度の分析、並べ替え、およびラベル付けが行われます。 このプロセスはETLと呼ばれることもあり、抽出、変換、および読み込みを表します。 この用語は従来、レガシーデータウェアハウジングプロセスを指しますが、同じ概念のいくつかは、ビッグデータシステムに入るデータにも当てはまります。 一般的な操作には、受信データを変更してフォーマットする、データを分類してラベルを付ける、不要なデータや不良データを除外する、特定の要件に準拠していることを検証するなどがあります。

これらの機能を念頭に置いて、理想的には、パイプラインの下流でさらに柔軟性を高めるために、キャプチャされたデータを可能な限り生のままにしておく必要があります。

ストレージ内のデータの永続化

取り込みプロセスは通常、ストレージを管理するコンポーネントにデータを渡すため、データをディスクに確実に永続化できます。 これは単純な操作のように見えますが、受信データの量、可用性の要件、および分散コンピューティングレイヤーにより、より複雑なストレージシステムが必要になります。

これは通常、生データの保存に分散ファイルシステムを活用することを意味します。 ApacheHadoopのHDFSファイルシステムなどのソリューションを使用すると、クラスター内の複数のノードに大量のデータを書き込むことができます。 これにより、コンピューティングリソースからデータにアクセスでき、メモリ内操作のためにクラスターのRAMにロードでき、コンポーネントの障害を適切に処理できます。 CephGlusterFSなど、他の分散ファイルシステムをHDFSの代わりに使用できます。

データを他の分散システムにインポートして、より構造化されたアクセスを実現することもできます。 分散データベース、特にNoSQLデータベースは、多くの場合、同じフォールトトレラントな考慮事項で設計されており、異種データを処理できるため、この役割に最適です。 データの整理と表示の方法に応じて、さまざまな種類の分散データベースから選択できます。 いくつかのオプションとそれらが最適な目的について詳しくは、NoSQL比較ガイドをご覧ください。

データの計算と分析

データが利用可能になると、システムはデータの処理を開始して実際の情報を表示できます。 要件と最善のアプローチは、必要な洞察のタイプによって大幅に異なる可能性があるため、計算レイヤーはおそらくシステムの最も多様な部分です。 多くの場合、データは、単一のツールによって、または複数のツールを使用してさまざまなタイプの洞察を明らかにすることによって、繰り返し処理されます。

バッチ処理は、大規模なデータセットを計算する1つの方法です。 このプロセスでは、作業を細かく分割し、個々のマシンで各部分をスケジュールし、中間結果に基づいてデータを再シャッフルし、最終結果を計算して組み立てます。 これらのステップは、個別に分割、マッピング、シャッフル、リダクション、アセンブルと呼ばれることもあれば、まとめて分散マップリデュースアルゴリズムと呼ばれることもあります。 これは、ApacheHadoopのMapReduceで使用される戦略です。 バッチ処理は、かなりの計算を必要とする非常に大きなデータセットを処理する場合に最も役立ちます。

バッチ処理は特定の種類のデータと計算に適していますが、他のワークロードではより多くのリアルタイム処理が必要です。 リアルタイム処理では、情報をすぐに処理して準備する必要があり、新しい情報が利用可能になったときにシステムが対応する必要があります。 これを実現する1つの方法は、ストリーム処理です。これは、個々のアイテムで構成されるデータの連続ストリームを操作します。 リアルタイムプロセッサのもう1つの一般的な特徴は、メモリ内コンピューティングです。これは、クラスタのメモリ内のデータの表現を処理して、ディスクに書き戻す必要をなくします。

Apache Storm Apache Flink 、および Apache Spark は、リアルタイムまたはほぼリアルタイムの処理を実現するさまざまな方法を提供します。 これらのテクノロジーにはそれぞれトレードオフがあり、個々の問題に最適なアプローチに影響を与える可能性があります。 一般に、リアルタイム処理は、システムに急速に変化または追加されているデータの小さなチャンクを分析するのに最適です。

上記の例は、計算フレームワークを表しています。 ただし、ビッグデータシステム内のデータを計算または分析する方法は他にもたくさんあります。 これらのツールは頻繁に上記のフレームワークにプラグインし、基盤となるレイヤーと対話するための追加のインターフェイスを提供します。 たとえば、 Apache Hive はHadoopのデータウェアハウスインターフェイスを提供し、 Apache Pig は高レベルのクエリインターフェイスを提供し、SQLのようなデータとの対話はのようなプロジェクトで実現できます。 Apache Drill Apache Impala Apache Spark SQL 、およびPresto。 機械学習には、 Apache SystemML Apache Mahout ApacheSparkのMLlibなどのプロジェクトが役立ちます。 ビッグデータエコシステムで広くサポートされているストレート分析プログラミングでは、RPythonの両方が一般的な選択肢です。

結果の視覚化

ビッグデータシステムで処理される情報の種類により、時間の経過に伴うデータの傾向や変化を認識することは、値自体よりも重要であることがよくあります。 データの視覚化は、傾向を特定し、多数のデータポイントを理解するための最も便利な方法の1つです。

リアルタイム処理は、アプリケーションとサーバーのメトリックを視覚化するために頻繁に使用されます。 データは頻繁に変更され、メトリックの大きなデルタは通常、システムまたは組織の状態に重大な影響を与えることを示しています。 このような場合、 Prometheus のようなプロジェクトは、データストリームを時系列データベースとして処理し、その情報を視覚化するのに役立ちます。

データを視覚化する一般的な方法の1つは、以前はELKスタックと呼ばれていた ElasticStackを使用することです。 データ収集用のLogstash、データのインデックス作成用のElasticsearch、視覚化用のKibanaで構成されるElasticスタックは、ビッグデータシステムで使用して、計算結果や生のメトリックと視覚的にインターフェースできます。 同様のスタックは、インデックス作成に Apache Solr を使用し、視覚化にBananaと呼ばれるKibanaフォークを使用して実現できます。 これらによって作成されたスタックは、Silkと呼ばれます。

インタラクティブなデータサイエンス作業に通常使用されるもう1つの視覚化テクノロジーは、データの「ノートブック」です。 これらのプロジェクトでは、共有、提示、または共同作業に役立つ形式でデータをインタラクティブに探索および視覚化できます。 このタイプの視覚化インターフェースの一般的な例は、 JupyterNotebookおよびApacheZeppelinです。

ビッグデータ用語集

ガイド全体で使用した概念を定義しようとしましたが、専門用語を1か所で利用できると便利な場合があります。

  • ビッグデータ:ビッグデータは、データセットの総称であり、ボリューム、速度、多様性のために、従来のコンピューターやツールでは合理的に処理できません。 この用語は通常、このタイプのデータを処理するためのテクノロジーと戦略にも適用されます。
  • バッチ処理:バッチ処理は、大規模なセットのデータを処理することを含むコンピューティング戦略です。 これは通常、非常に大量のデータセットを操作する時間に敏感でない作業に最適です。 プロセスが開始され、後でシステムから結果が返されます。
  • クラスターコンピューティング:クラスターコンピューティングは、複数のマシンのリソースをプールし、それらの集合的な機能を管理してタスクを完了する方法です。 コンピュータークラスターには、個々のノード間の通信を処理し、作業の割り当てを調整するクラスター管理レイヤーが必要です。
  • データレイク:データレイクは、比較的生の状態で収集されたデータの大規模なリポジトリを表す用語です。 これは、構造化されておらず、頻繁に変更される可能性のあるビッグデータシステムで収集されたデータを参照するために頻繁に使用されます。 これは、データウェアハウス(以下に定義)とは精神的に異なります。
  • データマイニング:データマイニングは、大量のデータセットからパターンを見つけようとする実践の広義の用語です。 これは、大量のデータをより理解しやすくまとまりのある情報のセットに洗練しようとするプロセスです。
  • データウェアハウス:データウェアハウスは、分析とレポートに使用できるデータの大規模な順序付けられたリポジトリです。 データレイクとは対照的に、データウェアハウスは、クリーンアップされ、他のソースと統合されたデータで構成されており、一般的に整理されています。 データウェアハウスはビッグデータに関連してよく言われますが、通常は従来のシステムのコンポーネントです。
  • ETL :ETLは、抽出、変換、および読み込みの略です。 これは、生データを取得し、システムで使用できるように準備するプロセスを指します。 これは従来、データウェアハウスに関連するプロセスですが、このプロセスの特徴は、ビッグデータシステムの取り込みパイプラインにも見られます。
  • Hadoop :Hadoopは、ビッグデータで初期のオープンソースの成功を収めたApacheプロジェクトです。 これは、HDFSと呼ばれる分散ファイルシステムで構成され、クラスター管理とリソーススケジューラがYARN(Yet Another Resource Negotiator)と呼ばれます。 バッチ処理機能は、MapReduce計算エンジンによって提供されます。 他の計算および分析システムは、最新のHadoopデプロイメントでMapReduceと一緒に実行できます。
  • インメモリコンピューティング:インメモリコンピューティングは、作業データセットをクラスターの集合的メモリ内に完全に移動することを含む戦略です。 中間計算はディスクに書き込まれず、代わりにメモリに保持されます。 これにより、Apache Sparkのようなインメモリコンピューティングシステムは、HadoopのMapReduceのようなI/Oバウンドシステムよりも速度が大幅に向上します。
  • 機械学習:機械学習は、提供されたデータに基づいて学習、調整、改善できるシステムを設計するための研究と実践です。 これには通常、より多くのデータがシステムを流れるときに「正しい」動作と洞察に継続的に焦点を当てることができる予測および統計アルゴリズムの実装が含まれます。
  • Map Reduce(ビッグデータアルゴリズム):Map Reduce(HadoopのMapReduce計算エンジンではなくビッグデータアルゴリズム)は、コンピューティングクラスターでの作業をスケジュールするためのアルゴリズムです。 このプロセスでは、問題の設定を分割し(異なるノードにマッピングし)、それらを計算して中間結果を生成し、結果をシャッフルしてセットのように整列させ、セットごとに1つの値を出力して結果を減らします。
  • NoSQL :NoSQLは、従来のリレーショナルモデルの外部で設計されたデータベースを指す広義の用語です。 NoSQLデータベースには、リレーショナルデータベースとは異なるトレードオフがありますが、柔軟性と頻繁な分散優先アーキテクチャにより、ビッグデータシステムに適していることがよくあります。
  • ストリーム処理:ストリーム処理は、個々のデータ項目がシステム内を移動するときにそれらを計算する方法です。 これにより、システムに供給されるデータのリアルタイム分析が可能になり、高速メトリックを使用した時間に敏感な操作に役立ちます。

結論

ビッグデータは幅広く、急速に進化するトピックです。 すべてのタイプのコンピューティングに適しているわけではありませんが、多くの組織は特定のタイプの作業負荷のビッグデータに目を向け、それを使用して既存の分析およびビジネスツールを補完しています。 ビッグデータシステムは、検出が困難なパターンを明らかにし、従来の方法では見つけることが不可能な動作への洞察を提供するのに非常に適しています。 ビッグデータを処理するシステムを正しく実装することにより、組織はすでに利用可能なデータから信じられないほどの価値を得ることができます。