老曹眼中的Lambda

“ λ ”像一个双手插兜儿,独自行走的人,有“失意、无奈、孤独”的感觉。λ 读作Lambda,是物理上的波长符号,放射学的衰变常数,线性代数中的特征值......在程序和代码的世界里,它代表了函数表达式,系统架构,以及云计算架构。

代码中的Lambda

Lambda表达式基于数学中的λ演算得名,可以看作是匿名函数,可以代替表达式,函数,闭包等,也支持类型推论,可以远离匿名内部类。

为什么使用Lambda呢?

  1. 代码更紧凑
  2. 拥有函数式编程中修改方法的能力
  3. 有利于多核计算

Lambda的目的是让程序员能够对程序行为进行抽象,把代码行为看作数据。

Java

Java 8的一个大亮点是引入Lambda表达式,在编写Lambda表达式时,也会随之被编译成一个函数式接口。

一个典型的例子是文件类型过滤  :


File dir = new File("/an/dir/");
  FileFilter directoryFilter = new FileFilter() {      public boolean accept(File file) {         return file.isDirectory();
     }
};

用lambda 重写后:


File dir = new File("/an/dir/");  File[] dirs = dir.listFiles((File f) -> f.isDirectory());

Lambda 表达式本身没有类型,因为常规类型系统没有“Lambda 表达式”这一内部概念。

Python

与其它语言不同,Python的Lambda表达式的函数体只能有唯一的一条语句,也就是返回值表达式语句。Python编程语言使用lambda来创建匿名函数。

一个典型的例子是求一个列表中所有元素的平方。

一般写法:


def sq(x):
   return x * x

map(sq, [y for y in range(108)])

使用Lambda 的写法:


map( lambda x: x*x, [y for y in range(108)] )

在spark 中,用python 操作RDD时,Lambda 更是随处可见。


out_rdd = in_rdd.filter( # filter the empty record
         lambda x:x[1] is not None and x[1] != {}
              ).map(
         lambda x:utils.parse_data(x[1],es_relations)
              ).filter( # filter the empty record  
         lambda x:x is not None
              ).filter( # filter the record  
         lambda x:x[u'timestamp']>time_start)

大数据架构中的Lambda

Lambda架构的目标是设计出一个能满足实时大数据系统关键特性的架构,包括有:高容错、低延时和可扩展等。Lambda架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂性隔离等一系列架构原则,可集成Hadoop,Kafka,Storm,Spark,Hbase等各类大数据组件。

大数据Lambda 架构

Batch Layer进行预运算的作用实际上就是将大数据变小,从而有效地利用资源,改善实时查询的性能。主要功能是:

  • 存储Master Dataset,这是一个不变的持续增长的数据集
  • 针对这个Master Dataset进行预运算

Serving Layer就要负责对batch view进行操作,从而为最终的实时查询提供支撑。主要作用是:

  • 对batch view的随机访问
  • 更新batch view

speed layer与batch layer非常相似,它们之间最大的区别是前者只处理最近的数据,后者则要处理所有的数据。另一个区别是为了满足最小的延迟,speed layer并不会在同一时间读取所有的新数据,在接收到新数据时,更新realtime view,而不会像batch layer那样重新运算整个view。speed layer是一种增量的计算,而非重新运算(recomputation)。Speed Layer的作用包括:

  • 对更新到serving layer带来的高延迟的一种补充
  • 快速、增量的算法
  • 最终Batch Layer会覆盖speed layer

大数据系统一般具有如下属性:

  • 健壮性和容错性(Robustness和Fault Tolerance)
  • 低延迟的读与更新(Low Latency reads and updates)
  • 可伸缩性(Scalability)
  • 通用性(Generalization)
  • 可扩展性(Extensibility)
  • 内置查询(Ad hoc queries)
  • 维护最小(Minimal maintenance)
  • 可调试性(Debuggability)

个人觉得,有了spark streaming 之后,spark 本身就是一种Lambda架构。

云计算中的Lambda

云计算中的Lambda,是指serverless architecture,无需配置或管理服务器即可运行代码。借助 Lambda,几乎可以为任何类型的应用程序或后端服务运行代码,而且全部无需管理。

以AWS 为例,云计算中的Lambda 示意流程如下:

AWS Lambda

只需上传代码,Lambda 会处理运行和扩展高可用性代码所需的一切工作。还可以将代码设置为自动从其他服务触发,或者直接从任何 Web 或移动应用程序调用。

ETL 是数据挖掘与数据分析中的必备环节,可以方便的通过AWS的Lambda实现,示例如下:

ETL 的Lambda 实现

其实,在spark 上实现Lambda 云服务也不是太费力的事。

总之,了解越多,越会喜欢上它,神奇而有趣的Lambda。


本文转载自微信公众号 中生代技术 freshmanTechnology

时间: 2024-11-05 17:48:24

老曹眼中的Lambda的相关文章

老曹眼中的全栈架构师

看一下工程师和架构师的区别,简单地,工程师关注的是功能和代码性能,而架构师关注的是业务和系统的性能等非功能性约束.全栈不是全能,只要覆盖了所使用的技术栈就是全栈,例如LNMP,Linux+Nginx+Mysql+PHP.全栈架构师关注的是业务所采纳的全部技术栈,以及技术栈所涉及的系统性能.安全,高可用等诸多因素. 全栈(full stack developer)好像起源于facebook中对工程师的一种称谓,全栈架构师估计是老曹的杜撰.全栈的出现大概有4个方面:系统的性能瓶颈定位,团队间的沟通障

