spark = SparkSession.builder.\
appName("create df").\
master("local[*]").\
config("spark.sql.shuffle.partitions", "2").\
getOrCreate()
运行程序时,查看WEB UI监控页面发现,某个Stage中有200个Task任务,也就是说RDD中200分区Partition可以设置在:配置文件:conf/spark-defaults.conf: spark.sql.shuffle.partitions 100在客户端提交参数中:bin/spark-submit --conf "spark.sql.shuffle.partitions=100"在代码中可以设置:spark = SparkSession.builder.\ app
spark.reducer.maxSizeInFlight 48m reduce task的buffer缓冲,代表了每个reduce task每次能够拉取的map side数据最大大小,如果内存充足,可以考虑加大,从而减少网络传输次数,提升性能
spark.shuffle.blockTransferService netty shuffle过程中,传输数据的方式,两种选项,netty或nio,spark 1.2开始,默认就是netty,比较简单而且性能较高,spark 1.5开始nio就是过期的了,而且spark 1.6中会去除掉
spark.shuffle.compress true 是否对map side输出的文件进行压缩,默认是启用压缩的,压缩器是由spark.io.compression.codec属性指定的,默认是snappy压缩器,该压缩器强调的是压缩速度,而不是压缩率
Spark SQL 小文件问题1、 小文件现象2、小文件产生的原因3、小文件的危害4、如何解决小文件问题4.1 spark-sql adaptive框架解决小文件问题4.2 举例
1、 小文件现象
文件大小只有几KB,数量有4800个。
2、小文件产生的原因
在使用spark sql处理数据的过程中,如果有shuffle产生,依赖于spark.sql.shuffle.partitions配置信息,默认为200,当处理的数据量比较大时,通常会把该值调大,以避免单个分区处理的数据太大出现异常或者拖慢整个任务
spark中有partition的概念,每个partition都会对应一个task,task越多,在处理大规模数据的时候,就会越有效率。不过task并不是越多越好,如果平时测试,或者数据量没有那么大,则没有必要task数量太多。
我的第一个query程序,有200个task,我改成了50个,节约了1s左右。
参数可以通过spark_home/conf/spark-default.
谈谈spark.sql.shuffle.partitions和 spark.default.parallelism 的区别及spark并行度的理解spark.sql.shuffle.partitions和 spark.default.parallelism 的区别spark并行度的理解如何设置spark.sql.shuffle.partitions和spark.default.parallelism的值
spark.sql.shuffle.partitions和 spark.default.parallel
当不跟随父对象partition数目的shuffle过程发生后,结果的partition会发生改变,这两个参数就是控制这类shuffle过程后,返回对象的partition的
经过实测,得到结论:
spark.sql.shuffle.partitions 作用于dataframe(val df2=df1.shuffle算子(如df1.orderBy()),的df2的partition就是这个参...
1 代表job页面,在里面可以看到当前应用分析出来的所有任务,以及所有的excutors中action的执行时间。
2 代表stage页面,在里面可以看到应用的所有stage,stage是按照宽依赖来区分的,因此粒度上要比job更细一些
3 代表storage页面,我们所做的cache persist等操作,都会在这里看
Spark的shuffle是指将数据重新分区和排序的过程。shuffle的执行、计算和处理主要由ShuffleManager组件负责。在Spark中,有两种主要的ShuffleManager模式:HashShuffleManager和SortShuffleManager。在Spark 1.2之前,默认的shuffle计算引擎是HashShuffleManager。 Shuffle操作包括Shuffle Write(存盘)和Shuffle Read(fetch)两个阶段,而不同的ShuffleManager模式在Shuffle Write阶段有不同的实现方式。HashShuffleManager使用哈希算法将数据分区并写入磁盘。除了HashShuffleManager和SortShuffleManager,还有一种特殊的模式叫做bypass SortShuffleManager,其原理是通过绕过排序操作来提高性能。具体来说,当满足一定条件时(例如shuffle map task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值,并且不是聚合类的shuffle算子),bypass SortShuffleManager会采用一种更高效的机制来执行Shuffle操作。
Python~TypeError: array() takes from 1 to 2 positional arguments but 3 were given
xcpppig: