HBase 就是对应的 BigTable 的克隆版,它是基于列的存储,可以很好的扩展型,这里面出现了 Zookeeper 作为它高可靠性的来源,我们在分布式系统中经常怕 Single Point of Failure,它能保证在少于一半节点损害情况下,还是可以工作的。
这里的 region server 是说把数据的 key 做范围划分,比如 region server1 负责 key 从 1 到 1w 的,region server2 负责 1w 到 2w 的,这样划分之后,就可以利用分布式机器的存储和运算能力了。
虽然 MapReduce 强大,但编写很麻烦,在一般工作中,大家不会直接写 MapReduce 程序。有人又开动大脑,简化开发。Hive 的简单介绍,它主要是 Facebook 开发,确实很容易上手,如果做 data scientist,经常也要用到这个工具。
我们想 MapReduce 模型有什么问题?第一:需要写很多底层的代码不够高效,第二:所有事情必须要转化成两个操作,这本身就很奇怪,也不能解决所有的情况。那么下面就看看有什么可以做的更好的。
Spark 介绍
我还是介绍一些 Spark 的起源。Berkeley AMPLab,发表在 hotcloud 是一个从学术界到工业界的成功典范,也吸引了顶级 VC:Andreessen Horowitz 的注资。
AMPLab 这个实验室非常厉害,做大数据、云计算,跟工业界结合很紧密,之前就是他们做 mesos、hadoop online,在 2013 年,这些大牛(Berkeley 系主任、MIT 最年轻的助理教授)从Berkeley AMPLab 出去成立了 Databricks,引无数 Hadoop 大佬尽折腰,其实也不见得是它们内心这么想,比如 Cloudera 也有自家的 impala,支持 Spark 肯定会让它自家很难受,但如果你的客户强烈要求你支持,你是没有选择的
另外起名字也很重要,Spark 就占了先机,它们 CTO 说 Where There‘s Spark There’s Fire,它是用函数式语言 Scala 编写,Spark 简单说就是内存计算(包含迭代式计算,DAG 计算、流式计算 )框架,之前 MapReduce 因效率低下大家经常嘲笑,而 Spark 的出现让大家很清新。Reynod 作为 Spark 核心开发者, 介绍 Spark 性能超 Hadoop 百倍,算法实现仅有其 1/10 或 1/100.
那为啥用 Spark 呢?最直接就是快啊,你用 Hadoop 跑大规模数据几个小时跑完,这边才几十秒,这种变化不仅是数量级的,并且是对你的开发方式翻天覆地的变化,比如你想验证一个算法,你也不知道到底效果如何,但如果能在秒级就给你反馈,你可以立马去调节。
其他的如比 MapReduce 灵活啊,支持迭代的算法,ad-hoc query,不需你费很多力气花在软件搭建上。如果说你用 Hadoop 组建集群、测试、部署一个简单任务要 1 周时间,Spark 可能只要一天。在去年的 Sort benchmark 上,Spark 用了 23 分钟跑完 100TB 的排序,刷新之前 Hadoop 保持的世界纪录。
下面这个图,是 Hadoop 跟 Spark 在回归算法上比较,在 Hadoop 世界里,做迭代计算是非常耗资源,它每次的 IO 序列画代价很大,所以每次迭代需要差不多的等待。而 Spark 第一次启动需要载入到内存,之后迭代直接在内存利用中间结果做不落地的运算,所以后期迭代速度快到可以忽略不计。
此外,Spark 也是一个生态系统,除核心组建 Spark,它也可以跑在 Hadoop 上,还提供了很多方便的库,比如做流式计算,Spark Streaming,比如 GraphX 做图的运算,MLBase 做机器学习,Shark 类似 Hive,BinkDB 也很有意思,为达到高效,它允许你提供一个误差概率,如果你要求精确度越低,它运算速度就越快,在做一些模糊计算时像 Twitter 的 Follower 数目,可以提高效率。
所以总体说,Spark 是一个非常精炼的 API,提供常用的集合操作,然后本身可以独立运行,或在 Hadoop Yarn 上面,或者 Mesos,而存储也可以用 HDFS,做到了兼容并包,敏捷高效。是不是会取代 Hadoop 或成为 Hadoop 的下一代核心,我们拭目以待!
如何学习大数据
那同学们如果问如何开始学习大数据,我也有一些建议,首先还是打好基础,Hadoop 虽然火热,但它的基础原理,都是书本上很多年的积累,像 Unix 设计哲学、数据库的原理;
其次是选择目标,如果你想做数据科学家,我可以推荐 Coursera 的数据科学课程,通俗易懂,学习 Hive、Pig 这些基本工具;如果做应用层,主要是把 Hadoop 的一些工作流要熟悉,包括一些基本调优;如果是想做架构,除能搭建集群,对各基础软件服务很了解,还要理解计算机的瓶颈和负载管理,Linux 的一些性能工具。
最后,还是要多加练习,大数据本身就是靠实践,你可以先按 API 写书上的例子,能够先调试成功,在下面就是多积累,当遇到相似问题能找到对应的经典模式,再进一步就是实际问题,也许周边谁也没遇到,你需要些灵感和网上问问题的技巧,然后根据实际情况作出最佳选择。