1. Hive 的架构设计与运行流程,及其各模块的主要作用?

Hive 经典题 - 图1

2.

Hive 的数据模型组成,及各组成模块的应用场景?

Hive 经典题 - 图2

表—-分区 根据不同分区以文件夹形式存储在hdfs上,多条数据有相同字段值的情况,比如所属分类。

表—-分桶 分桶表是以多个数据文件的形式存储在表数据目录下。数据字段没有重复的情况

表—-分区、分桶 意义在于快速查询。

3. Hive 支持的文件格式和压缩格式,及其各自的特点?

可切割运算

txt方便查看,但无压缩占空间大,传输压力大、

sequence、 kv存储,支持行行和块压缩,查看不方便。

rcfile、加载、查询、空间利用方面都很好,但每方面都不是最高。

orcfile —rcfile文件的升级。加载、查询、空间利用方面都很好,但每方面都不是最高。

loz、可切分 文件越大,优势越明显

bzip、可切分 原生支持 适用于高压缩率

gzip、不可切分 原生支持

snappy 不可切分 map reduce 或是job数据流中间格式

4. Hive 内外表的区分方法,及内外表的差异点?

外部导入的表为外表,元数据被hive管理,数据本身存储在hdfs。删除时只删除元数据,数据本身不被删除。

hive自生成的表为内表,元数据和数据本身都被hive管理。删除时元数据和数据本身都被删除。

5. Hive 视图如何创建,视图有什么特点,及其应用场景?

create view view_name select id,username from student;

视图是一张虚表。本身不存储数据,只存储数据关系,使用时再通过关系查找数据。

hive中查询变得很长时,可以通过视图分割查询语句。

可通过视图限制基于条件过滤

6、Hive 常用的 12 个命令,及其作用?

hive

show databases;

use databases_name;

show tables;

desc table_name;

show create table table_name;

create table student(id,int usernam,string);

load data inpath ‘$path_hdfs’ overwrite into table ‘$table’

select * from table limit 10;

insert into table_name(id,username) values(1,xuyunfeng);

insert overwrite table student select id,username from people where username=’xuyunfeng’;

drop table student;

7、Hive 常用的 10 个系统函数,及其作用?

desc function split;

show functions;

count

if

case…when..

coalesce(null,null,2)

split

explode

lateral view

size

year

month

trim

length

8、请详细描述将一个有结构的文本文件 student.txt 导入到一个 Hive 表当中的步骤,及 其关键字?

rz -bye 将文件加载到linux上

hdfs dfs -put -f student.txt /user/xuyunfeng/ 将文件上传到hdfs

load data path ‘/user/xuyunfeng/student.txt’ overwrite into table table_name 将hdfs的文件数据导入到表中

9、请简述 udf/udaf/udtf 是什么,各自解决的问题,及典型代表应用场景。

是自定义函数。

udf 1:1 输入一条,输出一条。 split、substring

udaf n:1 输入n条,输出1条 count、max、min

udtf 1:n 输入1条,输出n条 应用较少,一般用udaf+lateral view explode代替

10、udaf 的实现步骤,及其包含的主要方法,及每个方法要解决的问题,并写代码自实 现聚合函数 max 函数?

实现步骤: 自定义一个java类,继承udaf类。内部定义一个静态类,实现UDAFEvaluator接口。

实现init,iterate,terminatePartial,merge,terminate 共5个方法。

init—-初始化Map相关变量

iterate—-迭代处理同一组排好序的记录

terminatePartial—-做map端数据的汇总

merge—-逐条处理reduce端 terminatePartial端返回的数据

terminate—-对merge完成后的结果做最后的业务处理

xxx

iterate和merge返回值为boolean terminatePartial与terminate返回值为int

11、 hive 设置参数的方法有哪些?并列举 8 个常用的参数设置?

hive -e

12、HIVE 数据倾斜的可能原因有哪些?主要解决方法有哪些?

假倾斜

数据格式不对。 —更改数据格式

sql语句编写不合理 —优化代码

真倾斜

如vip会员数据倒卖问题。 分而治之。将倾斜与正常的数据分类,然后分别计算。

硬件机器本身配置不均衡。 —将机器配置均衡。

13、数据仓库之数据架构设计图,及每个模块的主要作用?

Hive 经典题 - 图3

源数据落地区—-放众多各种源数据。

源数据层——放生产系统的原始数据,主要满足未来大量不可预知需求。

细节数据层——按主题进行组织、保留历史、数据粒度与生产系统一致。

汇总数据层—-为预见的多个应用提供数据。

数据集市层——为外部提供具体的功能

14、利用 HiveSQL 语句,创建如下两张表: 创建员工基本信息表(EmployeeInfo),字段包括(员工 ID,员工姓名,员工身份证号, 性别,年龄,所属部门,岗位,入职公司时间,离职公司时间),分区字段为入职公司时间, 其行分隔符为”\n “,字段分隔符为”\t “。其中所属部门包括行政部、财务部、研发部、 教学部,其对应岗位包括行政经理、行政专员、财务经理、财务专员、研发工程师、测试 工程师、实施工程师、讲师、助教、班主任等,时间类型值如:2018-05-10 11:00:00

