零基础学习 Hadoop 该如何下手?


关于入门:
我比较赞同有位匿名同学的回答,如果看书一头雾水的话,先从实际例子出发会比较容易上手。WordCount和Weather Data这种“Hello World”的例子网上有很多,可以复制下来自己跑一遍,基本上就知道Hadoop是个什么东西,能用来干什么了。跑这些例子都不需要一个完整的Hadoop集群,自己本地的VM上就可以完成。
之所以我觉得这是比较好上手的方式,是因为我也认为Hadoop是一个工具,而不是一门学科。工具的一般用法是你有一个实际的问题需要解决(求和,求平均值之类的问题都可以,两三行数据,不需要“大数据”),然后把这个工具运用到你的问题里面,能够使用工具之后再开始研究怎么更好的更有效的使用这个工具。
入门会Google就行了!

关于进阶:
知道是什么,能干什么之后,需要知道为什么。这很重要,这关系到你的任务是跑三个小时还是要跑三天,是需要三台服务器还是需要三十台服务器,就直接关系到最后要花三十还是花三百。
进阶之前需要一点准备工作:Linux -(这对于所有Distributed System都非常重要),Java(能看得懂代码就可以了),Maven(能用就可以),Scala(optional,可以边学边用),SBT(optional,可以照着tutorial用),

进阶就需要看书(绝对不需要看源代码。。看得下去嘛那),前面有很多位同学推荐了各种书各种博客,都应该不错。唯一就是时间和版本问题,有些书和博客可能写得比较早,介绍的Hadoop和其他应用都是很早的版本,现在已经完全不对了。尤其是Hadoop1和Hadoop2,这个区别是很大的,有时候碰到来面试的同学侃侃而谈Hadoop1,忍不住扶额。

我只推荐两个
- Hadoop The Definitive Guide最新版,这也是我当时的入门书,写的非常好。强烈强烈建议看英文版的,否则容易交流障碍。。。这本书的例子都在github上可以下载下来,都跑一跑。另外Hadoop相关职位的面试问题大部分都来自于这本书,这本书看两遍基本上面试没问题。这是唯一一本我觉得从头到尾必看的书。

 

关于深入:
关于怎么深入学Hadoop,我看了前面很多答主的回答,觉得需要补充一点点。Hadoop分为两个大块:HDFS和MapReduce。
HDFS - Hadoop Distributed FileSystem。这个概念很好,但是其实我不觉得很实用。但是如果你之后要往Non SQL方面深入的话这个还是很重要,HDFS是HBASE的基础,Hbase又可以延伸到Big Table,DynamoDB,Mango等。HDFS概念不难,Hadoop The Definitive Guide里面讲的很清楚,看书就好。
MapReduce - 前面说最好看英文版,因为不管中文怎么翻译,Map,Reduce都是没办法像读英文那样容易理解的。这里面有个YARN的概念,是最最最重要的。MapReduce是管数据怎么流动的,YARN是管集群中的资源怎么分配的。除了YARN以外,MapReduce还有几个很重要的概念,比如Partition, combine, shuffle, sort, 都在书里很小的位置,但是都对理解整个MapReduce非常有帮助。

关于log:
我的日常,感觉每天看log都快要看到眼瞎。
如果你使用Hadoop,那么看log的时间估计会占了一大半。怎么看log,先从Resource Manager web UI开始入手吧。这是个web UI,可以让你查看每个任务的具体进展,container的运行等等。

关于其他应用:
再下一步就是Hadoop上其他的应用, Hive,Pig,Spark,Cassandra,Presto什么的,都很容易掌握。因为这些都是为了方便Data Scientist什么的更容易上手掌握Hadoop而编写的比较上层的应用,一两个小时就可以上手了,建议继续看Hadoop The Definitive Guide。
但是Spark要单独提出来讲一讲,Spark其实不是Hadoop上面的应用,它也可以使用除了YARN之外的其他资源分配系统。但是Spark使用的人很多,很多任务用Spark比用Hadoop MR要快一些,Spark也比其他的应用要复杂一点。如果有兴趣还是可以从Hadoop The Definitive Guide开始,然后边做实际的例子边学习。

