1 数据倾斜
Shuffle
MR:reduce
Spark:task
100task 1-2task ===>执行时间拉长
能跑完
跑不出来==》重跑
打散 random
Sql.ApI (最常用的方式:Udf函数)
1)+随机数
2)-随机数
Spark UI
Job/Stage/task 数据量 排序===》task处理的数据量是多少
大表和小表
mapjoin
两个非常大的表 如何快速的join
2 Data Source API
数据:多种不同的格式的数据 存储在 不同的文件系统之中
json/text/parquet hdfs/s3/...
Hadoop:InputFormat /OutputFormat
Hive :Serde
Presto: Connector
......
read/write from/to
初始状态 RDD
HadoopRDD
HbaseRDD
CassandraRDD
========>
Spark RDD
Spark Sql
DataSource Api +DataFrame/DataSet
1) concurrent 支持高并发
2)distributed 分布式
3) filter 过滤掉不需要数据
4) data type能不能很好转换
5)clean up if write failed (atomic)
V1版本
RelationProvider 创建一个BaseRelation 参数(sqlContext)
abstract BaseRelation包含两个
sqlContext
scheme
Trait
Read
TableScan ====>select * from
PrunedScan =====>select a,b,c from
PrunedFilterScan===>select a,b,c from table where
val df =spark.read.format(“orc”).load(path)
Write
df.write.format("orc").save(path)
Trait InsertableRelation
V1 版本的特点:
优点: 简单
缺点:混杂RDD Row sqlContext DataFrame
写的方式挺难 重跑
RDD==>DataFrame/Dataset
V1 版本举例
V2 版本
spark-sql
(java)
interface DataSourceV2
ReadSupport Extends DataSourceV2 读取能力
DataSourceReader
readSchema
InputPartition<InnerRow>===>对应 Input split(mapreduce)
InputPartitionReader
next()
get()
实现类
SupportsPushDownFilters 减少读取数据的数据量
SupportsPushDownRequiredFilters
SupportsScanColumn
图形举例
写流程
3 JVM
User user = new User();
等号左边的user叫引用===》存在栈里面
等号右边的叫对象====》对象存在堆里面
强引用
软引用
弱引用
虚引用
强引用什么时候都不回收
软引用 内存够保留 内存不够删除
调整jvm 参数
常见的异常