【摘要】 花20分钟时间入门一个新领域,唐老师以一个生活中的例子,表达大数据框架Spark和Flink的各自特色。入门总结,请多指教。

作为网络老砖家(自封),唐老师本对大数据是一窍不通,在看完一系列《大数据从入门到放弃》丛书后,顿悟了一丢丢,跟大家分享下学习心得。

1 现有大数据资料仍有不足

当前网上的大数据资料一大把,但是对小白真的不友好。基本都是一上来就给你说怎么统计一个文本文件里面不同单词的出现次数(经典的wordcount)。我一个Go语言老砖家(再次自封)就纳闷了,单词统计不就我HelloWorld函数稍微润色下就可以做的事么。。

所以让唐老师来给你讲个听得懂的故事~

2 挑一个现实中的故事

假设我们要造鞋子:拿些原材料,加上几道工序:粘鞋底,粘鞋面,穿鞋带等。

这么一件事情,你一个人就可以搞定。

对应现实生活中,就是假设你拥有一个网站。现在每天有人来你网站购物,然后,你在第二天得统计:前一天,各个牌子的手机销量;以及哪些牌子最热门。

这里原材料就是:所有的订单记录 + 实际销售记录 + 浏览记录 + 搜索记录 这些日志,或者数据库记录等。

操作员(你的程序)干的活就是:各种统计方法。比如统计产品热度时,搜索+1分,浏览+3分,下单+6分,买单+10分。

然后每天,操作员干的活就是:处理这些原材料,并给出最终结果。

好了,让我们回到制鞋这件事情上来。

3 为什么工厂需要流水线?

然后某一天,突然来了一笔鞋子订单,量稍微大了点,限时一天交货:那么你的制鞋师傅怎么办?显然,想到的就是让制鞋的人提升性能呗。于是:

(A)换个手脚快的员工,(什么用Go语言重写,替换原来的Java啦)

(B) 换些麻利的工具,(更换新的高性能主机啊)

(C)优化制鞋流程,(App性能提升优化专项小组啦)

程序猿们忙的不亦乐乎~

然后,你老板的生意太好了,供不应求,都开始抢购了。于是某一天,老板把巨量的原材料“哗啦啦”的倒给你,让你一天后交货。并且告诉你,以后每天都需要生产这么大的量。

首先明确的是,你的程序,哦不,你家制鞋师傅,除非手速超频到光速,不然一天内,无论如何都处理不了这么多原材料。

所以你的选择只有:招更多的人组队干活。

4 分工是提升效率的关键

如何组队也是门学问,是单纯员工复制堆人头,还是上分工式的流水线呢?

嗯,《国富论》说分工是提升效率的关键,所以流水线赢一分。事实上,堆人头复制的话,对全局信息的处理也不好。比如一批鞋子全部完成后,老板问你,40码的总共有几双?你就只能干瞪眼。

分工协作 + 流水线,是现代大型工厂的特色。所以上这种,不会错的。

5 大规模制鞋开动

分工协作确定好后,流水线就可以开动了。大批量的材料就可以快速的被加工处理。

至于流水线里面的什么Map啊,Reduce之类的东西,基本就是你手里做完后怎么分配给下一道工序的问题,如:

上一道工序(a)做完,下一道工序(b)有好多人等着,你就得分一分发给他们。

或者好几道工序(a)(b)都做完,才汇总到工序(c)那里处理。

6 大数据划重点:取上游半成品

批量式处理嘛,每个工人只做自己的工序,做完后,是先放到自己的小篮筐里面的。等集满一筐了,再传给下一个环节去继续处理的。

所以下一道工序的工人,想要干活,得去上一拨工人的篮筐里面取过来。

敲黑板: 自取,也就“拿半成品”这件事可讲究了。

啊,这个篮筐呢,放的近,前后两个人拿取都很方便,那整个工人流水线效率就很高。

这个篮筐呢,放的远;或者存取不方便呢,整个流水进度就受影响。

