张子阳的博客

首页 读书 技术 店铺 关于
张子阳的博客 首页 读书 技术 店铺 关于

最新内容

架构整洁之道

又到了每年的双11,于是到京东看看有什么可买的书,就注意到了这本《架构整洁之道》。Bob大叔之前的几本书《代码整洁之道》和《敏捷软件开发》之前也都读过。这本是今年9月才出的新书,就立即买来读了。

全书近300页,分成了34篇文章,每一篇都比较短小,内容还是比较精炼的。通读过后,感觉相较于作者之前的书,没有太多新的内容,依然是以SOLID为基础,先对这些原则进行解释,再进行扩展和应用。

发表: 2018-11-30 阅读: (66) 推荐: 难度:

经济学原理:微观经济学

这本书在很久很久以前,大概是2008年,就读过一遍,那时候还是第4版。然后最近看另一本书《低欲望社会》,起初以为是一本关于社会学的书,看过之后才发现是一本经济学的书,很大篇幅都是对日本政策所造成的影响的解读。然而,我发现其中很多概念已经有些模糊,一些论证也一知半解了。所以我想有必要重新学习一下经济学基础,于是就又想起了这本《经济学原理》。因为新版已经出到了第7版,所以重新购买了第7版阅读。

发表: 2018-11-30 阅读: (43) 推荐: 难度:

Go中的Receiver和Method Sets

Go中没有class关键字,如果想将一组方法关联起来,除了将其放到同一个package下面以外,还有一种方式就是为方法指定receiver(receiver为某个类型),此时方法就与receiver类型关联起来了,有点类似于面向对象中类型方法的概念(但又很不同)。这篇文章介绍了指定receiver的两种方式以及相关的method sets概念。

发表: 2018-11-27 阅读: (15) 分类: Go 语言

Go反射指定执行方法的对象

在上一篇 Go反射动态创建对象 中,我们在末尾又提出了三个问题,其中最后一个是执行方法的对象,我们希望能够自行指定方法是在哪个对象上执行的。这篇文章将演示如何实现这一过程。因为这已经是同一个主题的第3篇文章了,因此我们快速地过一遍代码。

发表: 2018-11-22 阅读: (13) 分类: Go 语言

Go反射动态创建对象

在上一篇 Go使用反射动态调用方法 中,我们实现了动态调用方法,但是它存在着3个问题:缺乏参数校验、方法参型为静态构建和传递、多个参数类型需要保持一致。在这篇文章中,将会对这三个问题进行处理。

发表: 2018-11-22 阅读: (24) 分类: Go 语言

Go反射动态调用方法

反射是很多语言都提供的一种能力,它可以针对类型的元信息进行编程。例如获取类型的方法、字段、方法参数、方法返回值的信息。反射对于静态语言尤为重要,因为有了反射,可以使得静态语言变得"动态"一点。Go语言也提供了反射的能力,具体可以参考官方文章:The Laws of Reflection,以及reflect包的说明:Package reflect

这篇文章将实现一个常见的功能,即动态调用自定义struct的方法。

发表: 2018-11-21 阅读: (21) 分类: Go 语言

Kafka + Spark Stream实时WordCount

Word Count简直就是大数据届的hello world,所谓Word Count就是计算一行或者一段文本中英文单词的出现个数(英文单词以空格分隔)。这篇文章示范了如何使用Kafka + Spark Streaming来实现一个实时版本的Word Count。这个范例比较简单,仅仅有助于跑通流程。在实时运算时,一个很重要的问题就是:时间窗。比如说,统计实时的在线人数,当有新用户上线时,在线人数+1,但是过15分钟后,如果该用户的“最后活跃时间”仍是上线时间,那么此时就要去除它。

发表: 2018-10-28 阅读: (155) 分类: 大数据处理

Spark DataFrame解析json字符串

近期在做Spark Streaming方面的测试,从Kafka中实时取数据。此时接收到的数据是一段json数组形式的字符串,那么就需要将其解析为DataFrame的行数据,以方便进行实时运算。下面的代码示例演示了如何实现这个功能。

发表: 2018-10-22 阅读: (90) 分类: 大数据处理

Kafka Connect 实时读取MSSQL数据到Kafka

在处理实时数据时,需要即时地获得数据库表中数据的变化,然后将数据变化发送到Kafka中。这篇文章将介绍如何使用Kafka Connector完成这一工作。当获取实时数据时,数据源需要支持对数据变化进行反馈。不同的数据源采用了不同的技术和方法实现该功能,因为我们的业务数据库是MS SQL Server,因此这篇文章采用MSQL作为数据源。

发表: 2018-10-20 阅读: (286) 分类: 大数据处理

Kafka Connect 基本概念

搭建好了Kafka集群以后,最常见的两个需求就是:1、将数据从数据源采集并发送到Kafka的topic中;2、将数据从Kafka中取出,(进行运算后),然后再转存到其他的位置。完成这一工作,通常我们会使用各种语言的kafka库,调用相应的API,来完成读写kafka的操作。因为这种操作是非常常见的,因此kafka包含了一个名为Kafka Connect的组件,专门来完成这项工作。

发表: 2018-10-20 阅读: (84) 分类: 大数据处理

Spark 从文本创建DataFrame的3种方式

Spark Sql的核心对象DataFrame提供了Sql查询的能力,极大的方便了数据的查询和统计。如果要对DataFrame进行Sql查询,需要指定Scheme信息。而文本文件往往缺少Scheme信息,这篇文章将演示3种从文本文件创建DataFrame,并设置其Scheme的方式。

发表: 2018-10-19 阅读: (47) 分类: 大数据处理

数据之巅:大数据革命,历史、现实与未来