老曹眼中的敏捷开发【中生代北京闭门会实录】

引言 世界上不存在这样一种方法: 只要套用,就可以写出完美的软件,无论使用的哪种设计模式: 但确实可能存在一种开发方式,可以帮助我们一步步构造出需要的软件和架构--这有可能就是敏捷开发. 源自贝尔北方实验室的开发流程 相对于软件开发流程,有一门专门的学科--软件工程.最早接触软件工程,是20年前在北电贝尔北方实验室工作的时候,当时的开发流程是这样的: 其他主流的瀑布式开发流程也大致如此. Scrum的敏捷流程 随着技术的演进,尤其是互联网的发展,BS架构的广泛应用,用户反馈的及时响应成为了可能.

一名老站长眼中的阿里云服务器七宗罪

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 前几天,腾讯云高调面世,差一点被人惊呼为阿里云杀手,可惜看到价格后大家又忍住了,性价比没得比;作为前几批接触阿里云经济型主机的老用户,又一次坚信当初的选择没有错;虽然目前还没有折腾出可以看得上眼的网站,不过对云也有了更深的了解,可以简单聊聊对阿里云的认识. 阿里云服务器是阿里旗下的云服务产品,不管是主机稳定性,还是宽带质量,还是性价比

老美眼中的中国科技圈“2015年关键词”

搜狐IT消息 1月4日,据<华尔街日报>报道,2014年,对中国科技公司来说是非常重要的一年.很多中国科技公司频现各大媒体头条.收购.估值飙涨,挑战海外巨头成为这类公司2014年的关键词. 2014年,阿里巴巴成功在美国上市,募集250亿美元资金.联想出资23亿美元收购IBM服务器业务,随后又以29.1亿美元从谷歌手中买走摩托罗拉移动公司.小米则以450亿美元的估值成为全球最贵的科技创业公司.对于2015年,我们应从以下几个方面来关注中国科技领域: 1) 科技巨头疯狂并购带来的结果 在过去的一

SDCC 2016 中国软件开发者大会盛大开幕

2016年11月18-20日,由 CSDN打造的"SDCC 2016中国软件开发者大会"(以下简称SDCC 2016),在北京京都信苑饭店盛大开幕.大会为期三天,汇聚100多位国内外顶尖专家和知名讲师,全体大会探讨当下软件开发的"新趋势"与"新实践",而14场专题论坛则直击开发者关注的技术和行业实践, "英雄会"晚宴和特色活动也异彩纷呈.SDCC 2016致力将最前沿的软件开发技术,以及最具创新的实践案例带给开发者,是国内软件

“黑客老王”联手“乌云一哥”重出江湖,为黑客“造梦”的幻云有多牛?

   这世间的故事,必有缘起.黑客的江湖,也不例外.两位世外高手,是接下来这个故事的起源. "神兽"降临 我叫老王.不是隔壁老王,我就是老王. 这个低调了二十年的黑客,终于站在了聚光灯下. 在此之前,圈外人对于王俊卿的了解几乎为零.事实上,作为中国最早的一批黑客,神秘的老王和他身后声名显赫的 0x557 统领了中国大半部黑客史.从互联网安全的洪荒时代,老王就开始了"拿站"生涯,而随着互联网的发展,老王对世界上几乎所有复杂的大型系统都进行过渗透测试.他符合人们对于一个

曹广运:选择论坛建站心得

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 论坛就是用来交流的地方,但是8630.html">有时候论坛所具备的操作方便,功能齐全的特点,也可以做点别的,今天要给大家谈到的是曹广运利用论坛运营web578的心得.作为一个教程站,我发现我还是第一份呢,呵呵,曾经一个朋友和我说'老曹有创造性思维,呵呵'. 为什么web578作为视频教程站,要采用论坛的形式呢,我分析一下,说

学而思总裁曹允东离职知情人称源于内斗

(未来资产证券董事总经理温天立微博截图) (未来资产证券董事总经理温天立微博截图) 北京时间1月26日消息,学而思(XRS)昨日在上市后首份财报中披露公司两大创始人之一.现任总裁曹允东因个人原因将于2011年4月1日离职.对于学而思突然宣布曹允东将离职,市场颇感意外,同时也担忧学而思未来的发展策略.发展走向是否会出现重大变化.甚至有 网友推测曹允东的离职是因为他和公司其他几个股东不和,学而思内部出现了高层的内斗. 今日上午,未来资产证券董事总经理温天立发布微博称"刚才跟学而思老曹(其实岁数比我小

淘宝十年曹中玺:“快递诗人”在路上

在淘宝过去的十年间,促成网购成交催生的职业中,快递员是其中一员.网购的人群多数以着装.公司标志来区分快递员,姓甚名谁几乎没人关注,但曹中玺是个例外.尽管快递员并非淘宝体系内的某个专职者,但却是淘宝大生态圈内必不可少的因子.文/天下网商记者 余妙玉曹中玺最爱别人喊他曹叔".在当快递员之前,他种过田,当过保姆,中年以前的生活阅历丰富,却少有让他觉得有劲的工作. 2009年,曹中玺进入圆通,成为快递员,主要负责北京师范大学这块区域的快件配送与取件.他所负责的区块,同圆通旗下的其余区块一样,都是构成全国