注意啊,前后2个环节可能不止一个人的哦。

这个就是大数据里面所谓的 Shuffle 过程,“取上一步的半成品” 这个动作非常影响整体效率。造某些工序比较多的高端鞋子,shuffle会很多,有时候可以占到整个流程的2/3时间。也就是大家基本都在搬半成品,真正干活的时间很少。

7 原材料仓库vs半成品篮筐

所以,现在整个制鞋工厂基本清楚了:

仓库(原材料)---》工人流水线(干活)---》仓库(成品)。

那这里,我们其实不关心仓库长什么样。什么HDFS牌仓库啦,还是对象存储S3牌子仓库,都可以。然后,原材料仓库,和制成品仓库想不一样?当然也可以啊。

这里注意:仓库和篮筐的区别。

即:每道工序做完,都得从仓库中转一次。这样效率肯定比较低。就近放一个小篮筐,前后2个人都能够得到,效率就会快很多,对吧。

这就是为什么大数据一定要用【高速本地存储】的原因。当然,你也可以把半成品往远端的仓库放,这样整个制鞋过程照样能运转,只是整体进度变慢了而已。

8 那Spark和Flink在干啥咧?

上面那个【中转篮筐】,就是Spark的特色。批量处理嘛,非得等一小波原材料处理完,攒一攒满一筐了,然后再一筐一筐的往后传递,给下一个工人。你想,比较原始的工作作坊是不是这样子的?三大姑家做完鞋底,送到四大妈家继续做鞋面。

那有没有更高效的方式呢?当然有了,那就是【真.流水式】生产线。一道工序干完,马上放入传输带,传给下一个人。中间不需要篮筐来中转。

一想到现代化的高科技自动流水线都长这样,所以感觉【真.流水式】就比Spark那种作坊式高级一丢丢。因为脱离的对本地高速篮筐的强依赖,只要工人够快够多,再多原材料都分分钟在流水线上处理干干净净。

而且,生产线扩容也方便,哪个环节慢了,加大这个环节的员工数量就行。上一环节往后面送货的时候,考虑分发得均匀些就成。这个大概就是为什么 Flink 比较香的原因吧。

9 当前大数据工厂的问题

作为一个高端的流水线工厂,应该对操作工人没有太多要求才对。按理来说,找个人往工位上一插,他就负责完成该环节的任务就完了,管他自己长得高矮胖瘦呢。

嗯,然而现在的Spark工厂和Flink工厂,还是不够先进。因为它们挑人,不姓Java的员工,都不一定能把材料送你手上。你要是敢姓Go,那工厂都别想进了。

也许流水线工位上面怎么拧螺丝,这个动作,还没有标准化定义吧。

10  关键术语翻译

大数据框架(比如Spark,和Flink)是自动化流水线,但是怎么操作材料还得老板重新设计。这也就是为什么要还写Spark应用/Flink应用的原因。你得定义原材料怎么操作呀,Flink框架只是负责【传输带】和【流水线工位】管理这些工厂层面的事情,比如很方便的扩展出新的工位。

反压,很好理解。你下一环节那个工人说,他忙不过来了,需要给他那个环节加派人手。所以每个环节都可以扩缩容,这也是一个流水线工厂应该具备的功能。

Plan执行计划,额,这个就好比工厂流水线设计图了。所以你看Flink代码,不管前面怎么写,只有最后调用execute函数,才是丢到工厂里面去开动~

可靠性。像Spark这种,只要上一步的篮筐里面有东西,那么上一位员工离开上个厕所都无所谓啦(毕竟你取货还是能取到)。像Flink这种,如果员工挂了,就得把累积未处理的材料,给新来的员工重新发一遍。

11  结语

一点学习心得,不足之处多多指正。毕竟网络老砖家嘛 ~

作者:tsjsdbd

