0.質問の概要
1. Sparkの基本概念
1.1、Sparkの概要
1、Spark 1.X与Spark 2.X区别。
- 追问1:运行效率方面,Spark比MapReduce更高。请说明效率更高来源于Spark内置的哪些机制?
2、Spark与Flink。
3、Sparkstreaming和Flink做实时处理的区别。
1.2、Spark RDD
1、Spark RDD介绍,属性,原理。
- 追问1:创建rdd几种方式?
- 追问2:RDD中的数据在哪?
- 追问3:如果对RDD进行cache操作后,数据在哪里?
- 追问4:cache和checkPoint的区别?
2、RDD,DataFrame,DataSet的区别?
- 追问1:创建Dateset几种方式
- 追问2:三者联系、转化?
- 追问3:三者优缺点?
3、RDD支持哪几种类型的操作/算子分类?
- 追问1:Transformation有哪些算子,其作用是?
- 追问2:Action有哪些算子,其作用是?
- 追问3:map和flatMap的区别(x2)和应用场景?
- 追问4:sortBy 和 sortByKey的区别?
- 追问5:groupBy和groupBykey的区别?
- 追问6:groupBykey和reduceByKey的区别?
- 追问7:cartesian和join的区别?
- 追问8:聚合算子aggregate作用?……
4、Spark中RDD与Partition的区别
- 追问1:Block VS Partition?
1.1、Spark 概要
1. Spark1.XとSpark2.Xの違い。
- 1)パフォーマンス:SparkメモリとCPU使用率を最適化し、物理マシンのパフォーマンスの限界に近づきます。
- 2)機能:SparkSQL-統合されたDataFrameおよびDataSetAPI、SQL2003をサポート。SparkStreaming-StructuredStreamingが導入され、Spark MILib2.0が誕生しました。
フォローアップ1:運用効率の観点から、SparkはMapReduceよりも高くなっています。より高い効率のどのメカニズムがSparkの組み込みに由来するのか説明してください。
……
2.スパークとフリンク。
Sparkは、マイクロバッチモードで高速バッチ処理とストリーム処理を提供できます。Flinkのバッチ処理は、主にストリーム処理の拡張です。
3.リアルタイム処理のためのSparkstreamingとFlinkの違い。
……
1.2、Spark RDD
1. Spark RDDの概要、プロパティ、および原則。
-
はじめに:RDD(Resilient Distributed Dataset):Sparkの最も基本的なデータ抽象化であるResilient DistributedDataset。
-
特徴:
- パーティション:データセットの基本的な構成要素。
- 計算関数(computer(p、context)):RDDの各パーティションには、RDD間のパーティション変換を実現できる関数があります。
- 依存関係(dependencies()):RDD間に依存関係があります。
- パーティショナー(partitioner()):RDDフラグメンテーション関数
- 地域(preferredLocations()):配達保管場所の計算。
- 例:WordCount RDD RDD
フォローアップ1:rddを作成する方法はいくつありますか?
- コレクションの並行作成
val arr = Array(1,2,3,4,5)
val rdd = sc.parallelize(arr)
val rdd =sc.makeRDD(arr)
- 外部ファイルシステムを読み取ります。hdfsなど、またはローカルファイルの読み取り(最も一般的な方法)
val rdd2 = sc.textFile("hdfs://hdp-01:9000/words.txt")
// 读取本地文件
val rdd2 = sc.textFile(“file:///root/words.txt”)
- 親RDD(Transformationクラスメソッドを呼び出す)から新しい子RDDに変換します。
フォローアップ2:RDDのデータはどこにありますか?
データソース内。RDDは単なる抽象的なデータセットです。RDDを操作することで、データを操作するのと同じことになります。
フォローアップ3:RDDがキャッシュされている場合、データはどこにありますか?
キャッシュオペレータは、最初に実行されたときに各エグゼキュータプロセスのメモリにロードされ、2回目にはメモリから直接読み取られます。
フォローアップ4:キャッシュとcheckPointの違いは?
- 比較:キャッシュはRDD計算をメモリに入れますが、依存関係チェーンを失うことはありません。ノードがダウンした場合、上記のキャッシュのRDDは失われ、再計算する必要があります。チェックポイントはRDDをHDFSに保存します。複数のコピーのための信頼できるストレージ。したがって、依存関係チェーンは失われます。
- 包括的:チェックポイントはジョブを最初から再計算する必要があるため、RDDの永続性が実行されます。最初にキャッシュすることをお勧めします。チェックポイントはRDDをキャッシュに直接保存できます。再度計算する必要がないため、パフォーマンスが大幅に向上します。
2. RDD、DataFrame、DataSetの違いは何ですか?
-
1)RDD:クラスター内のノード全体に分散された不変の分散要素のコレクション。
-
2)DataFrame:2次元テーブルと同様に、RDDに基づく分散データセット。
-
3)DataSet:強く型付けされたドメイン固有のオブジェクト。各DataSetには、データセットの行であるDataFrameの型指定されていないビューがあります。
-
4)RDD VS DataFrame
同じ | 異なる |
---|---|
不変の分散データセット | DataFrameデータセットは、テーブルと同様に、指定された列、つまり構造化データに格納されます。 |
- 5)RDD VS DataSet
同じ | 異なる |
---|---|
- | DataSetはドメイン固有のオブジェクトのコレクションであり、RDDはオブジェクトのコレクションです。 |
- | DataSetは強く型付けされており、RDDではなく最適化に使用できます。 |
- 6)DataFrame VS DataSet
同じ | 異なる |
---|---|
- | DataFrameは弱い型であり、型は実行中にチェックされます。DataSetは強い型であり、コンパイル時にチェックされます。 |
- | DataFrameはJavaシリアル番号/ kyroシリアル化を使用します。DataSetはエンコーダーを介してシリアル化され、動的コード生成をサポートし、バイトレベルで直接ソートします。 |
フォローアップ1:日付セットを作成するいくつかの方法
……
フォローアップ2:3人の接触と変容?
連絡先:DataFrameとDataSetは、Spark2.Xで統合されたAPIを備えています。RDDは下部がより抽象的であり、DataFrame / DataSetはカプセル化用に最適化されているため、より使いやすくなっています。機能的には、RDDはより強力です。DataFrame/ DataSetはRDDを実行できますが、その逆はできません。
変換:
フォローアップ3:3つの長所と短所?
オブジェクト | 利点 | 不利益 |
---|---|---|
RDD | 1)強力:多くの組み込み関数操作は、構造化データまたは非構造化データの処理に便利です。2)オブジェクト指向プログラミング、安全な型変換。 | 1)構造化データ(SQL)の処理が面倒です。2)Javaのシリアル化にはコストがかかります。3)データはJavaヒープメモリに保存され、GCが頻繁に発生します。 |
DataFrame | 1)構造化データ処理が便利です。2)ターゲットを絞った最適化。シリアル番号はメタ情報を運ぶ必要がなく、データはヒープの外部に保存されるため、GCの数が減ります。3)Hive互換、HQL、UDFなどをサポートします。 | 1)コンパイル中はセキュリティチェックを行えません。2)オブジェクトのサポートは友好的ではありません。ROWオブジェクトはメモリに保存され、オブジェクトをカスタマイズすることはできません。 |
DataSet | 1)構造化データと非構造化データをサポートします。2)カスタムオブジェクトクエリをサポートします。3)オフヒープメモリストレージ、GCフレンドリー。4)型変換は安全で、コードは優れています。 | - |
- 公式の推奨事項は、DataSetを使用することです。
3. RDDはどのような種類の操作/オペレーター分類をサポートしていますか?
回答:[主に参考文献9から]
- 変換:レイジー機能は実装されません。
- アクション:このタイプのオペレーターに遭遇すると、プログラムは実際に実行されます。
注:遅延機能-遅延読み込み、計算チェーンの形成、中間結果の無駄の削減。
フォローアップ1:トランスフォーメーションの演算子とその機能は何ですか?
変換 | 効果 | 説明 |
---|---|---|
地図 | 元のRDDの各要素には、新しい要素との1対1のマッピングがあります。 | |
flatMap | 元のRDDの各要素は、関数を介して複数の新しい要素に変換され、セットに入れられて新しいRDDを形成します。 | |
フィルタ | フィルタ。 | |
連合 | 重複を削除せずに、同じタイプのRDDを結合します。 | |
明確な | 重くなります。 | |
デカルト | 2つのRDDのデカルト積を返します。 | |
groupBy | 要素に対応するキーを生成し、データをKey-Value形式に変換してから、キーを使用して同じ要素をグループにグループ化します。 | |
groupByKey | RDD内のデータに対してグループ化操作を実行し、(K、V)キーと値のペアで構成されるデータセットを呼び出し、(K、Seq [V])ペアのデータセットを返します。 | |
並び替え | 指定された条件に従って、RDDの各要素を並べ替えます。 | |
sortByKey | キーに従ってRDDの各要素を並べ替えます。 | |
ReduceByKey | キーに従って、RDDの各要素ペアに対して集計操作を実行します。 | |
参加する | 各RDD要素は結合操作を実行し、2つのRDDは同じキー要素を持ちます | |
値 | 2つのRDDの各要素ペアで結合操作を実行し、同じキーを持つ要素の値のデカルト積を取り、タイプ(key、(value1、value2))の値を返します |
フォローアップ2:アクションの演算子とその機能は何ですか?
アクション | 効果 | 説明 |
---|---|---|
foreach | 1つずつ印刷するなど、RDDの各要素の操作をカスタマイズします | |
saveAsTextFile | HDFS指定ディレクトリにデータを保存する | |
収集する | 分散RDDをスタンドアロンのscala配列配列として返す | |
カウント | RDD要素の数を返します |
フォローアップ3:mapとflatMapの違い(x2)とアプリケーションシナリオは何ですか?
回答:マップは各要素を操作することであり、フラットマップは各要素を操作して平坦化することです。
フォローアップ4:sortByとsortByKeyの違い
sortBy既可以作用于RDD[K] ,还可以作用于RDD[(k,v)]
sortByKey 只能作用于 RDD[K,V] 类型上。
フォローアップ5:groupByとgroupBykeyの違い
フォローアップ6:groupBykeyとreduceByKeyの違いは何ですか?
reduceByKeyはパーティション内に集約されるため、より効率的です。一般に、大量のデータ計算で使用することをお勧めします。グループのみの場合は、groupByKeyを使用することをお勧めします。
フォローアップ7:デカルト座標と参加の違いは何ですか?
フォローアップ8:集計演算子aggregateの役割は何ですか?
……
4.SparkでのRDDとパーティションの違い
回答:Sparkのパーティションは、最小単位である各ノードに分散され、複数のパーティションが一緒になってRDDを形成します。同じデータ(RDD)のパーティションサイズはさまざまであり、その数は、アプリケーションのオペレーターと初期データパーティションの数によって異なります。これが、エラスティック分散データセットと呼ばれる理由の1つです。
フォローアップ1:VSパーティションをブロックしますか?
回答:HDFSのブロックは、固定サイズと冗長性を備えた最小のストレージユニットです。一方、パーティションはRDDの最小の計算ユニットであり、固定されておらず、冗長性がなく、損失後に再計算できます。
4、参照
1. Aの(答え)2020ビッグデータのインタビューの質問のための実際の質問の概要
2. FLINKとスパーク競合する:エンジンの競争を計算するビッグデータの次の世代、浮き沈みを制御するのだろうか?
3. Spark2.xとSpark1.xとの関係
4. spark2.x spark1.xの上に作られたものは改善
5.道路(3)スパークRDD学習スパーク
6、スパークのコアコンセプトRDD
7、RDD、データフレームおよびデータセットの違いを
8 。でRDD、データフレームとデータセットの説明スパーク
9 reduceByKeyとgroupByKeyの[スパークシリーズ2]の差と使用
10スパーク内のパーティションとブロックとの間の関係を理解する方法は?