hadoop常识指南

来源:互联网 发布:ubuntu ttf字体安装 编辑:程序博客网 时间:2024/04/28 00:36
这是我在几个QQ群发起的Hadoop每日一讨论小活动,每天中午2点左右发出一个关于Hadoop的知识片段,在此做一个整理。

【每日一讨论】之计算框架(2013-5-21)

就计算框架而言,Hadoop目前比较成熟的只有离线计算框架MapReduce(通常运行时间在1min以上),以及构建在MapReduce之上支持sql的Hive。随着发展,实时计算(通常运行时间在0~5s)有了需求,于是诞生了仿照Google dremel实现的Apache Drill和Cloduera impala,Twitter的Storm和Yahoo!的S4,以及通过优化MapReduce实现的spark,和构建在spark之上支持sql的shark,但是,这些开源系统目前为止尚不稳定,尽管Impala前几天发布了1.0版本,但仍存在很多问题,这些系统中,已经开始投入使用的是Storm(至少淘宝在大规模使用)。

【每日一讨论】之下一代Hadoop(2013-5-22)

下一代Hadoop主要由分布式文件系统HDFS和资源管理系统YARN组成,其中HDFS支持多个NameNode水平扩展和HA,也被称为“HDFS Federation”;YARN是在第一代MapReduce演化而来的,它是一个资源管理系统,之上可以运行多种计算框架,包括MapReduce、Storm、Spark、Tez等,带来的好处包括更好的扩展性、支持多种计算框架等,当前各种计算框架正在往YARN上转移,将来,YARN将变成一个云操作系统,或者称为“轻量级弹性计算平台”,所以计算框架将运行在YARN之上,由YARN统一管理和调度。

【每日一讨论】之下一代Hadoop带来的好处(2013-5-23)

昨天谈到,下一代Hadoop由HDFS Federation和YARN组成,今天重点说一下YARN。YARN是一个资源统一管理系统,相比与MRv1,带来的好处包括:更好的扩展性、可用性、支持多种计算框架等,前两个特性,很多中小公司用不到,毕竟集群规模不大,仅使用MRv1也不会遇到扩展性和可用性的问题,重点说一下第三个特性,MRv1仅支持MapReduce一种离线计算框架,应用场景非常有限。而YARN则不同,它是一个轻量级弹性计算平台,很多新型计算框架只能运行在YARN上(不能独立运行),比如DAG计算框架Tez、实时计算框架Spark(也可运行在另一种资源管理系统Mesos之上),即使现有的计算框架,比如MapReduce(已经支持)、Storm、MPI,也正在转移到YARN上运行。关于YARN的学习,可参考:http://955.cc/dHM2。

【每日一讨论】之MapReduce Shuffle优化方法(2013-5-24)

