Home

Flink - JobGraph

生成StreamGraph后,接下来就是构造 JobGraph 了,这一步主要的变化是将尽可能合并多个相邻的 StreamNode. 1. Why 在分布式计算中,多个节点交换数据都通过 rpc 完成,这其中就少不了网络传输、序列化与反序列化的一系列过程,如果能够优化为硬盘或者内存处理,例如对于map(...).filt(...),理论上完全可以在本地串行计算完成,避免全量传输map的结果,在性能上明显就会有提高。 Flink 从 StreamGraph 转化为 JobGrpah 的过程,主要就是这个目的。例如对于 A → B → C → D 的调用顺序,如果 A B 可以合并为本地处理,那么就可以生成 A’ → C → D 新的 DAG 图,这就是 StreamGraph → ...

Read more

Flink - StreamGraph

上一篇笔记介绍由 API 生成StreamExecutionEnvironment.transformations,接下来就是生成 StreamGraph. StreamExecutionEnvironment.execute里包含了诸如 StreamGraph、JobGraph、?等流程。 具体在StreamGraphGenerator.generate: StreamGraph generate() { streamGraph = new StreamGraph(executionConfig, checkpointConfig); ... alreadyTransformed = new HashMap<>(); for (Transformat...

Read more

Flink - Transformations

年前开始接触 flink,到现在已经有三个月的时间了,除了最开始简单看了下 flink 的启动过程,最近一直被其 scala 及 SQL API 搞的很虚。这个假期得空,终于开始盘点下。 这篇笔记介绍下 transformations 的生成过程。 其实 flink 相关介绍网上比比皆是,为了避免拾人牙慧,本文主要介绍下自己的理解,参考文章附录在文末。 1. 开篇 以 flink 里的 Hello World 为例: val text = env.socketTextStream("127.0.0.1", 8011) text.flatMap(new FlatMapFunction[String, (String, Int)] { override def flatMa...

Read more

2019书单总结

19年看完的书单📖: 西游八十一案-大唐泥犁狱 半小时漫画中国史 半小时漫画世界史 半小时漫画经济学-生活常识篇 Scala谜题 图解HTTP 长安古意 追风筝的人 小岛经济学 殉罪者 Scala实用指南 四时之诗:蒙曼品最美唐诗 无所畏 网络是怎样连接的 路上通勤的时间,看完了《大唐泥犁狱》、《追风筝的人》,这两本都比预期要好看很多,非常推荐。 技术类的几本书籍收获一般,如果要学习 Scala 的话,还是推荐《快学Scala》这本。 19年想要了解下经济学,因此看了本《小岛经济学》,还不错,当然感觉对于我们来讲,初期通过视频学习可能更加通俗易懂。 《蒙曼品最美唐诗》是最出乎意料的一本,诗本身以及解读都很美,读完了赏心悦目。...

Read more

监控系统之度量系统:Dropwizard Metrics

Dropwizard Metrics Library 是一个 java 的监控工具包,Spark 将其作为 monitor 系统的基础实现。借助 Dropwizard Metrics 我们可以通过仅仅几行代码,就可以实现诸如数据分布、延时统计、计数等统计需求,将内部状态暴露出来。对应的,Metrics 实际上包含了两部分,监控的指标(Metric)以及指标如何导出(Reporter)。 1. Metric 1.1. Meter Meter 是一个与时间有关的统计值,例如我们可以这么使用: val requests = metrics.meter("requests") new Thread { ... requests.mark() } 底层...

Read more

《Scala谜题》读书笔记

有些问题还没有完全搞懂,不过先记录下来。 先放一张 scala 的类图: 笔记按照题目顺序整理。 //scalaVersion:2.12 package numericOps import scala.collection.mutable object ScalaPuzzlers extends App { /* // 1. 占位符 // Hi // Hi // List(2, 3) // 常规匿名函数是从 => 一直到代码块结束的所有代码 println(List(1, 2).map{i => println("Hi"); i + 1}) // Hi // List(2, 3) // 占位符_语法定义的匿名函数,只包括含有_的表达式 ...

Read more

度厂回忆录

W 说,“当你不能够再拥有的时候,你唯一可以做的,就是令自己不要忘记。” 我想起来成才从 A 大队走的时候,他问许三多,“咱们当兵三年了,你能想起其中的每一天吗?我想念七连,又臭又硬的钢七连,我使劲想,可我想不起一件事,一个人……” 不久后的某天,我也会离开百度,就像成才当年对 A 大队的向往,我也曾经那么向往在百度工作。不同的是,当离开的时候,我开始怀念在这里的每一天。我突然想要记录这里的每一件事情,这种感觉在我提了离职之后愈加强烈,以至于那么一瞬间有后悔的冲动。 当说出了告别,才意识到有多么不舍。当意识到不能够再拥有的时候,我告诉自己,记录下来不要忘记,这就是我的度厂回忆录。 1. 新兵报到 工位最底层的抽屉里,至今保留着一张纸,上面是入职的流程。工位来回搬了几次,这张纸...

Read more

《Functional Programming Principles in Scala》

最近借着几个周末在 Coursera 上完成了 《Functional Programming Principles in Scala 》,算是终于把之前立的上一门 Coursera 课程的 flag 给做到了。 1. 课程之外 这门课是 Scala 的作者 Martin Odersky, Professor 开的,相比看书,从中能看到更多原汁原味的设计思想,例如为什么会有 Call-By-Name 和 Call-By-Value、Curring 函数等。 学习这门课的时候我脑海里不断的浮现出这条曲线 感觉自己刚看了一个月 scala,就敢写《scala 30分钟极简入门》也是自信心爆棚了。 严格来讲,这门课程不算难,看过《Scala 编程》这本书的话,估计会觉得更轻松一...

Read more