web-dev-qa-db-ja.com

sparkのRDDとは

定義によると:

RDDは不変のオブジェクトの分散コレクションです

それが何を意味するのかよくわかりません。ハードディスクに保存されたデータ(パーティション化されたオブジェクト)のようですか?もしそうなら、RDDがユーザー定義クラス(Javaなど、scalaまたはpython)

このリンクから: https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html それは言及しています:

ユーザーは2つの方法でRDDを作成します。外部データセットを読み込むか、ドライバープログラムでオブジェクトのコレクション(リストやセットなど)を配布する方法です。

RDDの一般的な理解とspark and hadoop。

誰か助けてください。

39
kittu

RDDは、基本的に、複数のマシンに分散したデータのセットのSpark表現であり、それに作用するAPIを使用します。RDDは、テキストファイルなどの任意のデータソースから取得できます。 JDBCなどを介したデータベース.

正式な定義は次のとおりです。

RDDはフォールトトレラントな並列データ構造であり、ユーザーが中間結果をメモリに明示的に保持し、パーティションを制御してデータ配置を最適化し、豊富な演算子セットを使用して操作できるようにします。

RDDとは何かについて詳しく知りたい場合は、コアのいずれかを読んでくださいSpark=学術論文、 Resilient Distributed Datasets:A Fault-Tolerant Abstraction for In-Memory Cluster Computing)

37
Ewan Leith