MapReduce的性能瓶颈之一在于Shuffle阶段,Shuffle阶段采用了C/S模型,Reduce Task作为Client端从各个Map Task所在节点上(装有一个Http Server)拉取数据。因此,shuffle优化优化可分为两个方面,一是对Server端优化,通常用Netty代替Jetty(1.0中采用)作为Http Server,以提高并发性能;二是Client端优化,常用方法是将Shuffle从Reduce Task中独立出来,让其不再占用槽位,这样可交错使用IO和CPU,进而提高资源利用率。关于Shuffle阶段的详细过程分析可参考最新Hadoop内幕书籍《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》(http://hadoop123.com/)中的第8.4节“Reduce Task内部实现 ”和8.5节”Map/Reduce Task优化“。

【每日一讨论】之Hadoop 1.0与Hadoop 2.0(2013-5-31)

Hadoop 1.0:对应版本为apache 1.x和cdh3,主要由HDFS和MapReduce构成,当前是稳定版,各大公司普遍采用这一版本;Hadoop 2.0:对应版本为apache 0.23.x,2.x和cdh4,主要由HDFS、MapReduce和YARN构成,其中HDFS解决了HA,YARN支持多种计算框架,目前尚不稳定,只发布了alpha版本,预计一年左右会出现稳定版(目前是alpha版,过段时间belta版,最后是稳定版),目前只有很少的公司尝试性使用或者测试用。如果想学习或使用Hadoop,推荐使用最新版本的1.1.x版本或者cdh3u6,这两个版本属于不同发行版(不同之处对比可阅读:http://dongxicheng.org/mapreduce-nextgen/how-to-select-hadoop-versions/),但是包含的功能一致。尽管Hadoop 2.0采用了新的架构,但是很多模块仍重用了1.0的,比如Map Task和Reduce Task实现,调度器实现(包括FIFO、Fair Scheduler 和Capacity Scheduler)等,对于Hadoop 1.0尚未搞透的同学,不提倡直接学习2.0,因为2.0学习难度远大于1.0. 对于Hadoop初学者,一定要多动手实践,如果不知如何开始,那就从搭建一个Hadoop集群开始吧,对于有一定基础的Hadoop学习者,如果想进一步学习Hadoop内部实现,可参考最新Hadoop畅销书籍《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》(前三章试读已经放到群共享里了。该书链接:http://955.cc/dYzX)

【每日一讨论】之如何规划属于自己的Hadoop发展道路(2013-6-3)

这次仅是我个人片面之词,供Hadoop初学者和迷茫着借鉴。通常而言,选择Hadoop作为自己未来的方向,可有两个选择方向:Hadoop应用程序开发和Hadoop内核优化,前面侧重于Hadoop之上的应用,比如利用Hadoop进行数据分析,推荐和数据挖掘算法的开发等,后者侧重Hadoop系统本身,通常根据实际遇到的问题开发一些新特性或者修复Hadoop bug等,当然也会为应用开发者提供技术指导。不管选择哪一个方向,都需要从Hadoop基础学习,而Hadoop是一个实践性很强的技术,因此必须多实践,如果你还不知道从何学起,那么就先从搭建一个Hadoop集群开始吧,然后使用它,玩弄它,感受它,之后可以尝试编写MapReduce程序,阅读一些入门书籍,比如Hadoop权威指南等,学习过程中,一定要多实践多交流,努力给自己创造一个良好的Hadoop学习氛围。如果你已经入门了,不管是Hadoop应用开发还是Hadoop内核开发,都要努力了解Hadoop内部实现原理(技术内幕)。

【每日一讨论】之Hadoop 2.0离稳定到底还有多远?(2013-6-6)

Hadoop 2.0(对应版本为apache 0.23.x,2.x和cdh4)是下一代Hadoop,采用了全新的架构和软件设计,目前apache官方仍处于alpha版,而cloudera早就发布了cdh4系列,并声称是稳定版,可以线上使用。实际上,cdh4的所有代码和补丁来自apache官方,只不过是提前将一些补丁打入自己的版本,但它并没有经过严格的测试,cloudera声称cdh4稳定是不太可靠的,毕竟apache版本才处于alpha版(而apache每次发布版本时,都会说明在多少节点的线上集群上得到试用)。究其原因,可能是Hadoop发行版之间竞争过于激烈,都想第一时间抢夺市场导致的。据Hadoop负责人介绍(http://955.cc/evdX),hadoop 2.0 beta版将在2个月后发布,而稳定版将在3个月后发布,按照软件总是延期的理论,我们可以乐观推测6个月后,也就是年底,2.0版本可以稳定,届时可以在线上环境中使用。

【每日一讨论】之常见开源系统的问题域(2013-6-7)

在Hadoop生态系统或者周边开源系统中,存在大量的数据计算相关的系统,包括MapReduce、Hive、Pig、Impala、Storm、Spark等,它们之间到底什么关系,是替代还是互补呢?个人认为,这些系统共同构建了一个良好的生态系统,他们各有自己对应的问题域,互补解决各类问题。根据Cloudera对系统的划分,按照时间指标可分为四个种类,划分标准与对应的系统分别是(1)实时应用场景(0~5s):Storm、S4、Cloudera Impala,Apache Drill等;(2)交互式场景(5s~1m):这种场景通常能要求必须支持SQL,则可行系统有:Cloudera Impala、Apache Drill、Shark等;(3)非交互式场景(1m~1h):通常运行时间较长,处理数据量较大,对容错性和扩展性要求较高,可行系统有:MapReduce、Hive、Pig、Stinger等;(4)批处理场景(1h+):通常运行时间很长,处理数据量很大,对容错性和扩展性要求很高,可行系统有:MapReduce、Hive、Pig、Stinger等。

【每日一讨论】几个学习Hadoop必须知道的资料(2013-6-8)

今天给大家介绍几个学习Hadoop必须知道的资料,这些资料大部分是英文的。(1)博客:cloudera和hortonworks的官方博客,从这两个博客里,你可以了解最新的Hadoop动态,博客地址:http://blog.cloudera.com/blog/和http://hortonworks.com/blog/(也可以参考我的博客:http://dongxicheng.org/ ) ,(2)Hadoop书籍:入门级《Hadoop权威指南 》和《Hadoop实战》(外国人写的那本,有中文翻译版),进阶的是《Hadoop技术内幕》书籍。(3)Hadoop源代码下载地址,Apache下载:http://hadoop.apache.org/releases.html(仅包含最新的alpha版、beta版和稳定版下载包 )、Hadoop SVN:http://svn.apache.org/repos/asf/hadoop/common/branches/(包含Apache 各个版本,可直接导入eclipse),CDH版本下载:http://archive.cloudera.com/cdh/3/(CDH3系列) 和http://archive.cloudera.com/cdh4/cdh/4/(CDH4系列), (4)Hadoop jira(Hadoop项目管理工具,可下载各种patch,跟踪每个问题的解决思路和进展,也可以自己提交问题和patch):https://issues.apache.org/jira/browse/YARN,https://issues.apache.org/jira/browse/HDFS。

【每日一讨论】认识Hadoop jira的重要性(2013-6-13)

很多人没有意识到Hadoop jira(Hadoop项目管理工具)的作用,jira的作用非常的不可小觑,首先,每次Hadoop版本发行的时候,在release文件(比如http://hadoop.apache.org/docs/r2.0.5-alpha/hadoop-project-dist/hadoop-common/releasenotes.html)中,会注明增加的特性或者修复的bug,里面每条会带一个 jira链接,你如果对哪个特性感兴趣,可以查看或者打补丁(jira链接里有补丁) ,其次,每个jira链接记录了每个特性的来龙去脉,你可以了解这个问题是怎么产生的,怎么解决的,整个过程,尽管不是直接的研发人员,但是你可以清楚的了解到,比如HADOOP-7206记录了如何将google的snappy压缩算法集成到Hadoop中,链接是https://issues.apache.org/jira/browse/HADOOP-7206。在我的Hadoop新书《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》中引用了大量的jira链接(这些都是最重要的jira链接,经过我筛选的,节省了大家很多时间),全部在最后的附录中罗列出来了,有兴趣的可以阅读每个jira链接。最后,尽管我们大部分人无法参与Hadoop源代码的编写,但是可以参与讨论每个特性,你可以在jira网站(https://issues.apache.org/jira/)上 注册一个账号,并点击你感兴趣jira页面中的watch按钮,这样,该jira链接中有任何改动,均会发到你的邮箱,你可以参与讨论,甚至贡献patch。总之,学会利用Hadoop jira是一个Hadoop程序员必备的能力之一。

【每日一讨论】计算框架之上的SQL引擎(2013-6-14)

当前开源届有很多计算框架,包括MapReduce、Tez、Storm、Spark等,你可以直接在这些计算框架上编写应用程序(低效、难度较大),也可以通过结构化或者脚本语言(简单,易于上手)解决一些大数据问题。我们重点谈一下后一种。MapReduce之上的SQL引擎是Hive和Pig(Pig是一种脚本语言,功能比SQL更强大);Tez正在发展中,将来也会用于Hive上,该新系统被命名为Stinger;Spark之上的SQL引擎为Shark;Storm目前没有可用的开源SQL引擎,阿里巴巴内部实现了一个,但是不支持开源版本。还有其他两种系统,对SQL有非常迫切要求,第一个是HBase,目前开源届没有支持SQL的版本,但是有商业公司已经做出来了;第二个是Impala这种类google dremel的系统,这种系统是传统数据库与HDFS的杂种,它几乎支持所有传统数据库的SQL语法,而其他系统,包括Hive、Shark、SQL-On-HBase等则只支持ANSI-92 SQL语法的一个子集,这主要是由于大数据时代特殊的计算模型和扩展性、容错性要求导致的,比如Hive只支持查询语句,不支持修改和删除,而SQL-On-HBase则支持各种语句,但是仅能有限的支持,尤其是Join难以支持。对于以上知识,传统公司(采用传统数据库存储和解决问题的公司)向Hadoop解决方案转型时,应当十分注意

ref:http://dongxicheng.org/mapreduce-nextgen/hadoope-every-day/

原创粉丝点击