7、围绕在Hadoop周围的有哪些公司和产品?
提到 Hadoop 一般不会说某一个东西,而是指生态系统,在这里面太多交互的组件了,涉及到 IO,处理,应用,配置,工作流。在真正的工作中,当几个组件互相影响,你头疼的维护才刚刚开始。我也简单说几个:Hadoop Core 就三个 HDFS,MapReduce,Common,在外围有 NoSQL: Cassandra, HBase, 有 Facebook 开发的数据仓库 Hive,有 Yahoo 主力研发的 Pig 工作流语言,有机器学习算法库 Mahout,工作流管理软件 Oozie,在很多分布式系统选择 Master 中扮演重要角色的 Zookeeper。
8、能否用普通人都能理解的方式解释一下Hadoop的工作原理?
我们先说 HDFS,所谓 Hadoop 的分布式文件系统,它是能真正做到高强度容错。并且根据 locality 原理,对连续存储做了优化。简单说就是分配大的数据块,每次连续读整数个。如果让你自己来设计分布式文件系统,在某机器挂掉还能正常访问该怎么做?首先需要有个 master 作为目录查找(就是 Namenode),那么数据节点是作为分割好一块块的,同一块数据为了做备份不能放到同一个机器上,否则这台机器挂了,你备份也同样没办法找到。HDFS 用一种机架位感知的办法,先把一份拷贝放入同机架上的机器,然后在拷贝一份到其他服务器,也许是不同数据中心的,这样如果某个数据点坏了,就从另一个机架上调用,而同一个机架它们内网连接是非常快的,如果那个机器也坏了,只能从远程去获取。这是一种办法,现在还有基于 erasure code 本来是用在通信容错领域的办法,可以节约空间又达到容错的目的,大家感兴趣可以去查询。
接着说 MapReduce,首先是个编程范式,它的思想是对批量处理的任务,分成两个阶段,所谓的 Map 阶段就是把数据生成 key, value pair, 再排序,中间有一步叫 shuffle,把同样的 key 运输到同一个 reducer 上面去,而在 reducer 上,因为同样 key 已经确保在同一个上,就直接可以做聚合,算出一些 sum, 最后把结果输出到 HDFS 上。对应开发者来说,你需要做的就是编写 Map 和 reduce 函数,像中间的排序和 shuffle 网络传输,容错处理,框架已经帮你做好了。
9、MapReduce模型本身也有一些问题?
第一:需要写很多底层的代码不够高效,第二:所有的事情必须要转化成两个操作 Map/Reduce,这本身就很奇怪,也不能解决所有的情况。
10、Spark从何而来?Spark相比于Hadoop MapReduce设计上有什么样的优势?
其实 Spark 出现就是为了解决上面的问题。先说一些 Spark 的起源。发自 2010 年 Berkeley AMPLab,发表在 hotcloud 是一个从学术界到工业界的成功典范,也吸引了顶级 VC:Andreessen Horowitz 的 注资. 在 2013 年,这些大牛(Berkeley 系主任,MIT 最年轻的助理教授)从 Berkeley AMPLab 出去成立了 Databricks,引无数 Hadoop 大佬尽折腰,它是用函数式语言 Scala 编写,Spark 简单说就是内存计算(包含迭代式计算,DAG 计算, 流式计算 )框架,之前 MapReduce 因效率低下大家经常嘲笑,而 Spark 的出现让大家很清新。 Reynod 作为 Spark 核心开发者, 介绍 Spark 性能超 Hadoop 百倍,算法实现仅有其 1/10 或 1/100。在去年的 Sort benchmark 上,Spark 用了 23min 跑完了 100TB 的排序,刷新了之前 Hadoop 保持的世界纪录。
11、如果想从事大数据方面的工作,是否可以推荐一些有效的学习方法?有哪些推荐的书籍?
我也有一些建议,首先还是打好基础,Hadoop 虽然是火热,但它的基础原理都是书本上很多年的积累,像算法导论,Unix 设计哲学,数据库原理,深入理解计算机原理,Java 设计模式,一些重量级的书可以参考。Hadoop 最经典的 the definitive guide, 我在知乎上也有分享。
其次是选择目标,如果你像做数据科学家,我可以推荐coursera的data science课程,通俗易懂。学习 Hive,Pig 这些基本工具,如果做应用层,主要是把 Hadoop 的一些工作流要熟悉,包括一些基本调优,如果是想做架构,除了能搭建集群,对各个基础软件服务很了解,还要理解计算机的瓶颈和负载管理,Linux 的一些性能工具。最后还是要多加练习,大数据本身就是靠实践的,你可以先按 API 写书上的例子,能够先调试成功,在下面就是多积累,当遇到相似的问题能找到对应的经典模式,再进一步就是实际问题,也许周边谁也没遇到,你需要些灵感和网上问问题的技巧,然后根据实际情况作出最佳选择。