大数据相关理论知识
Hadoop
大数据的四大特征:海量数据、价值密度低、数据类型多样、数据更新快。
hadoop生态圈:HDFS、 MapReduce、 HBASE、 HIVE、 ZOOKEEPER、 PIG、 SQOOP、 Flume、 MAHOUT、 YARN
hadoop启动后6个进程:Namenode、 SecondaryNamenode、 DataNode、 ResourceManager、 NodeManager、 jps。
Hadoop高可靠,高容错,运行在Linux上。DataNode负责存储被拆分的数据块。Hadoop是由 Doug Cutting创建的。
Hadoop在大数据领域具有的功能是:离线分析,实时查询,BI分析。
Secondary namenode:SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并缩短Namenode的启动时间。
Hadoop在企业的应用架构中可以放在访问层,数据源层,大数据层。
Hadoop访问层的功能是:数据分析,数据实时查询,数据挖掘。
Hadoop可以作为开发工具,开源软件,商业化工具。
Hadoop集群的性能主要受到以下因素影响:CPU性能,内存,网络,存储容量。
Hadoop的集群节点有哪些:DataNode,JobTracker,Taskracker,SecondaryNameNode。
Hadoop1.0的不足之处是:抽象层次低,需要人工编码。单一节点存在单点失效问题,单一命名空间,无法实现资源隔离,资源管理效率低。不支持水平扩展,整体性能受限于单个名称节点的吞吐量。HDFS HA是热备份,提供高可用,但是无法解决可扩展性,系统性能低和隔离性。
哪些属于Hadoop1.0的核心组件的不足之处?
实时性差(适合批处理,不支持实时交互式)
资源浪费(Map和Reduce分两阶段执行)
执行迭代操作效率低
难以看到程序整体逻辑
Hadoop1.0存在的问题:单点故障问题,不可以水平扩展,单个名称节点难以提供不同的程序之间的隔离性。系统整体性能受限于单个名称节点的吞吐量。
HDFS Federation容易出现内存溢出,分配资源只考虑MapReduce任务数,不考虑CPU,内存等资源。但是相对于HDFS1.0的优势体现在性能更高效,良好的隔离性,HDFS集群的扩展性。
Hadoop生态系统中Spark的功能是:基于内存的分布式并行编程框架,具有较高的实时性,并且较好的支持迭代计算。
在Hadoop生态系统中,Kafka主要解决各个组件和其他产品之间缺乏统一的高效的数据交换中介。
Q:Hadoop的优化和发展主要体现在哪几个方面?
A:Hadoop核心组件MapReduce的设计改进和HDFS的改进还有一点事生态系统中其他组件的不断丰富。
Q:Hadoop2.0做了哪些改进?
A:设计了HDFS HA,提供了名称节点热备份机制,设计了HDFS Federation,管理多个命名空间,设计了新的资源管理框架YARN。
YARN体系结构主要包括ResourceManager,NodeManager,ApplicationMaster,DataManager。
Q:在YARN中ApplicationMaster主要功能包括哪些?
1、ApplicationMaster与ResourceManager协商获取资源,ResourceManager会以容器的形式为ApplicationMaster分配资源。
2、ApplicationMaster会定时向ResourceManager发送心跳消息,报告资源的使用情况和应用的进度信息。
3、把获得的资源进一步分配给内部的各个任务(Map任务或Reduce任务),实现资源的“二次分配”。
ResourceManager的功能包括:处理客户端请求,监控NodeManager,资源分配与调度。
ApplicationMaster的功能是处理来自ResourceManager的命令。
Q: 如果我们现有一个安装2.6.5版本的hadoop集群,在不修改默认配置的情况下存储200个每个200M的文本文件,请问最终会在集群中产生多少个数据块(包括副本)?
A: 在默认情况下,HDFS集群默认存储文件3份,并且大文件会按照128M的数据块大小进行切割分散存储。所以题目中每个文件分为两块,总数据块有(200 * 2)= 400个。再加上会存储三份,所以 400 * 3 = 1200。
HDFS
Q:什么是分布式文件系统?
A:将多个文件存储到多个计算机节点上,成千上万个计算机节点构成的计算机集群。
Q:计算机集群中的节点有?
A:主节点Master,从节点Slave,名称节点NameNode。
Q:Hadoop-2.6.5集群中的HDFS的默认的数据块的大小是?
A:Hadoop2.x版本以前的默认数据块的大小是64M,到了Hadoop2.x版本以后。 默认的数据块大小就变成了128M,但是是可以更改的。
Q:抽象块的概念带来的好处是?
A:适合数据备份;简化系统设计;支持大规模存储文件。
Q:NameNode的主要作用是?
A:存储元数据。
Q:NameNode主要保存了哪些数据结构?
A:FsImage和EditLog。
Q:DataNode的主要功能是?
A:负责数据的存储和读取。根据客户端或是名称节点的调度来进行数据的存储和检索。向名称节点定期发送自己所存储的数据块列表。
Q:HDFS的命名空间包含什么?
A: 文件,目录,块。
Q:HDFS数据块多副本存储具有哪些特点?
A: 加快数据传输速度,容易检查数据错误,保证数据的可靠性。
HDFS特点:1、简单一致性 2、故障检测和自动恢复 3、流式数据访问 4、支持超大文件 5、优化的读取 6、数据完整性,兼容廉价硬件,支持流数据读写,大数据集合。
HDFS采用主从架构。
格式化namenode命令:hadoop namenode -format
负载均衡作用:让各节点获得分配的任务均衡,发挥各个节点的最大效能
负载均衡命令:hadoop balance [-threshold<threshold>]
[]为可选参数
对大数据进行分布式并行处理的系统框架,是一种并行的方法。HDFS是hadoop的存储系统。
HDFS唯一名称节点的局限性:性能的瓶颈,命名空间的限制,隔离问题,集群的可用性。
HDFS在安全模式下只能读不能写。
HDFS不适合大量小文件的存储,因namenode将文件系统的元数据存放在内存中,因此存储的文件数目受限于 namenode的内存大小。HDFS中每个文件、目录、数据块占用150Bytes。如果存放的文件数目过多的话会占用很大的内存。
HDFS集群的datnaode掉线超时时长的计算公式为:
timeout = 10 * dfs.heartbeat.interval 2 * heartbeat.recheck.interval,不过heartbeat.recheck.interval的单位是ms,dfs.heartbeat.interval的单位是s。
SecondryNameNode 是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。
SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下。SecondaryNameNode是HDFS架构中的一个组成部分。
FsImage文件没有记录文件包含哪些块,以及每个块存储在哪个数据节点;包含文件系统中所有目录和文件inode的序列化形式;用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。
MapReduce
MapReduce采用“ 分而治之”策略,设计理念是计算向数据靠拢,采用的框架是是Master/Slave结构。
谷歌最先提出分布式并行编程模型MapReduce。分布式程序运行在大规模集群上。
JobTracker的主要作用是:负责资源监控和作业调度,监控所有TaskTracker和Job的健康状况。
数据交换是通过MapReduce自身完成的。MapReduce可用于关系代数的运算,分组以及聚合,矩阵和向量乘法运算。不同的Map任务不能进行通信。开发人员在不会分布式并行编程的情况下,也可以很容易将自己的程序运行在分布式系统上,完成海量数据集的计算。
MapReduce体系结构包括,Client,JobTracker,TaskTracker, Task。
Task分为Map Task和Reduce Task两种,均由TaskTracker启动。
在MapReduce工作中,用户不能显示的从一台机器向另一台机器发送消息。
用户可以通过Client提供的一些接口查看作业的运行状态。
用户编写的MapReduce程序通过Client提交到JobTracker。JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器(TaskScheduler)。
slot 分为Map slot 和Reduce slot 两种,分别供MapTask 和Reduce Task 使用。
TaskTracker 使用“slot”等量划分本节点上的资源量(CPU、内存等)。
MapReduce非共享,容错好。Hadoop MapReduce是MapReduce的开源实现,后者比前者使用门槛低很多。
MapReduce相比较传统的并行计算框架的优势是:非共享式,容错性好,普通PC机兼容,扩展性好。数据密集型操作。
MapReduce的作业主要包括从磁盘或者网络读取数据,进行IO密集型工作;计算数据将数据结果合并进行CPU密集型操作。
Split是逻辑概念包含哪些元数据信息?
数据的起始位置,数据的长度,数据所在节点,数据大小。
Map端的Shuffle的描述正确的是?
多个移除文件归并成一个或多个大文件,文件的键值对是排序的。当数据很少的时候,不需要写到磁盘,直接在内存中归并,然后输出给Reduce。
MapReduce是分布式计算编程模型。
Map过程接受<key,value>类型,输出<key,value>类型,用于对切分过的数据进行原始处理。
shuffer过程从Mapper产生的直接输出结果,经过一系列的处理,成为最终的Reducer直接输入数据为止的整个过程。sort(排序)、combine(合并)、partition(分片)
Reduce过程接受<key,{value list}>类型数据,输出<key,value>形式的数据输出,用于对Mapper过程的结果进行汇总,得到最后的输出。
简单描述一下MapReduce的执行过程
从分布式文件系统中读取数据,执行Map任务输出中间结果,通过Shuffle阶段将中间结果分区排序后发送给Reduce任务,执行reduce任务得到最终结果并写入到分布式文件系统中。
Zookeeper
BigTable是一个分布式存储系统。起初用于解决典型的互联网搜索问题。 网络搜索应用查询建立好的索引,从BigTable得到网页。
BigTable与HBASE使用的技术对比。
GFS | HDFS |
---|---|
Chubby | Zookeeper |
MapReduce | Hadoop MapReduce |
HBASE四要素:高可靠、高性能、可伸缩、面向列、实时读写的分布式数据库系统
特点:线性扩展、面向列、大表、稀疏、非结构化、面向海量数据、HQL、高读写场景
wal文件:由HLog管理的预写日志文件。
HFile文件:实际的数据文件
插入数据操作:put ‘表名’ ’行键’,’列族:列’,’值’
获取数据操作:get ‘表名’ ‘行键’ [,’列族[:列]’] [] 为可选内容
HBASE的数据模型中,所有列都是以字符串的形式存储,用户需要自行进行数据类型转换。
它在更新操作的时候,并不会删除数据的旧版本而是生成一个新的版本,旧的版本仍然有保留。
HBase不存在复杂表之间的关系,只有简单的查询,插入,删除,创建,清空等操作。
Pig主要用于数据统计。
HBASE通过一些因素确定单元格,这些因素被叫做四维坐标,分别是行,时间戳,列族,列。
HBase的实现包括三个主要的功能组件:
库函数:链接到每个客户端
一个Master主服务器
许多个Region服务器
主服务器主要负责表和Region的管理工作,管理用户表的增删改查,当Region分裂或者合并后负责重新调整Region的分布。对发生故障失效的Region服务器进行故障转移的处理。
Hbase只有针对行键的索引,如果要访问HBASE表中的行,不能通过时间戳来访问。
元数据表又叫做.META表。用来存储Region和Regina服务器之间的映射关系。
当HBASE表很大的时候,.META表也会被分裂成多个Region。
-ROOT表又叫做根数据表,用来记录元数据表的具体位置。
-ROOT-表只有唯一一个Region,名字是在程序中被写死的。
Zookeeper文件记录了-ROOT-表的位置;-ROOT-表记录了.META.表的Region位置信息;
为了加快访问速度,.META.表的全部Region都会被保存在内存中。
HBASE的三层结构如下图所示。
Q:HBASE的访问接口类型有哪些?
A:HBASE Shell,Native Java API ,Thrift Gateway,REST Gateway。
HBASE数据模型的相关问题。
每个HBASE表都由若干行组成,每个行都由对应的行键标识。列族中的列通过列限定符来定位。每个单元格都保存着同一个数据额多个版本,这些版本由时间戳来标识。
Q:HBASE性能监控都有哪些工具?
A:Master-status(自带) 、Ganglia、 OpenTSDB、Ambari
Q:关于Region服务原理的描述正确的是?
A:每个Region服务器都有自己的HLog文件。每次刷写都生成一个新的StoreFile,数量太多会影响查询速度。合并操作比较耗费资源,只有数量达到一个阈值才会启动合并。Store是Region服务器的核心。
关于HLog的说明:HLog保证分布式系统出错的恢复,为每个Region服务器配置都有HLog,Zookeeper会实时监测每一个Region服务器的状态。Master会对故障的Region服务器进行故障恢复使用HLog。
NoSQL
数据库的四大类型:文档数据库,键值数据库,图数据库,列族数据库。
键值数据库写操作性能高,无法存储结构化数据,扩展性好,灵活度高。
列族数据库大多不支持强一致性事务,容易进行分布式扩展,复杂性低。
事务的四大特性:原子性,一致性,隔离性,持久性。
在可用性方面,NoSQL优于RDBMS。错。
NOSQL的三大基石:CAP,BASE,最终一致性,DN8.
CAP中的C是指一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果量。
一个分布式系统不能同时满足一致性、可用性和分区容忍性这三个需求。
可用性,是指快速获取数据。
分区容忍性,是指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能够正常运行。
NoSQL与关系数据库的比较:
1、 关系数据库以完善的关系代数理论作为基础,有严格的标准
2、 关系数据库可扩展性较差,无法较好支持海量数据存储
3、 NoSQL可以支持超大规模数据存储
4、 NoSQL 数据库缺乏数学理论基础,复杂查询性能不高
HBase
ZOOKEEPER作用:为分布式应用所设计的高可用、高性能且一致的开源协调服务,提供分布锁服务。
目的:加强集群稳定性、持续型、有序性和高效性
Leader:接收Client请求,也可以接收其他Server转发的写请求,负责更新系统状态。
Follower:接受Client请求,如果是写请求转发给Leader来更新系统状态,读请求则由Follower的内存数据库直接响应。
Zab协议:来自Client所有的写请求,都转发给ZK中唯一的Leader。由Leader根据请求发起一个Proposal。然后其他的Server对该Proposal进行投票。之后,Leader对投票进行收集,当投票超过半数时Leader会向所有的Server发送一个通知消息。最后,当Client所连接的Server收到消息时,会把该操作更新到内存中并对Client的写请求做出回应。
Zookeeper在 config 命名空间下,每个znode最多能存储(1M)数据
zookeeper 有很多版本,( apache) 版本是原始版本,( cdh) 版本是对原始版本的增强
zookeeper=文件系统 通知机制.
Zookeeper有四种节点,PERSISTENT-持久节点,EPHEMERAL-临时节点,PERSISTENT_SEQUENTIAL-持久顺序节点,EPHEMERAL_SEQUENTIAL-临时顺序节点。 Zookeeper主要用于提供哪些服务?配置维护,域名服务,分布式同步,组服务。
Hive特点:是一种数据仓库技术,用于查询和管理存储在分布式环境下的大数据集。完美集成SQL技术,提供了类SQL的查询语言,成为HiveQL或HQL,用于查询存储在Hadoop集群中的数据,基于Hadoop分布式批处理系统的数据仓库技术,任务提交具有高延迟性。
为什么安装MYSQL数据库存储元数据:默认Hive内置的Derby数据库存储metastore数据,但Derby只支持在任何时刻仅存在一条会话连接与client和Derby之间,不支持多用户使用Hive访问存储在Derby中的metastore数据,因此使用第三方独立的数据库来存储metastore数据。
建库:
create (DATABASE|SCHEMA) [IF NOTEXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value,…)]; DATABASE|SCHEMA:用于限定创建数据库或数据库模式 IF NOT EXISTS:目标对象不存在时执行创建操作 COMMENT:起注释说明作用 LOCATION:指定数据库位于HDFS上的存储路径。若未创建,将使用${hive.metastore.warehouse.dir}定义值作为其上层路径位置
建表:create table 库.表 ( 列名 类型 );
导入数据:load data[local] input ‘filepath’ [overwrite] into table tablename [partition(partcol1=val1,partcol2=val2…)];
PIG:针对大数据收集分析的平台,拥有完整的数据操作规范-PIG语言。
pig Latin:提供了对数据进行加载、合并、过滤、排序、分组、关联以及支持对数据集使用函数功能或用户自定义函数功能。
SQOOP:Hadoop和REBMS之间进行数据迁移的工具。
sqoop1定位:功能结构简单、部署方便
sqoop2定位:功能完善、操作简单、支持命令行操作、WEB访问、提供可编程API,配置专门的Sqoopserver,安全性高
sqoop参数可以指定一般参数或Sqoop特定工具参数。可以为工具命令的某些属性设置自定义值。一般参数用于hadoop相关属性,参数前面用短横线-为标志。
sqoop特定工具参数用于设置与sqoop操作相关的属性,参数选项前面用双横线--为标志
命令格式:使用完整命令格式,还可以使用toolname的特定脚本文件名sqoop-(toolname)执行相同的操作
sqoop数据导入命令:sqoop import (generic-args) (import-args)
连接数据库操作:sqoop import –connect jdbc:mysql://database.mysql.nodel:3306/sqoopDB --username --password 123456
sqoop导入数据命令:
sqoop import –connect jdbc:mysql://database.mysql.node1:3306/sqoopDB --username bear -P --table employees --target-dir /user/sqoop
--target-dir 指定HDFS目录,最后一个子目录不能存在。
一、Hadoop集群安装配置的主要操作步骤
1.创建Hadoop用户;
2.Java环境安装
3.SSH登陆权限设置
4.Hadoop单机安装和伪分布式安装
二、Hbase表创建,添加数据、查询数据的操作命令
创建create
插入insert
查询select
三、Hadoop MapReduce编程模型主要哪由两个抽象类及功能
Reducer: reducer是唯一更新state的途径,通过触发dispatch更新state
Mapper: 动态的实现单表的增删改查功能,大大降低开发成本,减少工作量
四、pig的功能
用来处理离线用户数据,对用户行为进行预测
快速高效的处理巨大的数据
五、zookeepr中的角色,zookeeper的功能
Leader ,Follower ,Observer
功能:配置服务、同步服务、集群管理、节点选举。