大数据阶段二(Hive,HBase,Flume,Kafka,Azkaban)面试题库

一、简述hive及其优点?

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

二、Hive的特点

  1. 可扩展:Hive可以自由的扩展集群的规模,一般情况下不需要重启服务;
  2. 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数;
  3. 容错性:良好的容错性,节点出现问题SQL仍可完成执行。

三、Hive中的数据倾斜指的是什么?

数据倾斜是指,map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完。

四、什么是分捅?分桶的好处

分桶:分桶是将数据集分解成更容易管理的若干部分的一种技术 可以将表或分区 更细粒度话的存储的一种方式。

好处:

  • 获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。
    总体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。
  • 使取样(sampling)更高效。
    在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

五、Hive内部表和外部表的区别?

在创建外部表的时候要加个关键字:external;

内部表 : 当在hive中使用命令删除hive表时,hive所对应的hdfs的目录会被删除 元数据库中的数据也被删除;

外部表 : 在hive中删除了外部表,而外部表所对应的hdfs目录不会被删除,元数据库被删除。

六、Hive和HBase有什么区别?

Hive的定位是数据仓库,虽然也有增删改查,但其删改查对应的是整张表而不是单行数据,查询的延迟较高。其本质是更加方便的使用mr的威力来进行离线分析的一个数据分析工具。

HBase的定位是hadoop的数据库,是一个典型的Nosql,所以HBase是用来在大量数据中进行低延迟的随机查询的。

七、Hive常用的文件格式有哪些?

Avro,ORC,Parquet,textfile,json等。

八、Hive将a表的数据全部挪到b表里面有几种方法?

create tables as select语句

create tables like insert into select语句

九、请解释一下hive中的分区?

Hive内部管理海量数据的处理方式;

一个分区是一个目录,多个分区是由多个父子目录;

分区的信息只能通过hive的sql语句创建;

分区使用的时候当成一列来使用(查询)。

十、什么是beeline?

让开发人员可以用java程序连接hive(jdbc);

先启动服务器端

nohup bin/hiveserver2 &

再启动客户端

bin/beeline

连接客户端(jdbc的url)

# 没有跟上数据库,一定要切换数据库(use 数据库的名字);默认十default
!connect jdbc:hive2://node7-4:10000 root 123456
!connect jdbc:hive2://node7-4:10000/mydata root 123456

十一、请创建一张复杂的表(包含基本类型的属性,集合,map,存储为文本文件)

create table psn_1 
(
id int , 
name string,
age smallint,
scroe double,
-- 地址;容器,泛型
address array<string>,
-- map爱好;容器,泛型
hobby map<string,string>,
createTime string
)
-- 记录行的分隔符
row format delimited
-- 列的分隔符
fields terminated by ',' 
-- 数组的拆分
collection items terminated by '-'
-- map
map keys terminated by ':'
-- 存储文件的格式;textfile是默认的,写与不写都是一样的
stored as textfile;

十二、如何解决hbase的数据热点问题?

rowkey散列

由于数据是被按照rowkey的字典顺序存储的,若rowkey顺序性较强,会减弱hbase分布式存储的特点,千万数据热点,在高并发数据读写时,会千万部分region过载,严重时会千万节点失陪,影响其它数据的访问(其中的一个小弟忙的要死,另外一个闲的要死)

散列的方案

Hash:可以让数据均衡分配,可重构,可以使用get等方式快速访问数据;

加随机数:数据均衡分配,不可重构,失去get快速定位数据等能力;

反转:普通使用的三列方法,尤其是对于时间序列,手机号类似的rowkey。

十三、Hbase都包含哪几部分?

Rowkey:键

列族,列:值

时间戳:版本

按照rowkey字典(ASCII)顺序存储,基于rowkey的高效检索,同时继承hdfs的吞吐能力。

十四、请画出HBase的架构图

在这里插入图片描述

十五、HBase内部机制是什么?

Hbase是一个能适应联机业务的数据库系统。

物理存储:hbase的持久化数据是存放在hdfs上。

存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上, Region内部还可以划分为store,store内部有memstore和storefile。

版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并Region的split。
集群管理:zookeeper + hmaster(职责) + hregionserver(职责)

十六、hregionserver 挂掉之后怎么处理?

当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

十七、什么是大合并,小合并?

