CyannyLive

AI and Big Data

Programming in Scala Overview Key Note

过去半年里,都在忙着spark相关的项目,主要的编程语言是scala,前些年主要用的是c++,刚转到scala上时,有点不适应函数式编程语言的思想,现在已经半年多过去了,觉得scala真的是awesome,简洁有力的表达,整合了functional programming和object programming,并且设计良好。
去年上了Martin Odersky的编程课Functional Programming In Scala, 觉得挺感兴趣,学习了很多,想在scala语言上看得更多,更深入些,我选择了Scala的权威著作Programming In Scala, 虽然这书有快900页,但我想挑战下,与其每天泡在各种新闻资讯里,还不如看看书泡在书里。每天都看看书,觉得挺好,有些笔记和心得就写在博客里,毕竟工作忙,写博客的时间很少,但我想还是应该多总结和留下写想法。之后阅读Spark的源码,我也会坚持写下些东西,看过了和写下来总还是不一样嘛。

Learning Akka

最近学习了scala,主要是跟着Functional Programming in Scala的课程学习的,scala主要的用处还是在spark上,关于spark也看了一些源码,处于继续探索中。

并发时的消息通信是处理spark这样的分布式系统的关键。spark主要依赖scala社区的akka进行消息通讯。在spark1.2的代码中可以看到很多actor的影子,然而spark1.4中,都是封装为EndPoint,但Actor的思想和模式还在。

基于Actor的消息通讯模型是akka的核心。Akka为处理并发、容错和可扩展性的分布式问题提供了一套基于Actor模型的库。并发的消息通讯中,抽象是关键的方面。Actor模型是1973年由Carl Hewitt在论文”Actor Model of Computation- Scalable Robust Information Systems”中提出, 后被应用于爱立信公司研发的Elang语言,爱立信公司应用Actor模型开发了高并发和可靠的通信系统。

位排序和快排

这已经不是一个新话题了,但是从开始实现一个C++位排序和快排,我还是花费了2个多小时,这里就记下自己的一点点体会啦。

首先,题目来自《编程珠玑》第一章,主要是做位排序,同时和快排做比较:

1. 实现位逻辑运算,实现位向量,并用该位向量实现1,000,000个数字的排序,数字最大是10,000,000

2. 实现1000,000个数字的快排序

3. 实现生成小于n且没有重复的k个整数,这里n=10,000,000, k = 1,000,000

查找两个排序数组的中位数

题目是:求两个排序数组的中位数。
设:两个排序的数组a[m], b[n],求a和b数组的中位数。
算法是:
mid_a是数组a的中位数index,同理mid_b是数组b的中位数索引
1. 如果a[mid_a] == b[mid_b] 中位数为a[mid_a]

2. 如果a[mid_a] < b[mid_b], 递归查找a(mid_a + 1, m - 1), b(0, mid_b),因为a[mid_a]比较小,不可能作为下一次查询的中位数

3. 如果a[mid_a] > b[mid_b], 递归查找a(0, mid_a), b(mid_b + 1, n - 1),因为b[mid_b]比较小,不可能作为下一次查询的中位数

4. 当只少于4个元素需要查找时递归停止,merge这少于4的元素,求出中位数。这里需要考虑奇偶数的情况,只剩下2个或3个元素,不如只考虑4个简单。

注意:这里求上中位数,当n为奇数时,中位数是唯一的,出现位置为n/2;当n为偶数时候,存在两个中位数,数组index从0开始,位置分别为n/2 - 1(上中位数)和n/2(下中位数)。

Hive架构笔记

Hive是基于Hadoop的大数据查询引擎, 存储于HDFS上的数据,要求开发者采用MR才能进行计算, 但MR是low-level的分布式计算,对于复杂的分析job, 多重MR是很复杂的, Hive致力于让用户采用传统的RDBMS的SQL查询处理分布式的大数据.

Dijkstra Algorithm

计算单源最短路径的算法有Bellman-Ford算法,主要是计算带负权有向图的单源最短路径。第二种算法:对于DAG图(Directed Acyclic Graph, 有向无环图)可以通过拓扑排序后再计算单源最短路径。第三,可以使用BFS(广度优先搜索)计算单源最短路径。第四,就是著名的Dijkstra算法,要求有向图的所有边的权值非负,当然图可以不是DAG图。

HBase MapReduce排序Secondary Sort

MapReduce是Hadoop中处理大数据的方法,是一个处理大数据的简单算法、编程泛型。虽然思想简单,但其实真正用起来还是有很多问题,不是所有的问题都可以像WordCount那样典型和直观, 有很多需要trick的地方。MapReduce的中心思想是分而治之,数据要松耦合,可以划分为小数据集并行处理,如果数据本身在计算上存在很强的依赖关系,就不要赶鸭子上架,用MapReduce了。
MapReduce编程中,最重要的是要抓住Map和Reduce的input和output,好的input和output可以降低实现的复杂度。最近,写了很多关于MapReduce的job,有倒排索引,统计,排序等。其中,对排序花费了一番功夫,MapReduce做WordCount很好理解,
Map input:[offset, text],  output: [word, 1],

Reduce input: [word, 1], output: [word, totalcount],还可以设置Combiner进行优化。

HBase Architecture Analysis Part 3 Pros and Cons

5. HBase Physical Architecture

Figure 5.1 shows the deployment view for HBase cluster:
HBase is the master-slave cluster on top of HDFS. The classic deployment is as follows:
➢** Master node:** one HMaster and one NameNode running on a machine as the master node.
Slave node: Each node is running one HRegionServer and one DataNode. And each node report status to the master node and Zookeeper.
➢** Zookeeper:** HBase is shipped with ensemble Zookeeper, but for large clusters, using existing Zookeeper is better. Zookeeper is crucial, the HMaster and HRegionServers will register on Zookeeper.
Client: There can be many clients to access HRegionServer, like Java Client, Shell Client, Thrift Client and Avro Client

Copyright
© 2022 Cyanny Liang