CodeGym/Java Course/All lectures for JA purposes/ビッグデータ: MapReduce

ビッグデータ: MapReduce

使用可能

3.1 ビッグデータという用語の出現の歴史

ビッグデータという用語は比較的最近登場しました。Google トレンドによると、2011 年以降、このフレーズの使用が活発に増加し始めていることが わかります。

同時に、今では怠け者だけがこの用語を使用しません。特にこの用語はマーケティング担当者によって不適切に使用されることがよくあります。では、ビッグデータとは実際何でしょうか? 問題を体系的に述べて強調することにしたので、概念を定義する必要があります。

私の実践では、さまざまな定義に遭遇しました。

  • ビッグ データとは、100 GB を超えるデータ (500 GB、1 TB、その他好きなもの) がある場合です。
  • ビッグデータとはExcelでは処理できないデータのことです。
  • ビッグデータとは、1台のコンピュータでは処理できないデータのことです。

そして、これらさえも:

  • ビッグデータは一般的にあらゆるデータを指します。
  • ビッグデータは存在せず、マーケターによって発明されました。

ウィキペディアからの定義に固執します。

ビッグデータは、継続的に成長し、コンピュータネットワークの多数のノードに分散され、形成された、人間が認識できる結果を得るために、膨大な量と大幅な多様性の構造化および非構造化データを処理するための一連のアプローチ、ツール、および方法です。 2000 年代後半には、従来のデータベース管理システムやビジネス インテリジェンス クラス ソリューションに代わるソリューションが登場しました。

したがって、ビッグデータによって、特定の量のデータやデータ自体ではなく、情報の分散処理を可能にするそれらの処理方法が理解されます。これらの方法は、小規模なデータセット (この講義のコンテンツなど) だけでなく、大規模なデータセット (インターネット上のすべてのページのコンテンツなど) にも適用できます。

ビッグ データ技術を必要とするデータ ソースの例をいくつか示します。

  • インターネット上でのユーザーの行動のログ
  • 運送会社向けの車からの GPS 信号
  • 大型ハドロン衝突型加速器のセンサーから取得したデータ
  • ロシア国立図書館のデジタル化された書籍
  • すべての銀行顧客のお取引に関する情報
  • 大手小売チェーンにおけるすべての購入に関する情報など。

データソースの数は急速に増加しており、これはデータ処理テクノロジーの需要がますます高まっていることを意味します。

3.2 ビッグデータの原則

ビッグ データの定義に基づいて、そのようなデータを扱う基本原則を定式化できます。

1. 水平方向のスケーラビリティ。任意の量のデータが存在する可能性があるため、大量のデータの処理を伴うシステムは拡張可能である必要があります。データ量は 2 倍に増加しました。クラスター内の鉄の量は 2 倍に増加しましたが、すべてが機能し続けました。

2. 耐障害性。水平スケーラビリティの原理は、クラスター内に多数のマシンが存在できることを意味します。たとえば、Yahoo の Hadoop クラスタには 42,000 台を超えるマシンがあります (このリンクで組織全体のクラスタ サイズを確認できます)。これは、これらのマシンの一部は確実に故障することを意味します。ビッグデータの実践では、こうした混乱を認識し、重大な影響を与えることなく生き残る必要があります。

3. データの局所性。大規模な分散システムでは、データが多数のマシンに分散されます。データが物理的に 1 つのサーバーに配置され、別のサーバーで処理される場合、データ転送のコストが処理自体のコストを超える可能性があります。したがって、BigData ソリューションを設計するための最も重要な原則の 1 つは、データの局所性の原則です。可能であれば、データを保存するのと同じマシン上でデータを処理します。

最新のビッグ データ ツールはすべて、何らかの形でこれら 3 つの原則に従っています。それらに従うためには、データ開発ツールを開発するためのいくつかの方法、手法、パラダイムを考え出す必要があります。最も古典的な方法の 1 つを今日の講義で分析します。

3.3 マップリデュース

MapReduce は、コンピューター クラスター上で大量のデータを処理するために Google が提案した分散データ処理モデルです。MapReduce は、次の図でよく説明されています。

MapReduce は、データがいくつかのレコードに編成されていることを前提としています。データ処理は 3 つの段階で行われます。

1.マップステージ。この段階では、ユーザーが定義したmap()関数を使用してデータが前処理されます。この段階の作業は、データの前処理とフィルター処理です。この操作は関数型プログラミング言語のマップ操作に非常に似ており、カスタム関数が各入力レコードに適用されます。

単一の入力レコードに適用される map() 関数は、多数のキーと値のペアを生成します。Set - つまり、1 つのレコードのみを返すことも、何も返さないことも、複数のキーと値のペアを返すこともできます。キーと値に何が含まれるかはユーザー次第ですが、将来的に 1 つのキーを持つデータは、reduce 関数の 1 つのインスタンスに分類されるため、キーは非常に重要です。

2. ステージシャッフル。ユーザーには気付かれないままです。この段階では、マップ関数の出力は「ビン化」されます。各ビンはマップ ステージの 1 つの出力キーに対応します。将来的には、これらのバスケットはリデュースの入力として機能します。

3. 段階を下げる。シャッフル段階で生成された値を含む各「バスケット」は、reduce() 関数の入力になります。

reduce 関数はユーザーによって指定され、単一の「バスケット」の最終結果を計算します。reduce() 関数によって返されるすべての値のセットが、MapReduce タスクの最終結果です。

MapReduce に関する追加の事実:

  1. マップ関数の実行はすべて独立して動作し、異なるクラスター マシン上でも並行して実行できます。
  2. Reduce関数の実行はすべて独立して動作し、異なるクラスター マシン上での実行も含めて並行して実行できます。
  3. Shuffle は内部的に並列ソートを表すため、異なるクラスター マシンでも動作します。ポイント 1 ~ 3 により、水平スケーラビリティの原則を実装できます
  4. マップ関数は通常、データが保存されている同じマシン上で使用されます。これにより、ネットワーク上のデータ送信が削減されます (データ局所性の原則)。
  5. MapReduce は常に完全なデータ スキャンであり、インデックスはありません。これは、非常に迅速な応答が必要な場合、MapReduce はあまり適用できないことを意味します。

3.4 MapReduce で効果的に解決されたタスクの例

単語数

古典的なタスクである単語数から始めましょう。このタスクは次のように定式化されます。大量の文書のコーパスがあります。タスクは、コーパス内で少なくとも 1 回出現する各単語について、コーパス内で出現する合計回数を計算することです。

解決:

大量のドキュメントのコーパスがあるため、1 つのドキュメントを MapRreduce タスクの 1 つの入力レコードとします。MapReduce では、ユーザー定義関数のみを定義できます。これを実行します (Python のような疑似コードを使用します)。

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

マップ関数は入力ドキュメントをペアのセット (word, 1) に変換し、透過的にシャッフルしてペア (word, [1,1,1,1,1,1]) に変換し、これらの合計を減らして返します。という単語の最終的な答え。

広告システムのログの処理

2 番目の例は、Data-Centric Alliance の実際の実践から取られたものです。

タスク:次の形式の広告システムの CSV ログがあります。

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

ロシアの都市で広告を表示する平均コストを計算する必要があります。

解決:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

マップ機能はこのエントリが必要かどうかをチェックし、必要な場合は必要な情報 (都市と支払い金額) のみを残します。reduce関数は、その都市のすべての支払いのリストを基に、その都市の最終的な答えを計算します。

コメント
  • 人気
  • 新規
  • 古い
コメントを残すには、サインインしている必要があります
このページにはまだコメントがありません