昨天有人问我spark是什么,和mapreduce,yarn,hadoop有什么区别和联系。今天饭毕就来絮叨絮叨这些东西。
第一个问题hadoop是什么?一句话,hadoop是大数据处理全家桶。其包括了hdfs(hadoop file system), yarn, mapreduce等。当然,hadoop也是一头象:P。
这里面呢,有的要学,有的不用学。最典型的要学的就是hdfs,最典型的不要学的就是mapreduce。原因也很简单,这个东西已经过时了。
什么是hdfs呢?首先它是一个文件系统。文件系统就是将磁盘,硬盘等变成抽象的文件夹的软件系统。hadoop file system 就是将许多块分布在网络上的磁盘,变成一个一个文件夹的软件,让它们看起来就像是一个电脑上的文件夹一样。
例如
hadoop fs -cat hdfs://host1:port1/file1 hdfs://host2:port2/file2
hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI …]
hadoop fs -cp URI [URI …] <dest>
这些命令的核心是与linux 的shell命令是很像的。
什么是yarn呢?yarn就是你的管家,任务执行时的管家。
想象一下,当你给100台机器分发一个任务的时候。有哪些共有的操作需要完成呢?首先是任务什么时候做。当前机器有没有这么多的资源给你做。如果要做的话,哪些机器做具体的哪一个任务。机器在完成任务的时候,如果有一台机器突然死机了,怎么办,你如何得知。它做的这一部分任务如何重新分配。任务做完了以后垃圾文件要清理。这些都需要被完成。yarn就是完成这些功能的管家。
它会对你的任务进行排期。帮你申请资源。帮你进行任务分发,尽可能的让有相应数据的机器去做需要数据的任务。帮你监督这些机器,一旦有机器坏掉了,将该子任务重新交给别的机器去做。任务做完了以后,还帮你做一做打扫。
有一个不成熟的小比喻,就是yarn就像一个产品经理。帮你排期,帮你协调资源,有人离职了帮你进行任务的交接,任务做完了帮你评审,帮你写总结。
说了这么多,说了些辅助的工具。现在该轮到计算引擎了。mapreduce就是这样的计算引擎。mapreduce真的是太麻烦了。需要继承Mapper,写上一大堆没有用的代码。Luckily,它已经被淘汰了。
你真正需要了解的是spark。spark是大数据的计算引擎,是真正 需要完成任务的。spark不能单独存在,它得需要hdfs,yarn的帮助。就像一个研发人员是需要电脑和产品经理才能让研发专注于业务。什么是计算引擎呢,举个例子。假设你需要统计一下你今年卖了多少产品。可是你只有交易记录。这可怎么办呢,这个时候你就需要spark来帮你完成这个计算任务。
假设你的表格是这样的
(‘牙膏’, 2)
(‘电脑’, 3)
…
(‘书’, 5)
可是你的数据量特别大,大到这些数据并没有在一台机器上面存。幸好,有了hdfs的帮助,这些数据存在hdfs上。假设dataframe就是你的表格
dataframe.rdd.map(row=>row('goods_name')->row('num')).reduceByKey(_+_)
简单不,就这么一行,就能把大量的底层操作全部屏蔽掉,让你的帮手hdfs,yarn,spark把恶心的东西都帮你做了。
这就是spark。