读取hdfs文件之后repartition 避免数据倾斜
场景一:
api:
textFile("hfds://....").map((key,value)).reduceByKey(...).map(实际的业务计算逻辑)
场景:hdfs的某个文件有183个block,他们的大小分布非常不均匀时,比如有的是200M,有的是1M,有的是10K。此时spark计算非常非常慢,通过web ui监视发现,有的task处理了好几百M的数据,有的
task之处理了几k,导致严重的数据倾斜。
其中stage0阶段有183个task,这个阶段几乎没有什么计算任务,主要就是从hdfs上读取数据,stage0一共读取了5.4G的压缩后的lzo数据,耗时在9.3Min左右。
让人痛苦的是,在reduceByKey时,reduce数量也是183个,从这里噩梦就开始了,耗时在2个多小时还没有计算完毕。
原因:默认情况下,spark 的初始rdd的partition数量和hdfs的block 数量大小一致,在上面这个场景下,初始rdd的partition个数就是183,并且后面的reduceByKey等都是183,可以通过在textFile之后
repartition一下,可以将次数设置的小一点,这样那些小的block就会聚合到一个parttion了。
2.场景2,groupByKey要比reduceByKey快
读取hdfs文件之后repartition 避免数据倾斜的更多相关文章
- Spark读取HDFS文件,任务本地化(NODE_LOCAL)
Spark也有数据本地化的概念(Data Locality),这和MapReduce的Local Task差不多,如果读取HDFS文件,Spark则会根据数据的存储位置,分配离数据存储最近的Execu ...
- Spark读取HDFS文件,文件格式为GB2312,转换为UTF-8
package iie.udps.example.operator.spark; import scala.Tuple2; import org.apache.hadoop.conf.Configur ...
- 记录一次读取hdfs文件时出现的问题java.net.ConnectException: Connection refused
公司的hadoop集群是之前的同事搭建的,我(小白一个)在spark shell中读取hdfs上的文件时,执行以下指令 >>> word=sc.textFile("hdfs ...
- python之小应用:读取csv文件并处理01数据串
目的:读取csv文件内容,把0和1的数据串取出来,统计出现1的连续次数和各次数出现的频率次数 先读取csv文件内容: import csv def csv_read(file): list = [] ...
- pig 自定义udf中读取hdfs 文件
最近几天,在研究怎么样把日志中的IP地址转化成具体省份城市. 希望写一个pig udf IP数据库采用的纯真IP数据库文件qqwry.dat,可以从http://www.cz88.net/下载. 这里 ...
- Spark设置自定义的InputFormat读取HDFS文件
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/problem_spark_reading_hdfs_serial ...
- java Api 读取HDFS文件内容
package dao; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import java ...
- Java读取json文件并对json数据进行读取、添加、删除与修改操作
转载:http://blog.csdn.net/qing_yun/article/details/46865863#t0 1.介绍 开发过程中经常会遇到json数据的处理,而单独对json数据进行 ...
- POI 读取Excel文件 并解析JSON数据
package skuPrice; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
随机推荐
- javascript学习笔记(2)————this
//简单的学习JavaScript中this关键词 //this在于我简单的理解就是谁调用了当前方法(函数),this就指向谁 var a = 20; function fn1(){ this.a = ...
- JSon解析
1.解析总是犯糊涂 在图中,[] 中括号表示是jsonarray,{} 小括号 表示对象 这个解析可以写成: JSONArray array=new JSONArray(result); for( ...
- 在CentOS下搭建自己的Git服务器
首先需要装好CentOS系统,作为测试,你可以选择装在虚拟机上,这样比较方便.这步默认你会,就不讲了.有了CentOS,那么如何搭建Git服务器呢?1.首先需要安装Git,可以使用yum源在线安装: ...
- Python flask @app.route
转载自 http://python.jobbole.com/80956/ 下面是Flask主页给我们的第一个例子,我们现在就由它入手,深入理解“@app.route()”是如何工作的. ...
- maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令
maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository. ...
- 【jQuery】--图片轮播
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HP QR Code 实现二维码
二维码简单点说就是图片中含有数据信息,可以是url链接,也可能是其他的 首先下载该类,(http://download.csdn.net/detail/cgjcgs/9100365) 然后直接引入该类 ...
- (3)WebApi客户端调用
1.创建一个应用台控制程序,可以把Model的引用,用下面的方法拖拽上来(解决方案里没有这个文件,只是这个文件的引用) 2.Program.cs using System; using System ...
- Delphi之通过代码示例学习XML解析、StringReplace的用法
这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <?xml version="1.0" encoding=&q ...
- Javascript、Jquery获取浏览器和屏幕各种高度宽度
Javascript: IE中:document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度d ...