阳光明媚的冬日,看看书学习新技术

已进入初冬,早晚寒意顿起。但是白天的阳光太好了,一个暖和的冬日。

我每天坐在书房里,阳光直射进来,满屋子都是阳光的芬芳。

稍微抬头,就看到远处碧蓝的天,和大海交相辉映,不由心情舒畅。

耳边传来海风的呼啸声,以及偶尔有海浪的起伏声。除此外,再无其他噪音。

在这样的环境里读书,真是心安理得、心旷神怡,读书的效率也高。

最近在看技术方面的书,关注两方面技术,一个是Apache Spark,一个是Apache Ignite.

关注Spark是因为确实有分布式计算的需求,这是一个大数据的时代,单机的程序去算,已经使不上力了。

而Spark的分布式计算任务,将map、reduce、group、join这些操作,分布到多个机器上并行操作,性能大幅提升。

Spark接口API原生支持python语言,这挺方便的,毕竟很多搞数据的都是用python。单就统计而言,Spark可以看作是一种分布式R语言。它把R的计算能力,拆成RDD用多个进程并行来跑了,所以计算效率更高。

但Spark计算严重依赖于数据的质量,我在使用中因为数据不规范,多次抛错而中断程序。数据治理包括数据清洗、归一化、结构化,是一项超级大工程。搞好前期的数据治理工作,后期什么机器学习、深度学习,都很容易了。

Spark的分布式存储原生使用Hadoop,但也支持其他的外部存储加载和导出,包括数据库、csv、Json都是可以的。

而Ignite与Spark有高度相似的地方,比如数据都是分块存储,都支持经典的k/v存储,以及SQL接口,都支持流和机器学习库。当然,Ignite是后起之秀,不像Spark已开发上十年了,很多功能并不如Spark那么完善。比如它的streaming和ML Lib,目前没什么人用的。

Ignite主要还是用在分布式内存存储,提供较快的速度、较好的扩容能力、以及不错的容错性。它的存储方式本质上还是k/v的,虽然基于此也实现了一个SQL接口。可以把它看作分布式Redis的一个实现。

它的客户端协议是基于二进制的,用起来比较方便,什么语言都可以使用这种二进制协议来跟Ignite集群通信。当然,Ignite官方也发布了几个语言的客户端,比如Java、python,你就不用手工去对二进制协议编解码了。

类似于Ignite的分布式存储服务其实挺多的,像我比较熟悉的couchbase就是如此,ceph也差不多,大家都大同小异。分布式服务的3R:rebalancing、replication、recovery,把这三样做好就行了。这里面涉及的算法,其实大家实现上都差不多。

总体上,Spark和Ignite一个用于算,一个用于存,虽然它俩内部实现有很多相似之处,但设计的目的还是有所不同。我学习了解了一下,发现它们对解决大数据时代的实际问题,还是挺有帮助的。

Print this entry