ビッグデータの概念と用語の紹介

前書き

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

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

ビッグデータとは?

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

  • 大規模なデータセット

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

これに関連して、「大規模なデータセット」とは、従来のツールまたは単一のコンピューターで合理的に処理または保存するには大きすぎるデータセットを意味します。 これは、大きなデータセットの一般的な規模が常に変化しており、組織によって大きく異なる場合があることを意味します。

ビッグデータシステムが異なる理由

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

2001年、ガートナーのDoug Laneyは、「ビッグデータの3つのV」と呼ばれるようになったものを最初に発表し、ビッグデータを他のデータ処理と異なるものにするいくつかの特性を説明しました。

ボリューム

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

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

速度

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

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

バラエティ

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

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

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

その他の特徴

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

  • Veracity:ソースの多様性と処理の複雑さは、データの品質(したがって、結果の分析の品質)を評価する際の課題につながる可能性があります。

  • Variability:データの変動は、品質の大幅な変動につながります。 低品質のデータを特定、処理、またはフィルタリングして、より有用にするために、追加のリソースが必要になる場合があります。

  • Value:ビッグデータの究極の課題は価値を提供することです。 場合によっては、適切なシステムとプロセスが非常に複雑なため、データの使用と実際の価値の抽出が困難になる場合があります。

ビッグデータのライフサイクルはどのようなものですか?

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

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

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

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

  • データの計算と分析

  • 結果を視覚化する

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

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

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

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

  • Resource Pooling:データを保持するために使用可能なストレージスペースを組み合わせるのは明らかな利点ですが、CPUとメモリのプールも非常に重要です。 大規模なデータセットを処理するには、これら3つのリソースすべてが大量に必要です。

  • High Availability:クラスターは、さまざまなレベルのフォールトトレランスと可用性の保証を提供して、ハードウェアまたはソフトウェアの障害がデータへのアクセスと処理に影響を与えるのを防ぎます。 これは、リアルタイム分析の重要性を強調し続けるにつれてますます重要になります。

  • Easy Scalability:クラスターを使用すると、グループにマシンを追加することで、水平方向に簡単に拡張できます。 これは、システムがマシン上の物理リソースを拡張することなく、リソース要件の変化に対応できることを意味します。

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

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

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

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

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

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

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

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

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

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

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

データの計算と分析

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

Batch processingは、大規模なデータセットを計算する1つの方法です。 このプロセスでは、作業を小さなピースに分割し、個々のマシンで各ピースをスケジューリングし、中間結果に基づいてデータを再編成し、最終結果を計算して組み立てます。 これらのステップは、しばしば個別に分割、マッピング、シャッフル、削減、およびアセンブルと呼ばれるか、または集合的に分散マップ削減アルゴリズムと呼ばれます。 これは、Apache Hadoop’s MapReduceで使用される戦略です。 バッチ処理は、かなりの計算を必要とする非常に大きなデータセットを扱うときに最も役立ちます。

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

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

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

結果の視覚化

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

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

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

インタラクティブなデータサイエンスの作業で一般的に使用される別の視覚化テクノロジは、データの「ノートブック」です。 これらのプロジェクトは、共有、提示、または共同作業に役立つ形式でのデータのインタラクティブな調査と視覚化を可能にします。 このタイプの視覚化インターフェースの一般的な例は、Jupyter NotebookApache Zeppelinです。

ビッグデータ用語集

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

  • Big data:ビッグデータは、データセットの総称であり、その量、速度、多様性のために、従来のコンピューターやツールでは合理的に処理できません。 この用語は通常、このタイプのデータを処理するためのテクノロジーと戦略にも適用されます。

  • Batch processing:バッチ処理は、大きなセットのデータを処理することを含むコンピューティング戦略です。 これは通常、非常に大きなデータセットで動作する時間に依存しない作業に最適です。 プロセスが開始され、後でシステムから結果が返されます。

  • Cluster computing:クラスター化されたコンピューティングは、複数のマシンのリソースをプールし、それらの集合的な機能を管理してタスクを完了する方法です。 コンピュータークラスターには、個々のノード間の通信を処理し、作業の割り当てを調整するクラスター管理レイヤーが必要です。

  • Data lake:データレイクは、比較的生の状態で収集されたデータの大規模なリポジトリを表す用語です。 これは、構造化されておらず頻繁に変更される可能性のあるビッグデータシステムで収集されたデータを参照するために頻繁に使用されます。 これは、データウェアハウス(以下で定義)とは精神が異なります。

  • Data mining:データマイニングは、大量のデータセットからパターンを見つけようとする実践の広義の用語です。 これは、大量のデータを、より理解しやすくまとまりのある情報のセットに改良しようとするプロセスです。

  • Data warehouse:データウェアハウスは、分析とレポートに使用できる、データの大規模で順序付けられたリポジトリです。 data lakeとは対照的に、データウェアハウスは、クリーンアップされ、他のソースと統合されたデータで構成されており、一般的に秩序だっています。 データウェアハウスは多くの場合、ビッグデータに関連して話されますが、通常はより従来型のシステムのコンポーネントです。

  • ETL:ETLは、抽出、変換、および読み込みを表します。 生データを取得し、システムで使用するために準備するプロセスを指します。 これは伝統的にデータウェアハウスに関連付けられたプロセスですが、このプロセスの特性はビッグデータシステムの取り込みパイプラインにも見られます。

  • Hadoop:Hadoopは、ビッグデータで初期のオープンソースの成功を収めたApacheプロジェクトです。 これは、HDFSと呼ばれる分散ファイルシステムで構成され、YARN(Yet Another Resource Negotiator)と呼ばれるクラスター管理とリソーススケジューラが最上部にあります。 バッチ処理機能は、MapReduce計算エンジンによって提供されます。 最新のHadoop展開では、他の計算および分析システムをMapReduceとともに実行できます。

  • In-memory computing:インメモリコンピューティングは、作業データセットを完全にクラスタの集合的メモリ内に移動することを含む戦略です。 中間計算はディスクに書き込まれず、代わりにメモリに保持されます。 これにより、Apache Sparkなどのインメモリコンピューティングシステムは、HadoopのMapReduceなどのI / Oバウンドシステムよりも速度が大幅に向上します。

  • Machine learning:機械学習は、供給されたデータに基づいて学習、調整、改善できるシステムを設計するための研究と実践です。 これには通常、より多くのデータがシステムを通過するときに「正しい」動作と洞察を継続的にゼロにすることができる予測および統計アルゴリズムの実装が含まれます。

  • Map reduce (big data algorithm):Map reduce(HadoopのMapReduce計算エンジンではなくビッグデータアルゴリズム)は、コンピューティングクラスターでの作業をスケジュールするためのアルゴリズムです。 このプロセスには、問題のセットアップを分割し(異なるノードにマッピングする)、それらを計算して中間結果を生成し、結果をシャッフルしてセットのように整列させ、各セットに単一の値を出力して結果を削減します。

  • NoSQL:NoSQLは、従来のリレーショナルモデルの外部で設計されたデータベースを指す広義の用語です。 NoSQLデータベースは、リレーショナルデータベースと比較して異なるトレードオフがありますが、多くの場合、柔軟性と頻繁な分散優先アーキテクチャにより、ビッグデータシステムに適しています。

  • Stream processing:ストリーム処理は、個々のデータ項目がシステム内を移動するときにそれらを計算する方法です。 これにより、システムに供給されるデータのリアルタイム分析が可能になり、高速メトリックを使用した時間依存の操作に役立ちます。

結論

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