栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark 数据倾斜处理

Spark 数据倾斜处理

数据倾斜的问题优先从数据源解决,以下方法是辅助缓解:

(1)spark-sql任务,可以尝试distribute by () 某个字段或者可以确定唯一维度值(某几个联合字段) (2)参考文档调优: https://blog.csdn.net/lsshlsw/article/details/52025949 (3)数据倾斜的定位方法:

选取key,对数据进行抽样,统计出现的次数,根据出现次数大小排序取出前几个
spark-shell获取数据不均衡的数据

scala>val conf=new SparkConf().setAppName("SparkHive").setMaster("local")   //可忽略,已经自动创建了
scala>val sc=new SparkContext(conf)  //可忽略,已经自动创建了
scala>val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
scala>sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' ")//这里需要注意数据的间隔符
scala>sqlContext.sql("LOAD DATA INPATH '/user/spark/src.txt' INTO TABLE src ");
scala>val df=sqlContext.sql("SELECt id,name,price FROM db02.t1")
scala>val rdd=sc.makeRDD(Array('a','b','c','a','a'))
scala>val df1=rdd.toDF("name") //rdd转为dataframe
scala>df.select("price").sample(false,0.1).map(x=>(x.toString,1)).rdd.reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).take(10)

经过分析,倾斜的数据主要有以下三种情况:

null(空值)或是一些无意义的信息()之类的,大多是这个原因引起。无效数据,大量重复的测试数据或是对结果影响不大的有效数据。有效数据,业务导致的正常数据分布。 (4)解决办法

第1,2种情况,直接对数据进行过滤即可。
第3种情况则需要进行一些特殊操作,常见的有以下几种做法。
隔离执行,将异常的key过滤出来单独处理,最后与正常数据的处理结果进行union操作。
对key先添加随机值,进行操作后,去掉随机值,再进行一次操作。

(5)请注意,SQL中Join关联key使用rand()可能导致数据重复(丢失)问题
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/761038.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号