Spark SQLパフォーマンスの最適化
1.メモリ内のキャッシュテーブルのデータ
Scalaコードspark-shell --master spark://hadoop1:7077 --jars /root/temp/mysql-connector-java-8.0.13.jar --driver-class-path /root/temp/mysql-connector-java-8.0.13.jar
val mysql = spark.read.format("jdbc").option("user","destiny").option("password","destiny").option("url","jdbc:mysql://192.168.138.1:3306/data?serverTimezone=GMT%2B8").option("dbtable","employee").load
mysql.createOrReplaceTempView("employee")
spark.sqlContext.cacheTable("employee")
spark.sql("select * from employee").show
その結果
第二に、パフォーマンス最適化関連のパラメーター
(1)メモリ内のデータキャッシュ用に最適化されたパラメーター
spark.sql.inMemoryColumnarStorage,compressed
デフォルトはtrueです
Spark SQLは、統計情報に基づいて各列のYassoエンコード方式を自動的に選択します
spark.sql.inMemoryColumnarStorage.batchSize
デフォルトは10000です。
キャッシュバッチサイズ。データをキャッシュするとき、バッチサイズを大きくすると、メモリ使用率と圧縮率が向上しますが、COM(メモリ不足)のリスクもあります。
(2)その他のパフォーマンス関連の構成オプション(手動での変更は推奨されません)
spark.sql.files.maxPartitionBytes
デフォルトで128MB
ファイルを読み取るときに単一のパーティションが保持できる最大バイト数
spark.sql.files.openCostInBytes
デフォルトは4Mです
ファイルを開くための推定コストは、同時にスキャンできるバイト数で測定されます。パーティションに複数のファイルを書き込むときに使用されます。過大評価が優れているため、小さなファイルパーティションは大きなファイルパーティションよりも高速になります。
spark.sql.autoBroadcastJoinThreshold
デフォルトは10Mです
結合操作の実行時にテーブルがすべてのワーカーノードにブロードキャストできる最大バイトサイズを構成するために使用されます。この値を-1に設定すると、ブロードキャストを無効にすることができます。現在のデータ統計は、ANALYZE TABLE COMPUTE STATISTICE noscanコマンドを実行したHive Metastoreテーブルのみをサポートすることに注意してください
spark.sql.shuffle.partitions
デフォルトは200です。
結合または集計操作でデータをシャッフルするときに使用されるパーティションの数を構成するために使用されます