Ink's Blog

Less is more

Designing Data-Intensive Applications 读书笔记(I)

构建可靠的、可扩展和可维护的应用

17 年听说了这本神书 Designing Data-Intensive Applications,可以说这是一本全面讲解了大数据整个生态的百科全书,之前快速地看过前几章,感觉讲解地很系统而且通俗易懂,但是看到后面开始讲解更多细节性的内容慢慢地有点跟不上节奏了。作为一名数据从业人员感觉很有必要通过这本书把数据系统层面的内容整个做一个了解,所以这次在阅读的过程中会作一些笔记或者说是翻译以加深......

Protocol Buffers 了解一下?

本文是学习 Protocol Buffers 时做的笔记,内容来自官方文档,把其中的精华部分提炼出来做了一个总结。 什么是 protocol buffersProtocol buffers 是一种跨语言跨平台可扩展的序列化结构化数据的方式,常用于通信协议、数据存储等等。首先会定义数据应当如何构造,然后使用特殊生成的源代码把结构化的数据写入到各个数据流或者读取出来。 ...

Spark 源码阅读(I)

通过 Spark Submit 提交应用流程分析

提交 Spark 应用的第一步是通过 spark-submit 执行的,本文将会从源码研究整个过程,对源码的详细注释可以查看这里: https://github.com/Trigl/spark 我们用 Spark 自带的 SparkPi 的例子来讲解,我们通过 spark-submit 提交的命令如下: ./bin/spark-submit --class org.apache.spar......

Akka Study

Notes of Scala Cookbook

Akka 用于构建高并发、分布式且具有容错机制的事件驱动型的应用,本文是 Scala Cookbook 一书中 Akka 部分内容的总结。 Akka GuideActor 模型与线程比较,是一种高层次的抽象。说 “高层次的抽象”这句话,就意味着这个东西简单易用,你不需要考虑太多底层的其他东西。所以如果理解了 Actor 模型的原理,就可以专注解决问题,而不需要把注意力放在像线程、锁和共享......

使用 AWS Kinesis 收集流数据

AWS Kinesis Producer

Kinesis 是 AWS 的一项用于收集实时流数据的云服务,类似于 Kafka。Kinesis 收集到的数据可以用于多个方面,例如存到 S3,发到 EMR 作进一步数据分析等等。 Kinesis 的整体架构如下: Kinesis 的基本术语Kinesis Data StreamKinesis Data Stream 实时吸收大量数据、持久存储数据并使这些数据可供使用。其由多个分片组成......

Spark client mode 和 cluster mode 的区别

Distinguish Client mode & Cluster mode of Spark

在使用spark-submit提交Spark任务一般有以下参数: ./bin/spark-submit \ --class <main-class> \ --master <master-url> \ --deploy-mode <deploy-mode> \ --conf <key>=<value> \ ... # ot......

Scala 的 Case Classes 和 Pattern Matching

Case Classes and Pattern Matching

本文将讲解 Scala 中无处不在的 case class 和 pattern matching,为什么要放在一起讲呢,因为 case class 一般就是和模式匹配一起使用,习惯了用这套组合拳以后就再也不想写 Java 代码了,use less code to show more! Case Classcase class 是指在 class 前面加上 case 关键字,下面是一个例子......

Scala Implicit 详解

The Details of Scala Implicit

Implicit 是 Scala 中一个很重要的特性,开始学习 Scala 之前一直以为它和 Java 差不多,然而真的看一些 Scala 的源码时却发现并没有想象中那么简单,所以准备写几篇文章来详解 Scala 中异于 Java 的特性,就从 Implicit 开始吧。 在我看来,Implicit 做的事情也是 Scala 主要做的事情,那就是代码压缩,减少模块代码,talk is c......

Scala Composition and Inheritance

Notes of Programming in Scala

parameterless methods && empty parenthesesparameterless methods def width: Int empty parentheses def width(): Int However, it’s still recommended to write the empty parentheses when the inv......

SparkStreaming + Flume + Kafka 进行实时日志分析

Process with SparkStreaming, Flume and Kafka

每个公司想要进行数据分析或数据挖掘,收集日志、ETL都是第一步的,今天就讲一下如何实时地(准实时,每分钟分析一次)收集日志,处理日志,把处理后的记录存入Hive中,并附上完整实战代码 整体架构思考一下,正常情况下我们会如何收集并分析日志呢? 首先,业务日志会通过Nginx(或者其他方式,我们是使用Nginx写入日志)每分钟写入到磁盘中,现在我们想要使用Spark分析日志,就需要先将磁盘中......