一、Hadoop 生态圈组件介绍
1.HDFS(分布式文件系统)
HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
2.MapReduce(分布式计算框架)
MapReduce是一种基于磁盘的分布式并行批处理计算模型,用于处理大数据量的计算。其中Map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,Reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。
3.Mahout(数据挖掘算法库)
开源项目,它提供了一些可扩展的机器的机器学习领域经典算法的实现,在帮助开发人员方便快捷地创建智能应用程序。
4.Yarn(分布式资源管理器)
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。
5.Zookeeper(分布式协作服务)
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。
6.Sqoop(数据同步工具)
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。
7.Hive(基于Hadoop的数据仓库)
Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。
8.HBase(分布式列存储数据库)
HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
9.Flume(日志收集工具)
Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。
二、MapReduce概述
MapReduce是一个分布式运算程序
的编程框架,其核心功能
为把用户编写的业务逻辑代码
和自带默认组件
整合成一个完整的分布式运算程序
,并发运行
在hadoop集群
上。
MapReduce的特点:
(1)易于编程:它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。
(2)良好的扩展性:当已经加入计算的计算机资源不能够满足计算的时候框架会通过增加机器的方式来提高和扩展他的计算能力。
(3)高容错性:Hadoop集群是分布式搭建和部署得,当部署的集群中如果有任何一台机器因为故障宕机,它会把这个计算机上的计算任务交给其他的计算机继续进行计算任务,以保证我们的整体计算任务的完成。
(4)适合PB级以上海量数据的离线处理:可以计算很高级别的数据量(GB\TB\PB)(但是不可以用于计算流式数据)。
三、spark技术特点和概述
spark的特点:
1.快速;2.易用;3.通用;4.随处运行;5.代码简洁。
spark的架构:
1)客户端:用于提交作业的客户端。
2)Driver:负责运行应用程序的main函数并创建SparkContext,运用程序包括Driver功能的代码和分布在集群中多个节点上的Executor代码。
3)SparkContext:应用上下问,控制整个生命周期。
4)Cluster Manager:资源管理器,即在集群上获取资源的外部服务,目前主要有Standalone和YARN。
5)Spark Worker:集群中任何可以运行应用程序的节点,运行一个或多个Executor进程。
6)Executor:运行在Spark Worker上的任务执行器,Executor启动线程池运行Task,并负责将数据存在内存或磁盘上,每个应用程序都会申请各自的Executor以处理任务。
7)Task:被发送某个Executor的具体任务。
四、mapreduce和spark的区别
1)Spark的运行速度是Hadoop MapReduce运行速度的100多倍。
Spark与Hadoop MapReduce运行速度差异较大在原因是,Spark的中间数据存放于内存中,有更高的迭代运算效率,而Hadoop MapReduce每次迭代在中间数据存放于HDFS中,涉及硬盘读写,运算效率相较于低。
2)Spark提供了丰富的API,包括 scala、Java、Python等。开发起来更加灵活、表达能力更强。而 MapReduce 使用 Java 编程语言来编写 Map 和 Reduce 函数,需要手动编写更多的代码来实现处理逻辑。
3)Spark 有更好的扩展性,可以方便的与其他数据处理框架和工具集成。如:Spark Streaming用于流处理、Spark SQL 用于查询和结构化数据处理、Spark MLlib用于机器学习等。
4)Spark提供了弹性式分布数据集RDD,具有自动容错和数据恢复机制。能够在节点故障时重新计算丢失的数据。
MapReduce 需要在每个任务的开始和结束时将数据写入磁盘,因此在故障情况下需要重新启动整个计算。
五、结构化数据与非结构化数据
结构化数据:
通常以清晰、有组织的方式表达的数据,其形式可以是表格、关系数据库等。这些数据通常存储在数据库中,并且具有明确的字段和记录定义,使得它们易于查询、排序和分析。常见的类型包括数值型数据、字符型数据、日期/时间数据和混合型数据等。
非结构化数据:
包括各种形式的数据,如文本、音频、图像、视频等,通常不容易以结构化的形式进行表示和处理。非结构化数据通常是自描述的,其结构和内容混在一起,没有明显的区分,因此处理起来相对复杂且需要特定的技术和工具进行解析和管理。