[〜#〜] rdd [〜#〜]は、datasetの論理参照であり、集まる。 [〜#〜] rdd [〜#〜]sは不変であり、障害が発生した場合に自己回復します。

datasetは、ユーザーが外部からロードしたデータです。 jsonファイル、csvファイル、または特定のデータ構造を持たないテキストファイルです。

enter image description here

[〜#〜] update [〜#〜]ここ はRDDの内部を説明する論文です:

お役に立てれば。

14
tharindu_DG

正式には、RDDは読み取り専用のパーティション化されたレコードのコレクションです。 RDDは、(1)安定したストレージ内のデータまたは(2)他のRDDのいずれかの決定論的操作によってのみ作成できます。

RDDには次のプロパティがあります–

  1. 不変性とパーティション分割:パーティション分割されたレコードのコレクションで構成されるRDD。パーティションはRDDの並列性の基本単位であり、各パーティションはデータの1つの論理的な分割であり、不変であり、既存のパーティションのいくつかの変換によって作成されます。

    ユーザーは、必要に応じて複数のデータセットを結合するキーに基づいて、独自のパーティション分割基準を定義できます。

  2. 粗視化操作:粗視化操作は、データセット内のすべての要素に適用される操作です。たとえば、RDDのパーティション内のすべての要素に対して実行されるマップ、フィルター、またはgroupBy操作。

  3. フォールトトレランス: RDDは一連の変換に対して作成されるため、実際のデータではなく、これらの変換をログに記録します。これらの変換のグラフは、1つのRDDを生成するために系統グラフと呼ばれます。

例えば ​​-

firstRDD=sc.textFile("hdfs://...")

secondRDD=firstRDD.filter(someFunction);

thirdRDD = secondRDD.map(someFunction);

result = thirdRDD.count()

RDDの一部のパーティションが失われた場合、複数のノード間でデータレプリケーションを行うのではなく、同じ計算を達成するために、そのパーティションで変換をリプレイで再生できます。データ管理とレプリケーションで、より高速な計算を実現します。

  1. 遅延評価: Sparkはアクションで初めて使用されたときにRDDを遅延計算し、変換をパイプライン処理できるようにします。したがって、上記の例ではRDDのみが評価されますcount()アクションが呼び出されたとき。

  2. 永続性:ユーザーは再利用するRDDを指定し、それらのストレージ戦略を選択できます(たとえば、メモリ内ストレージまたはディスクなど)。

RDDのこれらのプロパティにより、高速計算に役立ちます。

11
Mahesh

Resilient Distributed Dataset(RDD)は、方法Sparkはデータを表します。データはさまざまなソースから取得できます。

  • テキストファイル
  • CSVファイル
  • JSONファイル
  • データベース(JBDCドライバー経由)

Sparkに関連するRDD

Sparkは単にRDDの実装です。

Hadoopに関連するRDD

Hadoopの威力は、ユーザーが作業の分散とフォールトトレランスを心配することなく、並列計算を記述できるという事実にあります。ただし、Hadoopは中間結果を再利用するアプリケーションには非効率的です。たとえば、PageRank、K-meansクラスタリング、ロジスティック回帰などの反復機械学習アルゴリズムは、中間結果を再利用します。

RDDでは、中間結果をRAMに保存できます。 Hadoopは、ディスクI/Oとシリアル化を生成する外部の安定したストレージシステムに書き込む必要があります。 RDDの場合、Sparkは反復アプリケーションのHadoopよりも最大20倍高速です。

Sparkの実装の詳細

粗視化変換

RDDに適用される変換は粗粒度です。つまり、RDDの操作は、個々の要素ではなく、データセット全体に適用されます。したがって、map、filter、group、reduceなどの操作は許可されますが、set(i)やget(i)などの操作は許可されません。

粗視化の逆は細粒化です。きめ細かいストレージシステムはデータベースになります。

耐障害性

RDDはフォールトトレラントです。これは、コンポーネントの1つに障害が発生しても、システムが正常に動作し続けることができるプロパティです。

Sparkのフォールトトレランスは、そのきめの粗い性質に強くリンクしています。きめの細かいストレージシステムにフォールトトレランスを実装する唯一の方法は、マシン間でデータまたはログの更新を複製することです。ただし、Sparkのような粗粒度システムでは、変換のみがログに記録されますRDDのパーティションが失われた場合、RDDには十分な情報があり、すぐに再計算できます。

データストレージ

RDDはパーティションに「分散」(分離)されます。各パーティションは、マシンのメモリまたはディスクに存在できます。 Spark=パーティションでタスクを起動したい場合、彼はそのタスクをパーティションを含むマシンに送信します。これは「ローカル認識スケジューリング」として知られています。

出典:Spark:: http://spark.Apache.org/research.html に関する素晴らしい研究論文

ユアン・リースが提案した論文を含めてください。

8
pgirard

RDD =復元力のある分散データセット

弾力性のある(辞書の意味)=(物質または物体の)曲げ、引き伸ばし、または圧縮された後、反動または跳ね返ることができる

RDDは次のように定義されます(LearningSpark-OREILLYから):RDDを常に再計算する機能は、実際にはRDDが「回復力のある」と呼ばれる理由です。RDDデータを保持するマシンが失敗すると、Spark欠落しているパーティションをユーザーに対して透過的に再計算します。

これは、「データ」が常に利用可能であることを意味します。また、SparkはHadoopなしで実行できるため、データは複製されません。Hadoop2.0の最も優れた特性の1つは、パッシブスタンバイネームノードの助けを借りた「高可用性」です。 SparkのRDD。

特定のRDD(データ)は、Sparkクラスター(Hadoopベースのクラスターのように)のさまざまなノードにまたがることができます。

ノードがクラッシュした場合、SparkはRDDを再計算し、他のノードにデータをロードできます。データは常に利用可能です。Spark 弾力性のある分散データセット(RDD)。これは、並列操作可能な要素のフォールトトレラントコレクションです( http: //spark.Apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds

6
SPR

RDDをscalaコレクションと比較するには、以下のような違いがあります

  1. 同じですが、クラスター上で実行されます
  2. scalaコレクションは厳密です
  3. RDDは常に不変です。つまり、コレクション内のデータの状態を変更することはできません。
  4. RDDは自己回復型、つまりフォールトトレラントです
2
Saketh

[〜#〜] rdd [〜#〜][〜#〜] r [〜#〜] esilient[〜#〜] d [〜#〜]distributed[ 〜#〜] d [〜#〜]atasets)は、データを表すための抽象化です。正式には、便利なAPIを提供する読み取り専用のパーティション化されたレコードのコレクションです。

RDDは、いくつかの重要な問題に対処することにより、MapReduceなどのクラスターコンピューティングフレームワークで大規模なデータセットを処理するための高性能ソリューションを提供します。

  • データはメモリに保持され、ディスクI/Oが削減されます。これは、反復計算に特に関連しています。中間データをディスクに保持する必要はありません。
  • フォールトトレランス(復元力)は、データを複製するのではなく、初期データセット(lineage)に適用されるすべての変換を追跡することによって取得されます。このように、障害が発生した場合、失われたデータは常にその系統から再計算でき、データ複製を再度回避することでストレージのオーバーヘッドを削減できます
  • 遅延評価、つまり、必要なときに最初に計算が実行される

RDDには2つの主な制限があります。

  • それらは不変です(読み取り専用)
  • 粗視化変換(つまり、データセット全体に適用される操作)のみを許可します

RDDの概念上の利点の1つは、データとコードをまとめてパックし、データパイプラインを再利用しやすくすることです。

ソース: 復元性のある分散データセット:インメモリクラスターコンピューティングのフォールトトレラントな抽象化大規模クラスターでの高速で一般的なデータ処理のアーキテクチャ

0
user2314737

RDDは、データをSparkで表現する方法です。データのソースは、JSON、CSVテキストファイル、またはその他のソースです。 RDDはフォールトトレラントです。つまり、複数の場所にデータを格納する(つまり、データが分散形式で格納される)ため、ノードで障害が発生してもデータを回復できます。 RDDでは、データは常に利用可能です。ただし、RDDは遅く、コーディングが難しいため、時代遅れです。 DataFrameおよびDatasetの概念に置き換えられました。

0
Ahmed