Spark概要

2180 ワード

1.より高いレベルでは、各sparkアプリケーションには、ユーザーのmain関数を呼び出し、クラスタ上で様々な並列操作を実行するドライバが含まれています.sparkの主な抽象は,RDDデータ型を提供することである.RDDデータ型は、クラスタ上で並列に動作可能に分割された要素のセットである.RDDは、HDFS上のファイル、ドライバの既存のセット、または既存のRDDを変換することによって作成することができる.ユーザはRDDを永続化し、メモリに保存して有効に再利用することもできる.RDDも失敗から自動的に復元されます.sparkの第2の抽象は並列に動作可能な共有変数である.デフォルトでは、sparkが関数を実行すると、異なるノードで独立したタスクが開始されます.sparkは2種類の共有変数、ブロードキャスト変数をサポートし、各ノードに値を保存し、累積変数は累積操作をサポートする.
2.spark初期化
SparkアプリケーションはまずJavaSparkContextオブジェクトを作成する必要があります
SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);
JavaSparkContext sc = new JavaSparkContext(conf);

appname設定は、クラスタUIに表示されるアプリケーション名、masterはYARNクラスタのURL、または文字列「local」はローカルモードを実行することを示す.spark-submitコマンドを使用してjarパッケージをコミットする場合は、--masterオプションで指定できます.
3.RDDの作成
RDDは、parallelizingのドライバにすでに存在するセットを参照するか、HDFS、HBAseなどの外部ストレージシステムを参照して作成できます.
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
JavaRDD<Integer> distData = sc.parallelize(data, 20);

集合並列化の重要なパラメータの1つは部数(slices)であり、各データはタスクに対応し、sparkはデフォルトでクラスタに基づいて自動的に部数を決定します.
JavaRDD<String> distFile = sc.textFile("data.txt", 20);

ファイル名がローカルファイルシステムの場合、すべてのワークノードの同じディレクトリでデータをコピーするか、ネットワーク共有ファイルシステムを使用する必要があります.すべてのsparkファイル入力方法では、ディレクトリ、圧縮ファイル、ワイルドカードもサポートされています.デフォルトでは、ブロックは1部(slice)に対応します.テキストファイルに加えて、sparkはJavaSparkContextなどの他のデータフォーマットをサポートします.wholeTextFiles,SequenceFiles.
4.RDDオペレーションは2つをサポートし、変換(transformation)は既存のデータセットに基づいて新しいデータセットを生成し、動作(action)はRDD上で計算を実行し、ドライバに値を返す.たとえば、mapはtransformationであり、すべてのデータ要素を1つの関数を介して、結果は新しいRDDを返し、reduceはactionであり、ある関数を使用してすべての要素を集約し、ドライバに結果を返します.すべてのtransformation操作は呼び出し後、すぐには実行されず、actionがドライバに結果を返す必要がある場合にのみ実行されます.このように設計すると、sparkの効率が向上し、例えば、1つのRDDを1つのmapを通過し、reduceを使用して1つの結果を返す必要がある場合、より大きなmap後のデータセットではなく、ドライバにreduceの結果を返すだけである.デフォルトのRDDはメモリに常に存在しません.persistメソッドまたはcacheメソッドの永続化を呼び出したり、RDDをハードディスクに永続化したり、複数のノードにバックアップしたりすることができます.
5.RDD transformationメソッド
map(T -> U)  filter(T -> Boolean)  flatMap(T -> Iterator)  mapPartitions(Iterator -> Iterator)
mapPartitionsWithIndex((int,Iterator) -> Iterator)  ...