Hadoop/Hive/zookeeper问题一解通-通过问答直指面试!

一、大数据名词详解

请详细说一下分布式和集群的区别:

分布式和集群都是帮助单体系统实现高并发、高可用以及高性能的手段;它们之间最大的区别就是部署架构的不同
(1)分布式就是把一个集中式的服务拆分成多个子系统,每个系统单独对外提供部分功能,多个分布式系统集合在一起对外提供一整套服务。举个例子:我们可以把一个电商网站拆分成:商品、订单、支付、购物车等模块,这些模块分别部署在不同的机器上,各各模块之间通过网络通信,以一个分布式系统整体对外提供一个电商服务
(2)集群就是将多台服务器集中在一起,部署有相同的应用或服务模块,构成了一个集群,集群往往通过负载均衡,来对外提供服务,当业务繁重,我们可以将一个节点布置成集群,这样能有效提法高系统的高并发、高性能、高可用

什么是负载均衡?

负载均衡是一种计算机网络技术,用来计算计算机集群、网络连接、CPU、磁盘或其他资源中的分配负载,以达到最佳化的资源使用、最大吞吐率、最小相应时间、同时避免过载。

分布式调度有几种架构模式

1、去中心化模式
大数据的基础框架都是遵循中心化模式
2、中心化模式

大数据的核心工作

①数据存储;②数据计算;③数据传输

简单介绍以下Hadoop

Hadoop是一个用Java语言实现存储、计算大规模数据的开源软件框架,目前属于Apache 旗下。
他的创始人为:Doug Cutting
广义上的来讲,Hadoop现在已经发展成一个集合,是一个大数据生态圈。
使用它来进行大数据开发优势有:①扩容能力;②成本滴;③高效率;④可靠性

二Hadoop框架概论

Hadoop框架的介绍?

Hadoop 3.x的核心组件
Hadoop 3.x版本的核心组件有三个,分别是:HDFS、Mapreduce、Yarn

Hadoop是大数据开发中一个主流的基础框架,Hadoop由三个专门为大数据处理而设计的组件组成:


HDFS:
为了充分利用数据,第一步是存储数据。Hadoop第一个组件是它的存储单元-Hadoop分布式文件系统,又称之为HDFS。
因此,数据分布在许多计算机中并以块的形式存储,每一个块默认容量大小是128MB

MapReduce:
成功存储完数据后,需要对数据进行处理,这就是Hadoop的第二个组件:MapReduce。传统的数据都是存储在单一的系统中进行处理,这样子费时又低效,MapReduce将数据分成多份在不同的节点分别处理每个部分,并且将各各结果进行汇总并输出

Yarn:
Yarn表示分布式资源调度,可以让Mapreduce能高效完成计算任务;在早期Hadoop 1.X ,Mapreduce同时有资源管理和计算的功能,但在Hadoop 2.x后,将Yarn 从 Mapreduce 中分离出来,成为一个独立的资源调度框架。


① HDFS 组件

HDFS是Hadoop分布式文件系统,是Hadoop核心组件之一,用于提供分布式存储服务 ,内部采用了master/slave架构。

基础架构:由一个NameNode管理多个DataNode,Seconday NameNode 用于辅助NameNode进行备份

(1) NameNode(主节点)

  • 负责管理HDFS整个文件系统
  • 负责管理DataNode

(2) DataNode(从节点)

  • 存储实际的数据块,并执行数据块的读写操作

(3) Secondary NameNode(辅助节点)

  • 每过一段时间,会对NameNode做元数据备份

HDFS将每个文件以128MB形式存储成一些列的block(数据块)且除了最后一个外,其他数据库都是128MB。
 
如果有一个数据节点崩溃了,会对数据产生影响吗?
HDFS在数据块的创建时,对数据进行拷贝并存储在多个系统中

在NameNode 主节点中:

  • edits:记录文件、块信息,有很多dits;
  • fsimage:会将很多edits合并为fsimage

SecondaryNameNode:元数据合并
SecondaryNameNode会通过http从NameNode拉取数据,然后合并完成后,定期提供NameNode使用。对于元数据的合并,是一个定时过程,只要达到下列要求仍一就可

  • 3600秒
  • 100w次事务

SecibdaryNameNode 与 NameNode 备份流程

② Mapreduce 组件

分布式计算,海量数据计算

③Yarn

都知道Hadoop 2.X 后单独分离出了Yarn模块,试问单独分离出Yarn带来的优势有什么优势

Hadoop1.x 架构主要的缺点是:

  1. 服务器集群资源调度管理和MapReduce执行过程耦合在一起;
  2. 如果想在的当前集群中运行其他计算任务,如spark、storm,则无法统一使用集群中的资源
     

分离了Yarn带来的优势:

  1. 解耦了Mapreduce 框架,使其专注于计算;
  2. 框架中分工更加明确、精确化
  3. 正因为分离了Yarn,后期打胜了一个个优秀专注计算引擎的大数据框架Spark、Flink等。
Yarn架构

在了解Yarn架构之前,先解释以下三个名词:

  1. 资源
    服务器硬件资源,如CPU、内存、硬盘、网络等
  2. 资源调度
    管控硬件资源,提升服务器的利用率
  3. 分布式资源调度
    管控整个分布式服务器集群的全部资源,并整合进行统一调度

Yarn架构是由四个模块组成,分别是:

  1. RescoreManager(资源管理器):用于接受用户的计算请求任务,并负责集群的资源分配
  2. NodeManager(节点管理器):单个服务器的资源调度这,负责调度单个服务器资源并提供给程序使用
  3. ApplicationMaster(任务管理器):单个任务运行的管理者;
  4. Client Application:客户端提交的应用程序。

ResourceManagerNodeManager 遵循主从模式(中心化模式)!在这里插入图片描述
 
述说执YARN提交MR的流程:

1、Client客户端向ResoureceManager提交任务
2、ResourceManage 接受到计算任务后,检查服务器的负载情况,根据资源为任务分配一个容器,并将AppLicationMaster分发到这个容器上,并启动。
3、ApplicationMaster 向ResourceManage进行一个注册,并为自己应用进程申请容器资源
4、ApplicationMaster申请到需要的容器后,立刻向相应的NodeManage进程通信,将用户Mapreduce程序分发到NodeManager进程所在的服务器,并在服务器中运行,运行的是Map或Reduce任务;
5、Map或Reduce任务运行时,和ApplicationMaster通信,汇报自己的运行状态
6、如果运行结束,ApplicationMaster向ResourceManager进程注销并释放所有容器资源,到这楼里MR程序已经执行完全。

在这里插入图片描述

Yarn三大调度器
  • (1)先进先出调度器: FIFO Scheduler
  • (2)公平调度器: Fair Scheduler
  • (3)容量调度器: Capacity Scheduler [默认调度器]

调度器在hadoop/etc/hadoop/yarn-site.xml文件下修改
分别讲述三个调度器的优点和缺点

  • 先进先出调度器:
  1. 优点:
    因为是队列分配资源时先会给【队头】的应用进行资源分配,他能保证整个任务队列下来,每一程序应用都能的到重组的资源;
  2. 缺点:
    但相对应的,如果任务大小不一,会导致跟在大大任务后的小任务无资源可用,长期处于等待状态
  • 公平调度器:
  1. 优点:
    公平调度器分配资源不会保留集群的资源,会动态的为所有正在运行的作业之间平衡资源。能够保证每一个任务都有资源可用,不会有大量任务再等待资源分配;
  2. 缺点:
    如果大任务非常多,每个任务获取的资源非常有限,导致执行时间特别长。
  • 容量调度器:
    在这里插入图片描述
  1. 优点:
    容量调度器会为每个组织分配专门的队列和一定的集群资源,可以保证多个任务可以使用一定的资源,提升资源的利用率
  2. 缺点:
    如果遇到非常大的任务,此任务不管运行在哪个队列,都无法使用到集群的所有资源,导致大任务效率低,任务繁忙时依旧会出现等待情况

HDFS的Shell命令

可以讲述以下你了解的HDFS的Shell命令吗

我们知道HDFS他有自己的web页面能够操作,但是也可以使用HDFS的Shell命令对HDFS文件系统进行操作。
其实Hadoop提供文件系统的Shell和普通的Shell命令类型,大部分的命令在前面套用前缀,例如 hdfs dfs -ls /查看HDFS根目录下的文件

hdfs dfs -<arg>

还有几个特有的HDFS的Shell(用于上传下载HDFS上的文件)

 

Hive概述

谈谈你认知的Hive,有什么有缺点嘛

Hive是一个数据仓储工具,对于我们分布式存储系统里的工具进行读、写、管理(使用SQL)Hive的本质就是将SQL转化为Mapreduce程序。
优点:

  1. 操作接口采用了类SQL语法,提供快速开发的能力,避免了直接写Mapreduce运算程序,减少开发人员的学习成本
  2. Hive支持用户自定义函数,功能拓展很方便

缺点:

1.Hive的执行延迟比较高,优势在于处理大数据,对小数据几乎没有优势,适合数据量大且实时性要求不高的场合

Hive的架构

Hive的体系结构可以分为以下几部分:

1、用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。

2、Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。Hive 元数据默认存储在 derby 数据库,不⽀持多客户端访问,所以将元数据存储在 MySQl,⽀持多客
户端访问。

3、解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

4、Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

Hive SQL转化为MapReduce的过程

词法、语法解析: Antlr 定义 SQL 的语法规则,完成 SQL 词法,语法解析,将 SQL 转化为抽象语法树 AST Tree

Antlr是一种语言识别的工具,可以用来构造领域语言。使用Antlr构造特定的语言只需要编写一个语法文件,定义词法和语法替换规则即可,Antlr完成了词法分析、语法分析、语义分析、中间代码生成的过程。

语义解析: 遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock;

生成逻辑执行计划: 遍历 QueryBlock,翻译为执行操作树 OperatorTree;

优化逻辑执行计划: 逻辑层优化器进行 OperatorTree 变换,合并 Operator,达到减少 MapReduce Job,减少数据传输及 shuffle 数据量;

生成物理执行计划: 遍历 OperatorTree,翻译为 MapReduce 任务;

优化物理执行计划: 物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划。

Hive 和 RDBMS区别

Hive叫做基于Hadoop之上可以兼容多种数据存储结构格式,以及支持多种计算引擎的OLAP工具
存储引擎不同:RDBMS存储有自己的存储引擎,且紧密相连;Hive和存储引擎是分离的
数据存储结构的不同

①语言的不同:Hive使用的为类SQL语言,RDBMS使用的是SQL语言
②存储引擎的不同:Hive使用HDFS作为存储引擎存储数据,RDBMS有自己内置的存储引擎。
③执行延迟:RDBMS执行延迟很高

OLTP与OLAP

OLTP(On-Line Transaction Processing)即联机事务处理,也称为面向交易的处理过程

OLAP(On-Line Analytical Processing)即联机分析处理,有时也称为决策支持系统(DSS),支持复杂的分析
操作,侧重决策支持,并且提供直观易懂的查询结果。,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一,比如ERP系统,CRM系统,互联网电商系统等,这类系统的特点是事务操作频繁,数据量小。

OLTP(Online transaction processing):在线/联机事务处理。典型的OLTP类操作都比较简单,主要是对数据库中的数据进行增删改查,操作主体一般是产品的用户。

OLAP(Online analytical processing):指联机分析处理。通过分析数据库中的数据来得出一些结论性的东西。比如给老总们看的报表,用于进行市场开拓的用户行为统计,不同维度的汇总分析结果等等。操作主体一般是运营、销售和市场等团队人员。

为了表示跟OLTP的数据库(database)在数据量和复杂度上的不同,一般称OLAP的操作对象为数据仓库(data warehouse),简称数仓。数据库仓库中的数据,往往来源于多个数据库,以及相应的业务日志。

① OLAP是面向分析查询, OLTP是面向事务的
② OLAP是面向主题的, OLTP是面向业务的
③ OLAP存储都是历史数据, OLTP存储为最新数据
④ OLAP存储的数据量主要是M G为主, OLTP存储以T P E为主
⑤ OLAP响应速度相对于OLTP会慢一些
⑥ OLAP一般是管理决策人员使用而OLTP一般是业务操作人员

内部表和外部表的区别?

首先,Hive默认创建表为内部表,外部表在创建的时候需要external。
在删除表时,外部表会保留数据,而内部表不会保留数据
元数据(存储在mysql里面【数据库】)、真实数据(存储在HDFS里面)

数据仓库和数据库和数据湖&(Database、Data Warehouse 、Data Lake)

先说前两个数据库和数据仓库吧
在数据量还没那么庞大之前,几台服务器和几个MySQL组成的系统可以实现业务。但是放到如今,业务的繁重,用户和数据量庞大,数据库以及不太能满足业务需求,在此刻诞生出数据仓库。
数据库和数据仓库的区别,也就是OLTP和OLAP的区别,数据库更适合实时OLTP,对数据的增删查改,侧重实时性;数据仓库适合OLAP,对数据的查询,侧重于大数据量的处理。

数据仓库的分层架构

ETL和ELT

谈到ETL和ELT,实则上就是三个部分(Extract、Transfrom、Load)提取、转换、加载

Hive的HQL语法

Hive 优化

使用分区裁剪、列裁剪

**思想:**查询时只读所需要的列,分区裁剪就是只读所需要的区,减少数据量存储
好比我们链接两张表再进行过滤与先过滤单张表再进行链接的效率差别很大
在这里插入图片描述

DISTINCT 和 GROUP BY

在这里插入图片描述

谓词下推

谓词下推:适用于需要对表连接字段进行where过滤时使用,能大大减少数据量、减少磁盘IO
先过滤、再连接!

数据倾斜的原因和解决方法

⾃定义 UDF、UDTF 函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值