创建员工收入表(IncomeInfo),字段包括(员工 ID,员工姓名,收入金额,收入所属 月份,收入类型,收入薪水的时间),分区字段为发放薪水的时间,其中收入类型包括薪资、 奖金、公司福利、罚款四种情况 ; 时间类型值如:2018-05-10 11:00:00。

15、用 HQL 实现,求公司每年的员工费用总支出各是多少,并按年份降序排列?

select subString(in_month,1,4) as yeard,sum(incomein)

from incomeinfo group by(subString(in_month,1,4))

order by yeard desc;

—小结 order by,group by,partition by用法时机,sum不一定非要和over连用

既求明细,又求汇总用分析函数,如果不是,用一般sql即可。 subString(字段,1,4)

16、用 HQL 实现,求各部门每年的员工费用总支出各是多少,并按年份降序,按部门的 支出升序排列?

关联两个表 select ebase.id,ebase.username em_department,incomein,subString(in_month,1,4) from employeeinfo as ebase inner join incomeinfo as ecome on ebase.id=ecome.id;

  1. 按部门求每年员工支出总费用
  2. select em_department,yeard,sum(incomein) as total from (

select ebase.id,em_department,incomein,subString(in_month,1,4) as yeard

from employeeinfo as ebase inner join incomeinfo as ecome on ebase.id=ecome.id

) base group by em_department,yeard;

  1. 按年份降序 同时 按部门升序
  2. select em_department,yeard,sum(incomein) as total from (select ebase.id,em_department,incomein,subString(in_month,1,4) as yeard from employeeinfo as ebase inner join incomeinfo as ecome on ebase.id=ecome.id

) base group by em_department,yeard order by yeard desc,total asc;

小结:——注意语句前面的tab —-各部门每年 —group department,yeard

没有明细,只有汇总,常规sql就可搞定

按年份降序,按部门支出升序 order by yeard desc,total asc

17、用 HQL 实现,求各部门历史所有员工费用总支出各是多少,按总支出多少排名降序, 遇到值相等情况,不留空位。

dense_rank —如果字段是字符串,位数不同时,结果跟预期可能不相符

select *,dense_rank() over(order by total desc) as TopN from (select em_department,yeard,sum(incomein) as total from (

select ebase.id,em_department,incomein,subString(in_month,1,4) as yeard

from employeeinfo as ebase inner join incomeinfo as ecome on ebase.id=ecome.id

) base group by em_department,yeard) as test;

  1. select ebase.id,ebase.username,em_department,incomein,in_month,dense_rank() over(order by incomein desc)as topN from employeeinfo as ebase inner join incomeinfo as ecome on ebase.id=ecome.id;

18、用 HQL 实现,创建并生成员工薪资收入动态变化表,即员工 ID,员工姓名,员 工本月薪资,本月薪资发放时间,员工上月薪资,上月薪资发放时间。分区字段为本 月薪资发放时间。

题目分析:

1) 创建一个与上述字段匹配的新表-income_dynamic

2) 注意用数据分析函数来为该表填充数据

考点分析:

1)对Lag,Lead函数的使用

考官意图:

1) 对数据分析函数复杂使用的考查

答题技巧:

Hive 经典题 - 图4

19、用 HQL 实现,薪资涨幅方面,2018 年 5 月份谁的工资涨的最多,谁的涨幅最大

考点: 常规SQL、数据分析函数当中的dense_rank,lag(字段,往上翻,默认值)

题目分析:

1) 求谁涨的绝对值金额最多

2) 求谁涨的幅度百分度最大

考点分析:

1)rank/dense_rank/row_number的使用上

考官意图:

1)对数据分析函数的综合运用考查

答题技巧:

Hive 经典题 - 图5

git—-10个命令,版本控制

查看所有操作记录 git reflog

版本回退, git reset —hard HEAD^ git reset —hard HEAD@{1} 回退到指定版本

撤销修改 应用场景

1、工作空间已修改 2、已提交到缓存区 3、工作空间已修改,已提交缓存区,已添加到版本库

4、rm -rf误删除某文件的还原 5、git rm误删git文件的还原,并没有commit提交

10命令 —

1、git init 2、git add 3、git commit -m 4、git push 5、git pull

6、git diff 7、git reflog 8、git reset 9、git branch branchName 10、git checkout branchName

11、git checkout -b branchname 12、git branch -d 13、git branch -D

4个项目

7、导出结果 —-导出到hive上, hive上再导本地上,本地sz下载到。INSERT OVERWRITE DIRECTORY ‘/user/xuyunfeng/tags_rank.txt’ SELECT * FROM appResult;

通过java web实现 数据抽取,存入到hdfs表中

数据分析

(基础分析题)各频道评论量排行,求top5————查频道,关联查出需要字段,group by,dense_rank与order by,where条件过滤

(综合分析题)各频道活跃度排行 关联表,关联查询出所有候选因子,基于计算口径和公式进行加权求和,对求和结果排名,输出 select remark, (content_count1.0 + user_count1.1 + reposts_count2+comment_count1.5) as score from (

(综合分析题)各频道的博主的行为特征分析之每天的活跃时间段分析

Hive 经典题 - 图6

四 微博舆情

微博舆情—流程化。shell脚本,黑白名单过滤。将数据装载到mysql上。

批量解压 ls | xargs -n 1 | unzip -o -d ../tag_cvs_dir

分析