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

前書き

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

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

ビッグデータとは?

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

  • 大規模なデータセット

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

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

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

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

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

ボリューム

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

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

速度

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

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

バラエティ

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

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

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

その他の特徴

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

  • * Veracity *:さまざまなソースと処理の複雑さにより、データの品質(および結果として得られる分析の品質)を評価する際に課題が生じる可能性があります。

  • 可変性:データのばらつきにより、品質に大きなばらつきが生じます。 低品質のデータを識別、処理、またはフィルター処理してより有用にするために、追加のリソースが必要になる場合があります。

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

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

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

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

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

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

  • データの計算と分析

  • 結果を視覚化する

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

より構造化されたアクセスのために、データを他の分散システムにインポートすることもできます。 分散データベース、特にNoSQLデータベースは、多くの場合同じフォールトトレラントを考慮して設計され、異種データを処理できるため、この役割に適しています。 データの整理方法と表示方法に応じて、さまざまな種類の分散データベースを選択できます。 いくつかのオプションとそれらが最適に提供する目的の詳細については、https://www.digitalocean.com/community/tutorials/a-comparison-of-nosql-database-management-systems-and-models [NoSQL比較ガイド]。

データの計算と分析

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

バッチ処理*は、大規模なデータセットを計算する1つの方法です。 このプロセスでは、作業を小さなピースに分割し、個々のマシンで各ピースをスケジューリングし、中間結果に基づいてデータを再編成し、最終結果を計算して組み立てます。 これらのステップは、しばしば個別に分割、マッピング、シャッフル、削減、およびアセンブルと呼ばれるか、または集合的に分散マップ削減アルゴリズムと呼ばれます。 これは、 Apache Hadoopの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 Apache SparkのMLlib などのプロジェクトが役立ちます。 ビッグデータエコシステムで幅広くサポートされているストレートアナリティクスプログラミングでは、 R Python *の両方が一般的な選択肢です。

結果の視覚化

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

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

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

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

ビッグデータ用語集

ガイド全体で使用した概念を定義しようとしましたが、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計算エンジンではなく、ビッグデータアルゴリズム)は、コンピューティングクラスターでの作業をスケジュールするためのアルゴリズムです。 このプロセスには、問題のセットアップを分割し(異なるノードにマッピングする)、それらを計算して中間結果を生成し、結果をシャッフルしてセットのように整列させ、各セットに単一の値を出力して結果を削減します。

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

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

結論

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

Related