1. 大数据概念
-
是指无法在
一定时间范围内
用常规软件工具进行捕捉
、管理
和处理
的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产
。 -
主要解决海量数据的
存储
和海量数据的分析计算
问题
1.1 特点:
- 大量
- 高速
- 多样: 除了结构化数据,还包括日志、音频、视频、图片、地理位置等数据
- 低价值密度★★
1.2 应用场景
- 仓储物流:科学库存布局、拣货路径优化、智能单量预测、仓储作业人效提升等
- 零售: 用户消费习惯分析
- 旅游: 个性推荐、人流分析、人脸识别、口碑监测等
- 商品广告推荐
2 Hadoop
Hadoop可以指Hadoop软件本身,也可以指Hadoop生态圈(即Hadoop和它的一系列衍生品)。
2.1 初衷
hadoop的初衷是采用大量的廉价机器,组成一个集群!完成大数据的存储和计算
!
2.2 主要解决
海量数据的存储
和海量数据的分析计算
问题。
2.3 发展历史
2003-2004年,Google公布了部分GFS和MapReduce思想的细节,受此启发的Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。然后Yahoo招安Doug Gutting及其项目。
2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。
2006年2月被分离出来,成为一套完整独立的软件,起名为Hadoop
Hadoop名字不是一个缩写,而是一个生造出来的词。是Hadoop之父Doug Cutting儿子毛绒玩具象命名的。
Hadoop的成长过程
-
Lucene–>Nutch—>Hadoop
总结起来,Hadoop起源于Google的三大论文
-
GFS:Google的分布式文件系统Google File System
-
MapReduce:Google的MapReduce开源分布式并行计算框架
-
BigTable:一个大型的分布式数据库
演变关系
-
GFS—->HDFS
-
Google MapReduce—->Hadoop MapReduce
-
BigTable—->HBase
2.4 hadoop的历史版本介绍
0.x系列版本:hadoop当中最早的一个开源版本,在此基础上演变而来的1.x以及2.x的版本
1.x版本系列:hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等
2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性
2.5 hadoop三大公司发型版本介绍
1.免费开源版本apache:
-
优点:拥有全世界的开源贡献者,代码更新迭代版本比较快,
-
缺点:版本的升级,版本的维护,版本的兼容性,版本的补丁都可能考虑不太周到,学习可以用,实际生产工作环境尽量不要使用
-
apache所有软件的下载地址(包括各种历史版本):http://archive.apache.org/dist/
2.免费开源版本hortonWorks:
-
hortonworks主要是雅虎主导Hadoop开发的副总裁,带领二十几个核心成员成立Hortonworks,核心产品软件HDP(ambari),HDF免费开源,并且提供一整套的web管理界面,供我们可以通过web界面管理我们的集群状态,web管理界面软件HDF网址(http://ambari.apache.org/)
3.软件收费版本ClouderaManager:
- https://www.cloudera.com/
- cloudera主要是美国一家大数据公司在apache开源hadoop的版本上,通过自己公司内部的各种补丁,实现版本之间的稳定运行,大数据生态圈的各个版本的软件都提供了对应的版本,解决了版本的升级困难,版本兼容性等各种问题,生产环境强烈推荐使用
2.6 优势
- 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失
- 高扩展性:在集群间分配任务数据,可以方便的扩展数以千计的节点
- 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
- 高容错性:能够自动将失败的任务自动分配。
2.7 组成
1.x和2.x的区别是将资源调度和管理进行分离!由同一的资源调度平台YARN进行大数据计算资源的调度!
- 提升了Hadoop的通用性!Hadoop搭建的集群中的计算资源,不仅可以运行Hadoop中的MR程序!
- 也可以运行其他计算框架的程序!
- 在hadoop不久之后,由于MR的低效性,出现了许多更为高效的计算框架!例如: Tez,Storm,Spark,Flink
2.8 2.x版本hadoop的组成
-
HDFS
(框架):负责大数据的存储 -
YARN
(框架): 负责大数据的资源调度 -
MR
(编程模型): 使用Hadoop制定的编程要求,编写程序,完成大数据的计算!
2.9 完成大数据的计算
①写程序,程序需要复合计算框架的要求!
-
java---->main----->运行
-
MapReduce(编程模型)----->Map--Reducer
②运行程序,申请计算资源(cpu+内存,磁盘IO,网络IO)
- java----->JVM------>OS----->申请计算资源
- 1.0: MapReduce(编程模型)---->JobTracker----->JVM----->申请计算资源
- 2.0: MapReduce(编程模型)---->jar------>运行时,将jar包中的任务,提交给YARN,和YARN进行通信
-
- 由YARN中的组件-----JVM------>申请计算资源
2.10 HDFS: 负责大数据的存储
必须进程
- Namenode(1个):
- 负责文件的名称等元数据(属性信息)存储!
- 元数据就包括:文件名,大小,文件切分了多少块(block),创建和修改时间等!
- 职责:
-
-
接受客户端的请求!
-
-
-
接受DN的请求!
-
-
-
向DN分配任务!
-
- Datanode(N个): 负责文件中数据的存储!
- 职责:
-
-
负责接受NM分配的任务
-
-
-
负责数据块(block)的管理(读,写)
-
可选进程
- SecondaryNamenode(N个):
- 负责辅助NameNode工作!
2.11 MapReduce
MapReduce(是一个编程规范): 程序中有Mapper(简单处理)和Reducer(合并)
遵循MapReduce的编程规范,编写的程序,打包后,称为一个Job(任务)!
Job需要提交到YARN上,向YARN申请计算资源,运行Job中的Task(进程)!
Job会先创建一个进程MRAppMaster(mapreduce 应用管理者),由MRAppMaster向YARN申请资源!
MRAppMaster负责监控Job中各个Task运行情况,进行容错管理!
2.12 YARN
YARN负责集群中所有计算资源的管理和调度!
常见进程:
ResourceManager(1个): 负责整个集群所有资源的管理!
- 职责:
-
-
负责接受客户端的提交Job的请求!
-
-
-
负责向NM分配任务!
-
-
-
负责接受NM上报的信息!
-
NodeManager(N个): 负责单台计算机所有资源的管理!
- 职责:
-
-
负责和RM进行通信,上报本机中的可用资源!
-
-
-
负责领取RM分配的任务!
-
-
-
负责为Job中的每个Task分配计算资源!
-
2.13 概念:Container(容器)
NodeManager为Job的某个Task分配了2个CPU和2G内存的计算资源!
为了防止当前Task在使用这些资源期间,被其他的task抢占资源!
将计算资源,封装到一个Container中,在Container中的资源,会被暂时隔离!
无法被其他进程所抢占!
当前Task运行结束后,当前Container中的资源会被释放!允许其他task来使用!
3. 大数据生态
- Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等. 中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
- Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制. 的能力。
- Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
- 1). 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
- 2). 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
- 3). 支持通过Kafka服务器和消费机集群来分区消息。
- 4). 支持Hadoop并行数据加载。
- Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
- Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
- Oozie:Oozie是一个管理Hdoop作业(job. 的工作流程调度管理系统。
- Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
- Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
- R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
- Mahout:Apache Mahout是个可扩展的机器学习和数据挖掘库。
- ZooKeeper:Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。