【インタビュー】【スパーク】高度なビッグデータ(1)

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の概要、プロパティ、および原則。

  1. はじめに:RDD(Resilient Distributed Dataset):Sparkの最も基本的なデータ抽象化であるResilient DistributedDataset。

  2. 特徴

  • パーティション:データセットの基本的な構成要素。
  • 計算関数(computer(p、context)):RDDの各パーティションには、RDD間のパーティション変換を実現できる関数があります。
  • 依存関係(dependencies()):RDD間に依存関係があります。
  • パーティショナー(partitioner()):RDDフラグメンテーション関数
  • 地域(preferredLocations()):配達保管場所の計算。
  1. 例:WordCount RDD RDD
    3
フォローアップ1:rddを作成する方法はいくつありますか?
  1. コレクションの並行作成
val arr = Array(1,2,3,4,5)
val rdd = sc.parallelize(arr)
val rdd =sc.makeRDD(arr)
  1. 外部ファイルシステムを読み取ります。hdfsなど、またはローカルファイルの読み取り(最も一般的な方法)
val rdd2 = sc.textFile("hdfs://hdp-01:9000/words.txt")
// 读取本地文件
val rdd2 = sc.textFile(“file:///root/words.txt”)
  1. 親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

4

同じ 異なる
不変の分散データセット 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を実行できますが、その逆はできません。

変換:
1

フォローアップ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)とアプリケーションシナリオは何ですか?

回答:マップは各要素を操作することであり、フラットマップは各要素を操作して平坦化することです。
2

フォローアップ4:sortByとsortByKeyの違い
sortBy既可以作用于RDD[K] ,还可以作用于RDD[(k,v)]
sortByKey  只能作用于 RDD[K,V] 类型上。

5

フォローアップ5:groupByとgroupBykeyの違い6
フォローアップ6:groupBykeyとreduceByKeyの違いは何ですか?

reduceByKeyはパーティション内に集約されるため、より効率的です。一般に、大量のデータ計算で使用することをお勧めします。グループのみの場合は、groupByKeyを使用することをお勧めします。

5

フォローアップ7:デカルト座標と参加の違いは何ですか?

6

フォローアップ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スパーク内のパーティションとブロックとの間の関係を理解する方法は?

おすすめ

転載: blog.csdn.net/HeavenDan/article/details/112431164
おすすめ