关于Hadoop的使用方式:
感觉现在各个公司使用Hadoop的方式都不一样,主要我觉得有两种吧。
第一种是long running cluster形式,比如Yahoo,不要小看这个好像已经没什么存在感的公司,Yahoo可是Hadoop的元老之一。这种就是建立一个Data Center,然后有几个上千Node的Hadoop Cluster一直在运行。比较早期进入Big Data领域的公司一般都在使用或者使用过这种方式。
另一种是只使用MapReduce类型。毕竟现在是Cloud时代,比如AWS的Elastic MapReduce。这种是把数据存在别的更便宜的地方,比如s3,自己的data center, sql database等等,需要分析数据的时候开启一个Hadoop Cluster,Hive/Pig/Spark/Presto/Java分析完了就关掉。不用自己做Admin的工作,方便简洁。

所以个人如果要学Hadoop的话我也建议第二种,AWS有免费试用时间(但是EMR并不免费,所以不要建了几千个Node一个月后发现破产了。。),可以在这上面学习。最重要的是你可以尝试各种不同的配置对于任务的影响,比如不同的版本,不同的container size,memory大小等等,这对于学习Spark非常有帮助。

最后如果对hadoop学习有疑问,对相关职业有兴趣,或者身在北美干脆要跳槽的,非常欢迎来找我:)

PS,我的回答好像也超纲了。不过也许会有人想要知道这些。

hadoop和Spark是两种不同的大数据处理框架,他们的组件都非常多,往往也不容易学,我把他们两者整理在一幅图中,给大家一个全貌的感觉。初学者可以针对如下图中的组件,逐个的去研究攻破。至于各组件的详细介绍、相关联系和区别,以及它们在大数据平台建设中的具体实施关注点,待点赞数达到1000,我再对帖子进行详细的更新,请大家随手帮忙点个赞。

以上这些大数据组件是日常大数据工作中经常会碰到的,每个组件大概的功能,我已经在图中做了标识。下面,针对这幅图我给大家两点重要提示:

a.蓝色部分,是Hadoop生态系统组件,黄色部分是Spark生态组件,虽然他们是两种不同的大数据处理框架,但它们不是互斥的,Spark与hadoop 中的MapReduce是一种相互共生的关系。Hadoop提供了Spark许多没有的功能,比如分布式文件系统,而Spark 提供了实时内存计算,速度非常快。有一点大家要注意,Spark并不是一定要依附于Hadoop才能生存,除了Hadoop的HDFS,还可以基于其他的云平台,当然啦,大家一致认为Spark与Hadoop配合默契最好摆了。

b.技术趋势:Spark在崛起,hadoop和Storm中的一些组件在消退。大家在学习使用相关技术的时候,记得与时俱进掌握好新的趋势、新的替代技术,以保持自己的职业竞争力。

HSQL未来可能会被Spark SQL替代,现在很多企业都是HIVE SQL和Spark SQL两种工具共存,当Spark SQL逐步成熟的时候,就有可能替换HSQL;

MapReduce也有可能被Spark 替换,趋势是这样,但目前Spark还不够成熟稳定,还有比较长的路要走;

Hadoop中的算法库Mahout正被Spark中的算法库MLib所替代,为了不落后,大家注意去学习Mlib算法库;

Storm会被Spark Streaming替换吗?在这里,Storm虽然不是hadoop生态中的一员,但我仍然想把它放在一起做过比较。由于Spark和hadoop天衣无缝的结合,Spark在逐步的走向成熟和稳定,其生态组件也在逐步的完善,是冉冉升起的新星,我相信Storm会逐步被挤压而走向衰退。

发布了83 篇原创文章 · 获赞 3 · 访问量 4291

猜你喜欢

转载自blog.csdn.net/juan333/article/details/104075498
今日推荐