【华为云技术分享】唐老师带你秒懂大数据,以及Spark和Flink在干啥咧相关推荐

  1. 【华为云技术分享】【一统江湖的大前端】PPT制作库impress.js

    <一统江湖的大前端>系列是笔者的学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.今天要介绍的是大前端PPT制作库impress.js. ...

  2. 【华为云技术分享】【一统江湖的大前端(8)】matter.js 经典物理

    [摘要] 介绍前端物理引擎matterjs基本使用及实战 示例代码托管在:http://www.github.com/dashnowords/blogs  在前端开发领域,物理引擎是一个相对小众的话题 ...

  3. 【华为云技术分享】解析数据治理在过程可信变革中的运作流程

    摘要:本文针对"数据牵引改进,工具固化规范"这一思路在业务团队落地过程中的动作流程进行详细阐述,并明确了支撑整个流程的关键角色定义和组织运作形式. 目的 为实现云服务开发的过程可信 ...

  4. 【华为云技术分享】大数据实践解析(下):Spark的读写流程分析

    摘要:本文通过简单的例子来解析,大数据实践中的Spark读写流程,内容主要聚焦于Spark中的高效并行读写以及在写过程中如何保证事务性. 导读: 众所周知,在大数据/数据库领域,数据的存储格式直接影响 ...

  5. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  6. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  7. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  8. 技术分享:如何用Solr搭建大数据查询平台

    技术分享:如何用Solr搭建大数据查询平台 0×00 开头照例扯淡 自从各种脱裤门事件开始层出不穷,在下就学乖了,各个地方的密码全都改成不一样的,重要帐号的密码定期更换,生怕被人社出祖宗十八代的我,甚 ...

  9. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读

    3月24日14:00-17:00,HDC.Cloud开发者沙龙系列云数据库专场直播线上开启,此次华为云数据库通过三场直播从NoSQL数据库新技术.数据库迁移.行业解决方案等方面对云端数据库进行深度解读 ...

最新文章

  1. C# Windows CE使用小技巧实例
  2. 一 如何检查oracle的归档日志及空间占用率,清除归档日志、Oracle归档日志使用情况查询、查看oracle数据库一周产生的归档日志
  3. 在windows7家庭版安装软件时可能存在的问题
  4. 一个简单的划词翻译工具
  5. clion配置opencv
  6. poj2112,最大流,最优挤奶方案
  7. 10款微信公众平台相关的开源软件
  8. 干货!底层视觉研究,我们应该往哪里走?
  9. ALM / QC 64-bit Patch 12 S-Chinese
  10. 开关电源模块并联供电系统_电磁兼容(EMC)-开关电源中X电容与Y电容的作用
  11. 点赋网络:网店详情页设计中应包含哪些设计元素
  12. 【制作fnt格式字体】 BMFont中文字体图集制作的方法~
  13. 云服务器文件打包,如何把云服务器的文件打包出来
  14. 基于MATLAB的说话人识别系统
  15. 红心大战c语言程序设计,Win 7系统安全优化、瘦身攻略(2)
  16. win7系统安装 cygwin 的详细步骤
  17. 【NLP】Praat库(1) 安装及初步使用
  18. 超强的360Amigo系统加速大师
  19. Vs2005 智能提示功能 提示框来的快去的也快!
  20. 在COVID-19大流行期间如何在家工作:我的个人提示

热门文章

  1. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践
  2. python 带随机指针的链表深度复制_链表--深度拷贝一个带有随机指针的链表
  3. matlab考试题烟台大学,徐骞-计算机控制与工程学院
  4. python中mean算函数吗_Python numpy.mean函数方法的使用
  5. mysql5.7 innodb myisam 区别_InnoDB与MyISAM的区别(高性能MySQL笔记)
  6. golang之终端操作,文件操作
  7. mysql-The-server-quit-without-updating-PID-file
  8. python常用模块:pickle、shelve、json、xml、configparser
  9. 网易云免费OSS服务用做Markdown图床或博客图片外链
  10. 公司的故事之老板的平衡术