首页 文章 精选 留言 我的

精选列表

搜索[快直播],共10000篇文章
优秀的个人博客,低调大师

Spark的快难道是以丧失正确性为代价的?

是的,Spark很快。但是它不保证它算出的值是对的,哪怕你要做的只是简单的整数累加。 Spark最著名的一篇论文是:《Spark: Cluster Computing with Working Sets》。当你读它的时候你需要明白:文中代码不保证计算结果是正确的。具体来说,它的Logistic Regression的代码在map阶段用到了accumulator。下面解释为什么这么做是错误的。 假设有这样一个简单的任务: input file的每一行是100个整数,要求竖着加下来 例如: 输入 1 2 3 4 5 ... 100 1 2 3 4 5 ... 200 1 3 3 4 5 ... 100 输出 3 7 9 12 15 ... 400 很简单,对吧?是个猪都会算。在hadoop上这个问题可以通过Map reduce来解决。首先把输入文件分成N个大小相等的块。然后每个块输出一行100个整数,如 2 4 6 8 10 ... 200 然后reducer接收每个mapper的输出结果,累加起来得到最终结果。 缺点是: 从mapper到reducer是需要DISK-IO及网络传输的。那么需要传输N*100个整数。当输入集的维数很大(每行有上百万个字节)的时候,很浪费。 spark很巧妙的引入了accumulator的概念。同一台机器上所有的task的输出,会先在这个机器上进行本地汇总,然后再发给 reducer。这样就不再是task数量*维数,而是机器数量*维数。会节省不少。具体来说,在做机器学习的时候,大家很习惯的用 accumulator来做这样的计算。 accumulator是被很careful设计的。比如,只有master节点能读取accumulator的值,worker节点不能。在“Performance and Scalability of Broadcast in Spark ”一文中,作者写到:“Accumulators can be defined for any type that has an “add” operation and a “zero” value. Due to their “add-only” semantics, they are easy to make fault-tolerant.” 。但真的是这样吗?并不是。 accumulator如果不是运行在运算的最后一环,那么正确性无法保证。因为accumulator不是map/reduce函数的输入或输出,accumulator是表达式求值中的side-effect。举个例子: valacc=sc.accumulator(0) data.map(x=>acc+=1;f(x)) data.count() //accshouldequaldata.count()here data.foreach{...} //Now,acc=2*data.count()becausethemap()wasrecomputed. 这个问题被spark的创始人Matei标为Won't Fix。 那么是不是写代码小心点不要触发重复计算就行了呢?也不是。task是有可能fail-retry的,再或者因为某一个task执行的慢,所以同时有它的多个副本在跑。这些都可能会导致accumulator结果不正确。 Accumulators只能用在RDD的actions中,不能用在Transformations。举例来说:可以在reduce函数中用,但是不能在map函数中用。 如果不用accumlators,但又想节省网络传输,那么Matei说:“I would suggest creating fewer tasks. If your input file has a lot of blocks and hence a lot of parallel tasks, you can use CoalescedRDD to create an RDD with fewer blocks from it. ” 意思就是说,那你就把task划分大一点,把task的数量减少。比如每台机器只有1个task。 Downside其实也很明显,任务的执行容易不balance。 本文作者:Changming 来源:51CTO

优秀的个人博客,低调大师

112期:红包峰会回顾资料来袭(视频+PDF),免费快取!

本期头条 对于80年代的人来说,网吧这个词都不陌生。那时候电脑还没有普及,学习需要时,我们去网吧下过资料、模拟过考试;任性的时候,也曾去网吧看过电影、玩过游戏;而就算现在,同事下班后,也会偶尔去三三两两开开黑。随着网吧衍变成网咖,环境更好、服务更多、体验更好,上网之外还可以休闲、喝咖啡。然而在大部分人看来,不管是网咖还是网吧,仿佛提供的也就是个上网的服务,但是你或许不知道的是,从你进入网鱼网咖的那一刻,你已经享受的时下最热门的服务——大数据。本期头条将带你走进年服务人次3300万+的网鱼网咖的大数据架构!点我查看。 • 专访佰腾科技大数据团队,谈专利大数据领域的挑战与实践 • 轻松处理每天2TB的日志数据,支撑运营团队进行大数据分析挖掘,随时洞

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册