我想把技术写成故事,说给自己听!
一次偶然的机会,在看Spark的时候,被Apache Hadoop这个字眼吸引。Apache这个经常出现在Java程序员视野中的单词究竟是什么,其和Hadoop、Spark又到底是怎样的关系呢?带着这几个疑惑,今天我特地理了理Apache、Hadoop和Spark这三者的关系。
Apache
Apache是由Apache软件基金会(Apache Software Foundation)这个非盈利性组织运作的一个开源项目,即Apache项目。Apache项目以及其子项目都遵循Apache许可证(Apache License)。
Apache的子项目包括:
- Apache HTTP Server:世界排名第一的Web服务器,简称Apache
- Apache Tomcat Server:Java应用服务器,可与Apache HTTP服务器一起部署使用。
- Apache Hadoop:一个支持对大数据进行分布式处理的软件框架
- Apache Spark:一个专门为大规模数据快速处理设计的通用处理引擎
- Apache Maven:一个项目管理工具
- Apache IBatis:一个常用的ORM框架,后来发展成为MyBatis
- Apache Struts:一个常用的MVC Web框架
- Apache ActiveMQ:一个开源消息中间件
- Apache Zookeeper:一个常用的分布式应用程序协调服务框架,为分布式应用提供一致性服务。
......
Hadoop
Hadoop即Apache Hadoop,是由Apache软件基金会开发维护的一个支持对大数据进行分布式处理的软件框架,其核心模块包括:
- HDFS(Hadoop Distributed File System),即Hadoop分布式文件系统
- Hadoop Yarn,Hadoop资源管理器
- Hadoop MapReduce,可用于对大规模数据进行并行计算的编程模型
我们经常拿Spark和Hadoop比较,其实是拿Spark和Hadoop MapReduce比较,Spark本身可以和HDFS、Hadoop Yarn一起使用。
Spark
Spark即Apache Spark,是由Apache软件基金会开发维护的一个专门为大规模数据进行快速处理的计算引擎。与Hadoop MapReduce相比,Spark拥有以下优势:
快速
与Hadoop MapReduce相比,得益于Spark自身的DAG执行引擎,其基于硬盘的计算速度就已经可以比前者快10倍以上,基于Spark内存计算的计算速度甚至可以比前者快100倍以上。
通用
在Spark强大的分布式数据处理能力基础上,Spark为大规模数据处理提供了一个完整的技术栈。其四大子框架:Spark SQL、Spark GraphX、Spark MLLib和Spark Streaming可以基于RDD或DataFrame实现无缝对接。
- Spark SQL:
- Spark GraphX:图处理
- Spark MLLib:机器学习(对标Apache Mahout)
- Spark Streaming:实时流处理
易用
Spark提供了多种语言的API,支持多语言编程。
集成Hadoop
Spark可以支持Hadoop Yarn和HDFS,使得从Hadoop迁移到Spark上变得更加简单。
总结
Apache可以理解成Apache软件基金会,也是Apache HTTP Server的简称,也可以理解成Apache软件基金会运作的Apache开源项目,其中,Apache Hadoop和Apache Spark就是Apache下两个有名的开源项目。与Apache Hadoop相比,Apache Spark在大规模数据并发处理上拥有诸多优势。