------------------------------------------------------------------------------------
--hadoop 常见问题:
1.压缩的几种方式?怎么设置的?
default gzip bzip2 lz0 snappy
使用怎么设置?
map端设置 reduce端
即使MapReduce应用使用非压缩的数据来读取和写入,我们也可以受益于压缩map阶段的中间输出。因为map作业的输出会被写入磁盘并通过网络传输到reducer节点,所以若使用LZO之类的快速压缩,能得到更好的性能,因为传输的数据量大大减少了。
Configuration conf = new Configuration();
conf.setBoolean("mapred.compress.map.output", true);
conf.setClass("mapred.map.output.compression.codec",GzipCodec.class, CompressionCodec.class);
使用压缩有什么好处?
Reduce输出压缩包到hdfs
打开Reduce输出压缩设置
FileOutputFormat.setCompressOutput(job, true);
设置使用的压缩算法
FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
2.分布式缓存(加载字典)? 怎么设置(过时方法和不过时方法)?
3.hadoop 优化? 配置,参数,代码,数据(大量小文件合并大文件)
4.hadoop 什么是数据倾斜? 怎么解决?
某一个task运行时间非常长。拖累整个程序运行时间
5.hadoop1.0和hadoop2.0有什么区别?
6.yarn的工作流程?
7.什么是 mapreduce?
combiner 是什么?
partition
merge
8.job和task 的区别?
job
task:maptask 、reducetask
9.什么是shuffle?shuffle过程?
shuffle 的切片过程? 块 片 maptask之间的关系?
map端溢写 ?reduce端溢写?
setup?
cleanup?
10.map和reduce 端shuffle 分别发什么什么?
11.hadoop的调度器有几种?
FIFO(先进先出) 计算能力调度器 公平调度器
12.MapReduce 自带辅助类有哪些?
GenericOptionsParser ToolRunner Tool
13.MapReduce 数据类型有哪些?
14.分布式缓存 过时的写法是?现在的写法?
15.多文件输出类是? MultipleOutputs
16.Hadoop内置的输出文件格式有:
1)FileOutputFormat<K,V> 常用的父类;
2)TextOutputFormat<K,V> 默认输出字符串输出格式;
3)SequenceFileOutputFormat<K,V> 序列化文件输出;
4)MultipleOutputs<K,V> 可以把输出数据输送到不同的目录;
5) NullOutputFormat<K,V> 把输出输出到/dev/null中,即不输出任何数据,这个应用场景是在MR中进行了逻辑处理,同时输出文件已经在MR中进行了输出,而不需要在输出的情况;
6)LazyOutputFormat<K,V> 只有在调用write方法是才会产生文件,这样的话,如果没有调用write就不会产生空文件
17.MapReduce 分区使用的场景?
数据归类(分类)、数据清洗、数据分析前期处理
18.join有几种? 实现思想分别是什么?
mapjoin :分布式缓存
reducejoin:数据打标记
19.自定义数据类型实现那个接口? WritableComparable 或者 Writable
--Writable
write() 是把每个对象序列化到输出流。
readFields()是把输入流字节反序列化。
--WritableComparable
Java值对象的比较:重写 toString()、hashCode()、equals()方法
20.自定义分区实现那个接口? Partitioner
怎么设置?
21.自定义combiner继承那个类? Reducer
怎么设置?
22.什么是二次排序?
23.自定义分组比较器实现那个接口? RawComparator
使用 job.setGroupingComparatorClass(GroupingComparator.class)
24.多job之间的任务依赖,怎么设置?有一个job失败会怎么样?
25.说出 几个 mr 的优化?
从以下几个方便描述:
操作系统调优
Hdfs参数调优
MapReduce参数调优
系统优化
Shuffle阶段内部优化
-----
1.hadoop fs -ls / 和 hadoop fs -lsr / 有什么区别?
2.从用户hadoop1 发送到 hadoop2 使用什么命令? scp -r
3.搭集群的步骤
4.怎么删除文件?
hdfs 读写流程?
yarn的工作原理?
动态增删节点?
什么是HA?hadoop HA? 有什么作用
Secondnamenode 有什么作用?
hadoop 1.0 和hadoop 2.0 有什么区别?
namenode 宕机怎么处理?
datanode 宕机怎么处理?
动态增删节点
hadoop 配置文件优先级
https://baijiahao.baidu.com/s?id=1563467191454016&wfr=spider&for=pc
------------------------------------------------------------------------------
hive 常见问题:
1.hive 数据类型?
2.join的区别?
3.分区分桶?
分区目的?分区的实质?
单分区和多分区建表?
静态分区和动态分区的区别?
使用动态分区设置?混合分区设置?
分区注意:
分区就是在表目录下面创建一个目录,每一个分区都有自己的目录。
动态分区和静态分区一点细微区别:静态分区不管有没有结果集都将会创建目录,而动态分区必须要结果集大于0才会创建分区。
动态分区时,每一个分区都将会交由一个mr的job来处理,如果大规模的分区将容易导致namenode的挂机。
分桶。。?
分桶抽样 :TABLESAMPLE(BUCKET x OUT OF y) x和y 分别代表什么?
ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。
ETL是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。
4.库的本质?表的本质?
5.什么是hive?
6.hive四大器?
7.内置函数有哪些? substr concat concat_ws
自定义函数?
8.hive 和 mysql 的区别? hive是面向对象 mysql是面向过程
9.hive表类型?有什么区别? 源
10.hive添加数据? 几种方式?
创建表有几种方式?
11.hive和hadoop之间的关系?
12.hive分隔符? ^A
13.order by 、distribute by,sort by 、cluster by 有什么区别?
(1).sort by排序
会产生多个reducer,每个reducer中的数据是有序的(但是并不是全局有序)
可以通过设置set mapred.reduce.tasks=2 来设置sort by时生成的reducer的个数.
(2).排序 distribute by
hive中的distribute by是控制在map端如何拆分数据给reduce端的。
hive会根据distribute by后面列,根据reduce的个数进行数据分发,默认是采用hash算法。
对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。
select *
from paixu
distribute by class
sort by class asc,chinese asc;
(3).排序 cluster by
等价于sort by + distribute by(两个排序的列必须完全一致).
(4).排序 order by
order by后面可以有多列进行排序,默认按字典排序。
order by为全局排序。
order by需要reduce操作,且只有一个reduce
group by 、distinct区别?
count(id)、count(1) ,count(*)区别?
where 和 having 与group by结合使用的区别?
14.hive优化? 参数,配置,语句,数据
http://www.cnblogs.com/smartloli/p/4356660.html
数据倾斜 怎么解决?
15.into 和 overwrite 有什么区别?
16.复杂数据类型 建表 取值?
17.那些关键词可能会发生job
select [from where group by join order by] limit
18.什么是hive元数据?
hive元数据就是hive的一些基本的元素,主要包括hive表的基本属性,如下
(1)hive表的数据库名、表名、字段名称与类型、分区字段与类型
(2)表的分区,分区的属性location等
(3)serdeproperties, tblproperties等等 可以通过 desc formatted tablename 查看表有哪些属性
19.hive元数据默认保存在哪? deby数据库
20.删除数据库 使用关键字?强制删除使用?
21.修改表信息 使用关键字? alter
22.查看表结构使用关键字? 查看分区? show 的用法
23.Hql语法和数据库表的名字都不区分大小写 Mysql中的表名区分大小写
24.hive中的map join:
select /*+MAPJOIN(c1)*/ * from s;
25.hive索引具有以下特点:
1.索引key冗余存储,提供基于key的数据视图
2.存储设计以优化查询&检索性能
3.对于某些查询减少IO,从而提高性能。
创建索引:
create index index_test(id INT, name STRING)
partitioned by (dt STRING)
row format delimited fields terminated by ',';
重建索引:
ALTER INDEX index_name ON table_name [PARTITION (...)] REBUILD
删除索引:
DROP INDEX index_name ON table_name
显示索引:
show index on index_test;
26.内置函数 说出5个以上
27.udf udaf udtf
怎么来写一个udf?
28.创建表有几种方法? create as like
存储类型? textfile sequencefile rcfile
---------------------------------------------------------------------
1.hive的默认函数
2.while循环
3.udf函数的例子
日志切割 日期转化 字符串拼接 根据key找到value
4.hive的默认分隔符 :/001
5.
-S :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
-i 初始运行sql文件
-e 'quoted query string': 运行引号内sql查询语句 Sql from command line
-f <filename>: 从文件中运行sql语句 Sql from file
hive –h 可以查看应用的帮助文档.
6.多job之间的任务依赖,怎么设置?有一个job失败会怎么样?
jobContral 有一个job失败则任务都失败
//conTop 要依赖 conWord 第二个依赖第一个
conTop.addDependingJob(conWord);
//定义多个job的执行流程
JobControl jc = new JobControl("conWord and conTop jobs ");
jc.addJob(conWord);
jc.addJob(conTop);
7.order by 、distribuite by 、cluster by、 sort by 有什么区别?
(1).sort by排序 每个reducer中的数据排序
会产生多个reducer,每个reducer中的数据是有序的(但是并不是全局有序)
可以通过设置set mapred.reduce.tasks=2 来设置sort by时生成的reducer的个数.
(2).排序 distribute by map端到reduce端的数据
hive中的distribute by是控制在map端如何拆分数据给reduce端的。
hive会根据distribute by后面列,根据reduce的个数进行数据分发,默认是采用hash算法。对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。
select * from paixu distribute by class sort by class asc,chinese asc;
(3).排序 cluster by
等价于sort by + distribute by(两个排序的列必须完全一致).
(4).排序 order by
order by后面可以有多列进行排序,默认按字典排序。
order by为全局排序。
order by需要reduce操作,且只有一个reduce
group by 、distinct区别?
distinct消除重复行。 group by是分组语句,代替distinct去重
设定 hive.groupby.skewindata=true
8.SerDe
是Serialize/Deserilize的简称,目的是用于序列化和反序列化。
创建SerdeTest类,实现Deserializer接口,
在initialize()方法中,描述表的各个字段及其类型
在deserialize(Writable text)方法中将text解析成id和name
getObjectInspector()方法返回
9.udaf
函数类需要继承UDAF类,内部类Evaluator实UDAFEvaluator接口。
Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数。
a)init函数实现接口UDAFEvaluator的init函数。
b)iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean。
c)terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据,terminatePartial类似于hadoop的Combiner。
d)merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean。
e)terminate返回最终的聚集函数结果。
10.抽样查询
比例 随机 数据块 指定
11.hive中参数分为三类,第一种system环境变量信息,是系统环境变量信息;第二种是env环境变量信息,是当前用户环境变量信息;第三种是hive参数变量信息,是由hive-site.xml文件定义的以及当前hive会话定义的环境变量信息。其中第三种hive参数变量信息中又由hadoop hdfs参数(直接是hadoop的)、mapreduce参数、metastore元数据存储参数、metastore连接参数以及hive运行参数构成。
12.textfile sequencefile rcfile面向行和列 rcafile
sequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、
可压缩的特点。
SequenceFile支持三种类型压缩选择:NONE,RECORD,BLOCK。
Record压缩率低,一般建议使用BLOCK压缩。
13.clustered by (id) into 4 buckets 里面也要写
14.partitioned by(sex string) 外面
15.select sc.cno,count(sc.cno) as count
from 1612a.my_score as sc,1612a.my_student as stu
where sc.sno = stu.sno
group by sc.cno;
1 15
2 15
3 13
4 16
5 12
6 11
16.
1 使用Linux 命令
Hive> !pwd; #前面加上一个!后面加上;
2 使用Hadoop shell
hive>fs -ls / #省去前面的hadoop 后面加上;
3 hive -e 可以执行多条Hql ,中间使用;隔开
hive -S 采用静默的方式执行Hql 结果集不会打印到控制台上,而是会输出到标准输出当中,可以使用 | 将结果集重定向到指定的文件当中。
hive -f 可以执行一个写了多条hql 的可执行文件。
17.解释器:将类SQL的HQL语句解析
编译器:将HQL语句编译为JOB
优化器:优化JOB
执行器:调用Hadoop执行JOB
18.hive的运行模式
严格模式 非严格模式
严格模式
启动命令 :nohup hive --service hiveserver2 --hiveconf hive.mapred.mode=strict &
通过设置hive.mapred.mode的值为strict,可以禁止3中类型的查询。
带有分区的表的查询 :
带有orderby的查询 :增加limit语句
限制笛卡尔积的查询 :
如果表足够大,那么这个查询就会
出现不可控的情况:
hive> SELECT * FROM fracture_act JOIN fracture_ads
> WHERE fracture_act.planner_id = fracture_ads.planner_id;
FAILED: Error in semantic analysis: In strict mode, cartesian product
is not allowed. If you really want to perform the operation,
+set hive.mapred.mode=nonstrict+
下面这个才是正确的使用join和on语句的查询:
hive> SELECT * FROM fracture_act JOIN fracture_ads ON (fracture_act.planner_id = fracture_ads.planner_id);
... normal results ...
19.用户自定义聚合函数: Sum, Average…… n – 1
20. Hive 将元数据存储在 RDBMS 中,有三种模式可以连接到数据库,其中1、2均属于本地存储,3属于远端存储,对于使用外部数据库存储元数据的情况
-----------------------
1.Hive内部表和外部表的区别?
答:
1) 在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,
也就是说外部表中的数据并不是由它自己来管理的!而内部表则不一样;
2) 在删除内部表的时候,Hive将会把属于内部表的元数据和数据全部删掉;
而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
外部表数据可以共享,内部表不可以。
2.hive有哪些方式保存元数据?
答:derby,关系型数据库(mysql、pig)
6.hive创建数据库的本质?
hdfs上hive的目录下新建一个名为 数据库名.db的文件夹;注意:默认的default库没有名字,就在根目录下。
10.hive如何调优
答:解决收据倾斜问题,减少job数量,设置合理的map和reduce个数,对小文件进行合并,优化时把握整体,单个task最优不如整体最优。
按照一定规则分区。
11.Hive中的数据倾斜指的是什么?
数据倾斜是指,map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,
这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,
从而导致某几个节点迟迟运行不完。
12.写清所学内容分析业务从flume到hbase的流程(flume,hdfs,mapreduce,hive,sqoop,hbase)
答:
flume收集数据,保存到hdfs,通过mapreduce清洗出良好数据,然后将数据导入到hive中,再通过sqoop导入到hbase中
13.Hive有哪四个驱动器27 15
答:
解释器、编译器 、优化器 、执行器
14.Hive的最大优点是?
答:
可以将SQL翻译成MapReduce去Hadoop上执行,这样就使得数据开发和分析人员很方便的使用Hive来完成海量数据的统计和分析,
而不必使用编程语言开发。
15.Hive的优化(最少说出三点)
答:1)用ON能够优化mapreduce
2)表大小的顺序为从左到右依次增大
3)在语句中增加分区的过滤条件
4)解决数据倾斜问题
5)减少job数量
6)设置合理的map reduce的task数
7)对小文件进行合并,是行至有效的提高调度效率的方法。
8)优化时把握整体,单个作业最优不如整体最优。
18 hive中何种情况只有一个reduce
在进行order by 排序的时候只有一个reduce
19 如何实现动态分区
set hive.exec.dynamic.partition.mode = nonstrict;
insert overwrite table page_view4 partition(hours)
select *, substr(track_time,12,2)from page_view ;
20 请简述下 semi join 的使用场景
semi join 也叫左半开连接,是把两个表进行连接,但只把左边表的部分打印出来的连接,
就是相当于把右表当成一个值的查询。
21 你如何理解分桶?
分桶即是按照某一字段进行划分的方法,可以设置桶的个数,当需要查找某一数据时,它会按照划分的字段值进行桶的直接
定位,可以快速查找数据。而且,分桶便于进行数据的抽样。
22 你和如何理解分区
当表中的数据不断增大的时候,数据的查询效率就会越来越慢,因为没查询一次数据都要进行全表扫描,浪费了大量的时间,
但是当加入了分区之后,同样还是一张表,当要查询某一数据时,直接到这一数据特定的区去查询可以大大的高效率。
23 hive加载数据的方式
insert into page_view select ......;
load 一个文件
24 hive有哪些存储格式 哪种最优 如何存储?
SequenceFile