赞
踩
Apache Hadoop 为可靠的,可扩展的分布式计算开发开源软件。
Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集(海量的数据)。包括这些模块:
HDFS最初的设计是存储相对大的文件,文件一次写入,多次读取。Vavilappalli说。“随着时间的推进,我们发现新的任务需要存储小的对象,它可能是一个照片或者视频。如何能够以一种更加高效,方便的方式去存储用户想要保存的数据,这些不是典型的Hadoop任务,因此需要存储大量的小对象,并且人们只能使用HDFS去存储它们。 OZone将更适合存储这类对象。
Ozone参考:http://lib.csdn.net/article/hadoop/6301
Hive | Hbase |
数据仓库工具 | Hadoop DataBase |
将结构化的数据文件映射为一张数据库表 | Nosql,可处理非结构化数据 |
提供简单的sql查询功能,写操作仅限append | 支持增删改查 |
对数据进行离线分析查询
| 对数据继续实时分析 |
高延迟
| 低延迟 |
把sql语句换成mapreduce跑 | 内带一个数据库,也可以跑MR |
3、Spark-sql和hadoop哪个快,为什么?
Spark多个任务之间数据通信是基于内存,而Hadoop是基于磁盘。
Hadoop的每次shuffle都必须写到磁盘中,而Spark的shuffle不一定写到磁盘中,而是可以缓存到内存中,以便后续的其他迭代操作时直接使用。
Hadoop的每次shuffle必将连接着一次完成MapReduce操作,而Spark基于RDD提供了丰富的算子操作,而且Spark的shuffle产生的数据可以缓存到内存中。
Hadoop的每次MapReduce操作,启动一个Task便会启动一次JVM
而Spark只在启动Executor时启动一次JVM。但是每次执行一个Task,都是复用Executor中的线程(Executor中维护着一个线程池)。
Spark快不是绝对的,但是绝大多数,Spark都比Hadoop计算要快。这主要得益于其对mapreduce操作的优化以及对JVM使用的优化。
(1)高容错性:数据自动保存多个副本,副本丢失后,会自动恢复。
(2)适合批处理:a:移动计算而非移动数据、b:数据位置暴露给计算框架。
(3)适合大数据处理:GB、TB、甚至PB级数据、百万规模以上的文件数量,1000以上节点规模。
(5)可构建在廉价机器上:通过多副本提高可靠性,提供了容错和恢复机制。
(2)不适合小文件存取:占用NameNode大量内存,寻道时间超过读取时间。
(3)不适合并发写入、文件随机修改:一个文件只能有一个写者,仅支持append
2.resourcemanager将信息加入到等待队列中并返回给客户端jobid,存储路径(HDFS上的路径)信息
3.客户端将job.jar、job.xml、job.split、job.splitinfo包括切片信息等信息上传到存储路径(HDFS上的路径/)
5.resourcemanager将job加入到job队列当中,等待nodemanager领取job,将客户端发出命令启动AppMaster,然后nodemanager启动container,job.jar、job.xml、job.split、job.splitinfo等信息下载到container内
6.AppMaster计算资源,向resourcemanager请求maptask的资源(container启动maptask)
7.resourcemanager根据心跳信息分配资源(container),下载job.jar到container内,AppMaster启动maptask(yarnchild)
8.maptask执行完成,通知AppMaster,然后释放maptask资源,AppMaster向resourcemanager申请reducetask的资源
9.resourcemanager分配资源(container),下载job.jar到container内,AppMaster启动reducetask(yarnchild)
10.reducetask执行完成,通知AppMaster,然后释放reducetask资源。AppMaster通知resourcemanager。AppMaster释放资源。
1.MapTask调用Inputformat方法创建一个RecordReader
RecordReader以此调用nextkeyvalue getcurrentkey getcurrentvalue方法
获取<K,V>传递给Mapper类,每读取一行数据就会调用一次map方法,然后将
通过逻辑处理后的<K,V>输出到OutputCollector
2.Collector将数据缓存到环形缓冲区中,存满80%的数据后会溢出到溢出器
spiller中,然后再溢出器中进行分区和快速排序,将分区后的数据生成
3.在Merge中将这几个文件进行归并排序后生成一个(局部有序-->分区内有序)文件(一个MapTask对应一个大文件)
4.一个Reduce去所有MapTask的输出文件中拉去相同分区的数据然后通过Merger进行归并排序
(ReduceTask数量可以通过手动设置) 第二个再去相应分区拉取
5.ReduceTask从合并后的文件中读取 一个key传递给reduce方法,同时传递一个value迭代器
value迭代器的hasnext方法会判断文件中的下一个key
是否还是已经传入的key,如果是,则next可以返回下一个value 否则,hasnext直接返回false,本次reduce结束
6.Reducer中的reduce方法将输出的结果导入到外部文件系统
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。