:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Spark at TalkingData

cialis erfaring cialis i norge hva er kamagra cialis efeitos secundarios cialis bula viagra effekt viagra norge viagra på nett viagra nettbutikk viagra infarmed levitra comprimidos cialis uten resept cialis pris levitra eller cialis kamagra gel comprar viagra farmacia
  • Jan 26 / 2015
  • 0
Tech

Spark at TalkingData

本文是TalkingData程序猿田永军在多年的工作实践中总结的一些经验,主页君在此分享给大家。看完此文有兴趣与作者本人交(gou)流(da)的筒子,可以关注TalkingData微信并给留言给主页君哦~

历史演变

  • 数据量:以前一天1-2TB,现在一天3-4TB
  • 数据格式JSON(解析非常慢)
  • Hadoop跑一天需要几个小时。一个月的数据无法跑,只能每天处理好再合并后处理月的,还是需要很长时间。
  • 用Spark跑,一天需要1-2个小时,量大后到2、3个小时,一个月的数据也可以跑,但是经常会OOM
  • 现在方法可以使ad-hoc,一天的量需要2min,一个月的一个小时。我们把每天的数据提前处理一天生成Parquet格式,大概需要就是用3个小时,以后的任务都从这个Parquet里面出,速度非常快。

 

Spark技巧和问题

  • reduceByKey / groupByKey

这个好多人都知道他们的区别,reduceByKey 是自带combine的,对于统计一类的效率会大大提高,但是groupByKey也有他的用处,比如我们对一个key的值的序列做一个非常复杂的计算,比如求这个序列的方差、标准差,再计算3倍标准差以内的平均。

  • 序列化

scala有闭包,spark会对闭包引用到的对象通过akka来通信发送,而如果对象没有实现Serializable接口,就会报错,如果数据比较大,注意一下frameSize的设置,如果小了可能会造成Timeout、失联。

  • 数据倾斜

对于有些key对应量非常大,shuffle很可能会出现oom或者timeout、失联

  • 找不到jar包

报一个 /xx/x/x.jar not a file or directory ,如果 –master yarn-cluster 会把 —jars下的jar包都发到每个worker上,一般不会出什么问题,由于粗心在代码里,本来要 setAppName 写成了 conf.setMaster 造成了找不到jar包,这个原因找了好久。–master yarn 这个,driver 是 spark-submit 的机器跑的 ,这个就要看是不是真存在jar包。

  • textFile( in ).collect.toSet()

猜一下这个返回的是什么结果?Set[String] ?结果却令我们很惊讶,结果是Boolean ,为什么?toSet() = toSet.apply() = toSet.apply( ():Unit ) ,返回的是Boolean,具体和Scala的类型推断有关系,网上有一些具体的介绍。

 

 

Leave a comment

随时欢迎您 联系我们