Hadoop(二)答辩问题+答案





------------------------------------------------------------------------------------
--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









  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些常见的 Hadoop 面试问题及其答案: 1. 什么是 HadoopHadoop 是一个开源的分布式计算框架,用于存储和处理大规模数据集。它可以在普通的硬件设备上实现分布式存储和计算,通过 MapReduce 算法分布式处理数据。 2. Hadoop 的主要构件是什么? Hadoop 的主要构件包括 HDFS、MapReduce、YARN 和 Hadoop Common。 - HDFS 是一个分布式文件系统,用于存储大规模数据集。 - MapReduce 是一种编程模型,用于处理大规模数据集。 - YARN 是一个资源管理器,用于管理集群资源和任务的调度。 - Hadoop Common 包含 Hadoop 的核心功能和工具,提供必要的库和文件。 3. Hadoop 的优点是什么? Hadoop 的优点包括: - 可以处理大规模数据集。 - 可以在普通的硬件设备上实现分布式存储和计算。 - Hadoop 的可扩展性非常好,可以随着数据集的增长而增长。 - Hadoop 是开源的,不需要支付额外的许可费用。 - Hadoop 生态系统非常丰富,有许多工具和应用程序可用于处理和分析数据。 4. Hadoop 中的 MapReduce 是什么? MapReduce 是一种编程模型,用于处理大规模数据集。它包括两个阶段: - Map 阶段:将输入数据划分为小块,并对每个块执行一个映射函数,将数据转换为键值对。 - Reduce 阶段:将映射函数的输出作为输入,执行一个 reduce 函数,将键值对合并为单个结果。 MapReduce 可以有效地处理大规模数据集,并且可以在分布式集群上并行运行。 5. Hadoop 的核心组件 HDFS 是什么? HDFS 是一个分布式文件系统,用于存储大规模数据集。它将数据划分为块,并将这些块存储在多个节点上,以实现分布式存储。HDFS 可以自动进行备份和恢复,并且可以在节点故障时保持数据的可靠性。 6. Hadoop 中的 YARN 是什么? YARN 是一个资源管理器,用于管理集群资源和任务的调度。它允许多个应用程序在同一集群上共享资源,并动态分配资源以满足应用程序的需求。YARN 还支持多种编程模型,包括 MapReduce、Spark 和 Flink。 7. Hadoop 中的数据压缩是什么? Hadoop 中的数据压缩可以减少存储和网络传输的数据量,从而提高性能。Hadoop 支持多种数据压缩格式,包括 Gzip、Snappy 和 Lzo。 8. Hadoop 中的序列化是什么? Hadoop 中的序列化是将数据结构转换为字节流的过程。这是因为在 Hadoop 中,数据通常以字节流的形式进行处理和传输。Hadoop 支持多种序列化格式,包括 Avro、Thrift 和 Protocol Buffers。 9. Hadoop 中的 ZooKeeper 是什么? ZooKeeper 是一个分布式协调服务,用于管理集群中的配置信息、命名服务和分布式锁等。它可以确保分布式应用程序的协调和一致性。 10. Hadoop 中的 Hive 是什么? Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化数据映射到 Hadoop 的 HDFS 上,并提供 SQL 接口进行查询和分析。Hive 支持基于 MapReduce 的查询和 Tez 查询引擎,并可以与其他工具如 Pig 和 Spark 集成使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值