这本书是2014年出版的,我到现在2018年才买来读,已经重印了30次了,可见还是很受欢迎的。这是一本大数据人文方面的书籍,没有涉及具体技术方面的内容,非技术领域的读者也可以无障碍阅读。书的名称是“数据之巅”,其实我觉得“大数据简史”可能更适合。因为它主要是从美国建国之初的人口普查,讲到当下的智慧城市、云存储和云计算。

这本书的主题尽管是围绕着数据的产生、收集、统计、应用来讲述的,但是作者的知识面比较广,尤其是对美国政体和历史了解很多,因此做了很多的拓展,可以学到些相关的其他知识。

发表: 2018-10-18 阅读: (92) 推荐: 难度:

Kafka分布式消息系统(Kafka Manager) - Part.5

在前一节中,我们通过控制台访问了Kafka集群,对topic进行了创建、删除、查看、读写等操作。使用控制台的方式简单快捷,但不够直观。Kafka官方并没有提供一个管理的UI界面,但存在很多第三方UI,比较流行的是Yahoo的Kafka-manager 和 Landoop的Kafka-topics-ui。这篇文章简单介绍一下Kafka-manager。

发表: 2018-10-16 阅读: (39) 分类: 分布式系统

Kafka分布式消息系统(通过控制台访问) - Part.4

在前面的三篇文章中,介绍了Kafka的相关概念,并且搭建了一个3节点的Kafka和Zookeeper集群。接下来,就可以对集群进行访问。访问的方式通常为各种编程语言的Kafka库,或者是使用命令行脚本。各种语言的编程库,可以在这个页面获得:https://cwiki.apache.org/confluence/display/KAFKA/Clients。这篇文章主要讲述如何通过命令行来访问Kafka集群,包括查看所有Topic(主题)、创建Topic、查看Topic详情、写入数据到Topic、读取Topic内容,以及删除Topic。

发表: 2018-10-15 阅读: (39) 分类: 分布式系统

嫌疑人x的献身

这是一本小说,作者是东野圭吾。他的小说,我看的第一本是《解忧杂货铺》。没办法,每次浏览图书畅销榜,点到“小说”一栏时,总会看到他的几本书,其余的还有诸如《白夜行》等。我不太看小说,因此如果看,就想看最好的。于是我特意上知乎查了一下,东野圭吾最好看的小说时哪几本,尽管答复各不相同,但有好几个都提到了这本书。于是在国庆出行期间我就带上了这本书,在一些诸如乘机这样的等待时间里看完了它。

发表: 2018-10-08 阅读: (65) 推荐: 难度:

Spark问题解决:no org.apache.spark.deploy.master.Master to stop

今天更新了配置,想要重启一下集群,在执行stop-all.sh脚本时,出现了这样的提示:no org.apache.spark.deploy.master.Master to stop,意思是当前没有运行spark进程。

这就奇怪了,当我运行jps查看时,发现Master和Worker进程都是存在的 ...

发表: 2018-09-25 阅读: (8) 分类: 大数据处理

今日简史:人类命运大议题

这本书的作者写了一个三部曲《人类简史》(A brief history of humankind)、《未来简史》(Homo Deus:A Brief History of Tomorrow)和这本《今日简史》(21 Lessons for the 21st Century)。其实将“今日”和“简史”联系起来是蛮牵强的一件事,从原书名来看,直译应当是“21世纪的21个议题”。估计是为了凑成一个“简史三部曲”,而特意修改的。

作者的前两本书我都看了,因此在书店看到这本更贴近当下世界的书,就立即买下了。这本书从当前如火如荼的大数据和人工智能,谈到民族主义、宗教、恐怖主义、世俗主义,可以说范围非常广。对于人工智能部分,一些设想让人有脑洞大开的感觉,例如人类社会的阶级分化(超人类和无用阶级),像科幻小说一样。而对于宗教的一些讲述,绝对会让宗教人士相当不快。

这本书内容宽泛,在实际生活中又缺乏体会,很难写出一些读后感,下面摘要书中的一些观点。当然,还有很多观点,每个人关注的角度不同,有兴趣的还是看一下全书吧。

发表: 2018-09-24 阅读: (116) 推荐: 难度:

通过一个方法(aggregate)理解spark的rdd

RDD(Resilient Distributed Dataset,弹性分布式数据集)是Spark的基本抽象和核心对象。它代表了一个具有容错性的,可以并行运算的元素集合。有两种途径创建RDD:将Driver Program中的集合类型转换成RDD,或者是引用外部存储系统中的数据集,例如文件系统、HDFS、HBase、数据库等。

在实际的应用中,也可以理解到Spark是一个独立的计算引擎。先从外部加载数据,然后执行分布式的并行运算,最后将运算结果进行显示、保存、或发给其他应用。其中执行分布式的并行运算属于核心的位置,理解RDD也就很关键,这篇文章想通过一个例子来讲述RDD。

发表: 2018-09-14 阅读: (92) 分类: 大数据处理

linux上配置计划任务(cron和crontab)

很多时候,我们需要定时执行某个应用或者某段脚本,在linux上,可以使用Crond服务,它有点类似于Windows上的任务计划程序。这篇文章将简单介绍crond的使用。

发表: 2018-09-13 阅读: (202) 分类: Linux

配置Hadoop集群JobHistoryServer

Hadoop自带一个Job History Server(作业历史服务,以下简称JHS),保存了作业执行的信息,例如作业名称、作业提交时间、作业启动时间、作业完成时间、作业配置信息、作业执行结果、使用的Map数、使用的Reduce数等等。JHS是一个独立的服务程序,可以运行在独立的服务器上,以分担整个集群的负载。默认情况下,JHS是不启动的。这篇文章主要介绍如何配置并运行JHS。

发表: 2018-09-07 阅读: (87) 分类: 大数据处理