Hadoop:
Apache Hadoop项目为可靠、可扩展、分布式计算开发开源软件。Apache Hadoop软件库是一个允许使用简单编程模型跨计算机集群分布式处理大型数据集的框架。它被设计成从单个服务器扩展到数千台机器,每个机器提供本地计算和存储。而不是依赖于硬件来提供高可用性,库本身被设计成检测和处理应用层的故障,因此在计算机群集的顶部提供高度可用的服务。
该项目包括以下模块:
Hadoop Common:支持其他Hadoop模块的通用工具。
Hadoop Distributed File System(HDFS):一种分布式文件系统,它提供对应用程序数据的高吞吐量访问(什么都能往这放)。
Hadoop Yarn:作业调度和集群资源管理的框架。
Hadoop MapReduce:一个用于大型数据集并行处理的系统。
HDFS:
1. HDFS特点:
HDFS专为解决大数据存储问题而产生的,其具备了以下特点:
1) HDFS文件系统可存储超大文件
每个磁盘都有默认的数据块大小,这是磁盘在对数据进行读和写时要求的最小单位,文件系统是要构建于磁盘上的,文件系统的也有块的逻辑概念,通常是磁盘块的整数倍,通常文件系统为几千个字节,而磁盘块一般为512个字节。
HDFS是一种文件系统,自身也有块(block)的概念,其文件块要比普通单一磁盘上文件系统大的多,默认是64MB。
HDFS上的块之所以设计的如此之大,其目的是为了最小化寻址开销。
HDFS文件的大小可以大于网络中任意一个磁盘的容量,文件的所有块并不需要存储在一个磁盘上,因此可以利用集群上任意一个磁盘进行存储,由于具备这种分布式存储的逻辑,所以可以存储超大的文件,通常G、T、P级别。
2) 一次写入,多次读取
一个文件经过创建、写入和关闭之后就不需要改变,这个假设简化了数据一致性的问题,同时提高数据访问的吞吐量。
3) 运行在普通廉价的机器上
Hadoop的设计对硬件要求低,无需昂贵的高可用性机器上,因为在HDFS设计中充分考虑到了数据的可靠性、安全性和高可用性。
2. 不适用于HDFS的场景:
1) 低延迟
HDFS不适用于实时查询这种对延迟要求高的场景,例如:股票实盘。往往应对低延迟数据访问场景需要通过数据库访问索引的方案来解决,Hadoop生态圈中的Hbase具有这种随机读、低延迟等特点。
2) 大量小文件
对于Hadoop系统,小文件通常定义为远小于HDFS的block size(默认64MB)的文件,由于每个文件都会产生各自的MetaData元数据,Hadoop通过Namenode来存储这些信息,若小文件过多,容易导致Namenode存储出现瓶颈。
3) 多用户更新
为了保证并发性,HDFS需要一次写入多次读取,目前不支持多用户写入,若要修改,也是通过追加的方式添加到文件的末尾处,出现太多文件需要更新的情况,Hadoop是不支持的。
针对有多人写入数据的场景,可以考虑采用Hbase的方案。
4) 结构化数据
HDFS适合存储半结构化和非结构化数据,若有严格的结构化数据存储场景,也可以考虑采用Hbase的方案。
5) 数据量并不大
通常Hadoop适用于TB、PB数据,若待处理的数据只有几十GB的话,不建议使用Hadoop,因为没有任何好处。
Yarn:
Yarn是Hadoop集群的资源管理系统。Hadoop2.0对MapReduce框架做了彻底的设计重构,我们称Hadoop2.0中的MapReduce为MRv2或者Yarn。在介绍Yarn之前,我们先回头看一下Hadoop1.x对MapReduce job的调度管理方式(可参考:Hadoop核心之MapReduce架构设计),它主要包括两部分功能:
1. ResourceManagement 资源管理
2. JobScheduling/JobMonitoring 任务调度监控
到了Hadoop2.x也就是Yarn,它的目标是将这两部分功能分开,也就是分别用两个进程来管理这两个任务:
1. ResourceManger
2. ApplicationMaster
需要注意的是,在Yarn中我们把job的概念换成了application
,因为在新的Hadoop2.x中,运行的应用不只是MapReduce了,还有可能是其它应用如一个DAG(有向无环图Directed Acyclic Graph,例如storm应用)。Yarn的另一个目标就是拓展Hadoop,使得它不仅仅可以支持MapReduce计算,还能很方便的管理诸如Hive、Hbase、Pig、Spark/Shark等应用。这种新的架构设计能够使得各种类型的应用运行在Hadoop上面,并通过Yarn从系统层面进行统一的管理,也就是说,有了Yarn,各种应用就可以互不干扰的运行在同一个Hadoop系统中,共享整个集群资源
Hive:
Apache HIVE数据仓库软件有助于使用SQL来读取、写入和管理驻留在分布式存储中的大型数据集。结构可以投射到已经存储的数据中。提供了命令行工具和JDBC驱动程序,以将用户连接到Hive。
Scala:
Scala将面向对象和功能编程结合在一个简洁、高级的语言中。Scala的静态类型有助于避免复杂应用程序中的错误,JVM和JavaScript运行时允许您构建高性能的系统,方便访问大型图书馆的生态系统。
Spark:
Apache Spark是大规模数据处理的统一分析引擎。
详细介绍:https://www.jdon.com/bigdata/why-spark.html
Sqoop:
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
对于某些NoSQL数据库它也提供了连接器。Sqoop,类似于其他ETL工具,使用元数据模型来判断数据类型并在数据从数据源转移到Hadoop时确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割数据集并创建Hadoop任务来处理每个区块。