小合并:把多个hfile合并生成一个大hfile,然后新hfile标记为权威数据,删除老hfile,设计出发点是轻微影响hbase的性能。

大合并:同时处理一个列族的全部hfile,将处理给定region的一个列族的所有hfile,合并为一个文件,大合并是唯一直接删除数据的机会。

十八、描述Hbase中scan和get的功能以及实现的异同?

HBase的查询实现只提供两种方式:

  1. 按指定RowKey 获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get)Get 的方法处理分两种:设置了ClosestRowBefore和没有设置的rowlock,主要是用来保证行的事务性,即每个get 是以一个row 来标记的,一个row中可以有很多family 和column。
  2. 按指定的条件获取一批记录,scan方法(org.apache.Hadoop.hbase.client.Scan)实现条件查询功能使用的就是scan 方式。
    • scan 可以通过setCaching与setBatch方法提高速度(以空间换时间);
    • scan 可以通过setStartRow与setEndRow来限定范围([start,end)start 是闭区间,end 是开区间)。范围越小,性能越高。
    • scan 可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础。

十九、Kafka消息的分发策略?

  1. kafka集群中的任何一个broker都可以向producer提供metadata信息,这些metadata中包含“集群中存活的servers列表”/“partitions leader列表”等信息;

  2. 当producer获取到metadata信息之后,producer将会和Topic下所有partition leader保持socket连接;

  3. 消息由producer直接通过socket发送到broker,中间不会经过任何“路由层”,事实上,消息被路由到哪个partition上由producer客户端决定;

    比如可以采用“random”“key-hash”“轮询”等,如果一个topic中有多个partitions,那么在producer端实现“消息均衡分发”是必要的。

  4. 在producer端的配置文件中,开发者可以指定partition路由的方式。

二十、kafka的核心组件?

Topic:消息根据topic进行归类
Producer:消息发送者
Consumer:消息接收者
Broker:每个kafka实例(server)
Zookeeper:依赖集群保存meta信息
Groupconsumer:消费组的概念

二十一、Producer消息发送的应答机制?

设置ACK
0:producer不会等待broker发送ack
1:当leader接收到消息之后发送ack
-1:当所有的follower都同步消息成功后发送ack
All:request.required.acks=0

二十二、kafka的消费者如何消费数据?

每次消费数据,消费者都会记录自己offsets的偏移量,并且会注册到zookeeper里,同时zookeeper记住了每一个消费者消费的分区,zookeeper会监听,一旦挂掉就会通过负载均衡。

二十三、消费组CG 有什么作用?

数据消费者组,consumergrop可以有多个,每个consumergrop消费的数据都是一样的,可以把多个consumer线程划分为一个组,组里面所有成员共同消费一个topic的数据,组员之间不能重复消费。

作用:提高消息并发能力,消费的容错性。

二十四、CG 中的consumer 个数和topic下partitioner 的个数有关系?

一个group的数据最好和partition对应,一个partition对应一个group中的消费成员。

二十五、Consumer与topic关系?

  1. 每个group中可以有多个consumer,每个consumer属于一个consumer group。
  2. 对于Topic中的一条特定的消息,只会被订阅此Topic的每个group中的其中一个consumer消费,此消息不会发送给一个group的多个consumer。
  3. 在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻)。
  4. kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。
  5. kafka只能保证一个partition中的消息被某个consumer消费时是顺序的;事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的。

二十六、Flume常用的三个组件是什么,并画出来

在这里插入图片描述

二十七、什么是Azkaban?

Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

二十八、代码测试

有三张表,学生表(student),学生课程表(course),学生分数表(score),请设计三张表的结构,并实现以下要求:

(1)统计每个学生各科目平均分,要求显示学生姓名,平均分值,并筛选出平均分大于60的学生,显示顺序按照平均分降序排序。

(2)写出以上功能的sql语句。

create table Student(id int(10),name varchar(14));
create table Course(id int(10),cid varchar(8),cname varchar(14));
create table Score(cid varchar(8),degree int(10));

select result.name as name,avg(result.degree) as avg_degree 
from (
(select r.name as name,r.degree as degree 
from (
select s.name as name,c.cid as cid 
from
Student as s join Course as c on s.id=c.id) as a
join Score as sc on a.cid=sc.cid) as r) as result 
where avg_degree>60 
order by avg_degree desc;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值