LoginSignup
0
0

Spark RDDについてより深く調べてみた

Last updated at Posted at 2024-01-06

0.初めに

分散処理システムは、利用者はあまり分散処理のアルゴリズムをわかっていないくても、また意識しなくても
うまい具合にデータを処理してくれるので、利用する分には詳しくわかっていないくてもいいかもしれません
が、データの動きというのは分散処理には欠かせない技術なので
これがわかっておくだけでも、コードの記述なども理解しやすいと思います。

今回は、2つの資料を参考にしています。

1つめは、couseraでIBMが公開している講義になります。Sparkを中心として説明しています。
あまりこれにフォーカスした資料が意外とないもので、日本語訳もある程度機能しているので
是非!

2つ目は、NTTデータの土橋さんという方が公開しているSparkの資料になります。
これはとてもわかりやすく、実際の講義ではHands-onでSpark UIで説明していたりしているのでしょうか。参加してみたかった。。

1.RDDとは

Spark内のクラスターのノード間で分割された耐障害性のある要素の集まりのこと

そもそもクラスターとは、
同時に連携して、タスクを実行するコンピューターの集まりを指します。
分散処理には欠かせません。

2.RDDはSparkでどのように耐障害性を実現するのか?

不変性とキャッシュによってSparkのレジリエンス(回復性)を実現する
データが不変であるため、RDDは常に回復可能。
Sparkのもう一つの重要な機能は、操作を重ねてもデータセットをメモリに永続化またはキャッシュすること

キャッシュ自体は耐障害性があり、いつでも回復可能

2.1 例 PythonでのRDD作成

data = [1,2,3,4,5]
distData = sc.parallekize(data)

RDDは、部分故障への耐性を考慮した分散コレクションに対し、
典型的なデータ処理を繰り返して目的の結果を得ます。

入力⇨RDD⇨グルーピング⇨RDD⇨フィルター⇨RDD⇨集計

rdd.filter(...).resuceByKey(...)

このようにコレクション操作のように記述します。

これらの部分的な処理は、中間処理を都度出力する必要がないため、HDFSなどの外部分散ストレージへのI/Oが抑えられます

3.キャッシュの重要性

例えば、HDFSからジョブAがあって、データAを読み込むとします。
読み込んだ中間データはメモリにキャッシュされます。

別の処理ジョブBでデータAを使いたい場合、すでにキャッシュがあるので
それを利用すればよい。

同じデータを活用するシーンにおいて、ディスクI/Oが生じないので、処理が効率的というわけですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0