一.介绍Hadoop生态圈相关组件
Hadoop 是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。
1.HDFS(hadoop分布式文件系统)
是hadoop体系中数据存储管理的基础。他是一个高度容错的系统,能检测和应对硬件故障。
client:切分文件,访问HDFS,与namenode交互,获取文件位置信息,与DataNode交互,读取和写入数据。
namenode:master节点,在hadoop1.x中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户 端请求。
DataNode:slave节点,存储实际的数据,汇报存储信息给namenode。
secondary namenode:辅助namenode,分担其工作量:定期合并fsimage和fsedits,推送给namenode;紧急情况下和辅助恢复namenode,但其并非namenode的热备。
2.mapreduce(分布式计算框架)
mapreduce是一种计算模型,用于处理大数据量的计算。其中map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。
jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给tasktracker。
tacktracker:slave节点,运行 map task和reducetask;并与jobtracker交互,汇报任务状态。
map task:解析每条数据记录,传递给用户编写的map()并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。
reduce task:从map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的reduce函数执行。
3. hive(基于hadoop的数据仓库)
由Facebook开源,最初用于解决海量结构化的日志数据统计问题。hive定于了一种类似sql的查询语言(hql)将sql转化为mapreduce任务在hadoop上执行。
4.hbase(分布式列存数据库)
hbase是一个针对结构化数据的可伸缩,高可靠,高性能,分布式和面向列的动态模式数据库。和传统关系型数据库不同,hbase采用了bigtable的数据模型:增强了稀疏排序映射表(key/value)。其中,键由行关键字,列关键字和时间戳构成,hbase提供了对大规模数据的随机,实时读写访问,同时,hbase中保存的数据可以使用mapreduce来处理,它将数据存储和并行计算完美结合在一起。
5.zookeeper(分布式协作服务)
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
6.sqoop(数据同步工具)
sqoop是sql-to-hadoop的缩写,主要用于传统数据库和hadoop之间传输数据。数据的导入和导出本质上是mapreduce程序,充分利用了MR的并行化和容错性。
7.pig(基于hadoop的数据流系统)
定义了一种数据流语言-pig latin,将脚本转换为mapreduce任务在hadoop上执行。通常用于离线分析。
8.mahout(数据挖掘算法库)
mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。mahout现在已经包含了聚类,分类,推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法是,mahout还包含了数据的输入/输出工具,与其他存储系统(如数据库,mongoDB或Cassandra)集成等数据挖掘支持架构。
9.flume(日志收集工具)
cloudera开源的日志收集系统,具有分布式,高可靠,高容错,易于定制和扩展的特点。他将数据从产生,传输,处理并写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在flume中定制数据发送方,从而支持收集各种不同协议数据。
10.资源管理器的简单介绍(YARN和mesos)
随着互联网的高速发展,基于数据 密集型应用 的计算框架不断出现,从支持离线处理的mapreduce,到支持在线处理的storm,从迭代式计算框架到 流式处理框架s4,...,在大部分互联网公司中,这几种框架可能都会采用,比如对于搜索引擎公司,可能的技术方法如下:网页建索引采用mapreduce框架,自然语言处理/数据挖掘采用spark,对性能要求到的数据挖掘算法用mpi等。公司一般将所有的这些框架部署到一个公共的集群中,让它们共享集群的资源,并对资源进行统一使用,这样便诞生了资源统一管理与调度平台,典型的代表是mesos和yarn。
二.详细介绍MapReduce的特点及运行架构
Hadoop MapReduce是一个分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。
MapReduce是一种面向海量数据处理的一种指导思想,也是一种用于对大规模数据进行分布式计算的编程模型,由于计算时长及效率不高,所以现在基于大数据的分布式计算框架mapreduce并不常用,但是有些软件依然依赖于mapreduce设计思想。
MapReduce特点:
1.易于编程:
Mapreduce框架提供了用于二次开发的接口;简单地实现一些接口,就可以完成一个分布式程序。任务计算交给计算框架去处理,将分布式程序部署到hadoop集群上运行,集群节点可以扩展到成百上千个等。
2.良好的扩展性:
当计算机资源不能得到满足的时候,可以通过增加机器来扩展它的计算能力。基于MapReduce的分布式计算得特点可以随节点数目增长保持近似于线性的增长,这个特点是MapReduce处理海量数据的关键,可以扩展为成百上千个节点很容易地处理数百TB甚至PB级别的离线数据。
3.高容错性:
Hadoop集群是分布式部署的,如果任意一个节点宕机了,它可以把上面的计算任务转移到另一个节点上运行,不影响整个作业任务得完成,过程完全是由Hadoop内部完成的。
4.海量数据离线处理:
TB、PB级别的海量数据。
5.KV键值存储:
整个MapReduce程序中,数据都是以kv键值对的形式流转的。
MapReduce缺点及局限性:
1.实时计算能力差:
MapReduce主要应用于离线作业,无法作到秒级或者是亚秒级的数据响应。
2.不能进行流式计算:
流式计算特点是数据是源源不断地计算,并且数据是动态的;而MapReduce作为一个离线计算框架,主要是针对的是静态数据集而数据是不能动态变化的。
3.运行架构:
MR 主要分成 map 和 reduce 两个阶段,核心思想就是**“分而治之”。Mapper主要负责“拆分”,即把复杂的任务分解成若干个“小任务”进行处理。 Reduce 阶段是将 Mapper 阶段得到的结果进行汇总**。
一个完整的MapReduce程序在分布式运行时有三类:
1.MRAppMaster:负责整个MR程序的过程调度及状态协调。
2.MapTask:负责map阶段的整个数据处理流程。
3.ReduceTask:负责reduce阶段的整个数据处理流程。
三.详细介绍spark的特点,并与MapReduce作对比说明区别
1.快速
使用DAG执行引擎以支持循环数据流与内存计算(spark基于内存)。
而MapReduce是基于磁盘,spark的中间数据存放于内存中,有更高的迭代运算效率,而MapReduce每次迭代的中间数据存放于HDFS中,涉及硬盘的读写,运算效率相对较低。
2.易用
Spark支持使用Scala、Python、Java、R等语言快速编写应用,还提供了语言的交互模式界面,也提供超过80个高阶算子,使得编写并行应用程序变得容易。
3.通用
Spark可于SQL语句、实时计算及其他复杂的分析计算进行良好的结合。Spark框架包含多个紧密集成的组件。
相较于MapReduce框架,Spark无论在性能还是在方案统一性等方面,都有优势,Spark全栈统一的解决方案非常具有吸引力,可极大地减少平台部署,开放和维护人力和物力成本。
4.随处运行
用户可以使用Spark的独立集群模式运行Spark等等,它作为一个分布式计算框架,本身没有存储功能,但它可从HDFS、Hive等数据源中读取数据。
5.代码简洁
它支持Scala、Python等语言编写代码,相较于Java的代码而言比较简单。
MapReduce实现单词计数可能需要60多行代码,而Spark使用scala语言实现只需要一行。
四.熟练掌握Linux操作命令并演示说明
五.冷备 温备 热备
1.热备
在数据库运行状态下进行备份,备份时不需要停止数据库的服务。但是,由于备份时需要访问数据库文件,因此备份过程中可能会影响数据库的正常运行。这种方式在 MySQL 官方手册中称为 Online Backup (在线备份)。
2.冷备
在关闭数据库的情况下进行备份。这种备份方式不影响数据库的正常运行,但是需要停止数据库的服务。适用于小型数据量、备份频繁及服务器空闲时进行备份。这种方式在 MySQL 官方手 册中称为 Offline Backup(离线备份)。
3.温备
温备份同样是在数据库运行中进行的,但是会对当前数据库的操作有所影响,备份时 仅支持读操作,不支持写操作。
六.数据类型 (举例说明)
1.结构化数据
结构化数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据。一般特点:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。
如mysql数据库中的数据,csy文件。
举例:计算机系统是由硬件系统和软件系统这两大系统组成,硬件系统由CPU、存储器、输入/输出设备、外设组成,而软件系统由系统软件和应用软件组成。如果把它们视为数据元素,这些元素之间所呈现的是一种层次关系,从上到下按层进行展开,形成“一棵倒立的树”,最上层是“树根”,依层向下展出“节点”和“树叶”。树结构还有一个单位的组织机构、国家行政区域规划、书籍目录等。在这类问题中,计算机处理的对象是树结构,元素之间是一种一对多的层次关系,这类数学模型称为树的数据结构。
2.非结构化数据
非结构化数据是指信息没有一个预先定义好的数据模型或者没有以一个预先定义的方式来组织。非结构化数据一般指大家文字型数据,但是数据中有很多诸多时间,
数字等的信息。相对于传统的在数据库中或者标记好的文件,由于他们的非特征性和歧义性,会更难理解。
举例:在使用非结构化地理数据时,我遇到了同一个地理辖区不同拼写的问题。例如,Chhattisgarh(印度的一个邦)被拼写为Chattisgarh,Chhatisgarh和Chhattisgarh。这又带来了麻烦。为了解决该问题,我们创建一个临时的映射层,将代码分配给字符串值,从而通过主数据上的代码从主表中获取正确的拼写以进行操作。尽管在我看来,构建系统会限制用户选择拼写地理名称的方式,而不是向他们提供预先填充的下拉列表,那样问题就彻底解决了。
3.半结构化数据
半结构化数据可以通过灵活的键值调整获取相应信息,且数据的格式不固定,如json,同一键值下存储的信息可能是数值型的,可能是文本型的,也可能是字典或者列表。
半结构化数据,属于同一类实体可以有不同的属性,即使他们被组合在一起,这些属性的顺序并不重要。常见的半结构数据有XML和JSON。
举例: