持续分享有用、有价值、精选的优质大数据面试题
致力于打造全网最全的大数据面试专题题库
116、怎么解决MapReduce的数据倾斜?
参考答案:
现象:Mapreduce程序在运行的时候,运行了大部分,但是还有部分reduce还在运行,甚至长时间运行,最终导致整个程序运行时间很长才结束。 产生原因:reduce程序处理的key的条数比其他key的条数大很多,这也就造成了分配到数据巨大的key的节点长时间运行。本质讲数据倾斜就是数据分布不均。 解决办法:
1)增加reduce 的jvm内存
2)增加reduce 个数
3)自定义partition
4)设定combiner
5)如果数据倾斜很大的话,将那部分倾斜的数据可以单独过滤出来做计算 或者自定义分区分散倾斜的数据
6)针对个别key或者少量key数据量特别大的,可以对该key进行改造,生成多个新的key分别处理,然后再进行聚合处理(分而治之)
117、什么是Hadoop分布式缓存?
参考答案:
1)Hadoop分布式缓存是Map-Reduce框架提供的用于缓存应用程序所需文件(文本文件、存档文件、Jar文件等)的工具。
2)当 MapReduce 处理大型数据集间的 join 操作时,此时如果一个数据集很大而另外一个集合很小,以至于可以分发到集群中的每个节点之中。 这种情况下,我们就用到了 Hadoop 的分布式缓存机制,它能够在任务运行过程中及时地将文件和存档复制到任务节点以供使用。为了节约网络宽带,在每一个作业中,各个文件通常只需要复制到一个节点一次。
118、怎样对大数据集群进行有效监控?如何实现预警、报警?
参考答案:
1、可以有很多方式对大数据集群进行监控
(1)可以使用Ambari或者CM进行监控。
(2)也可以购买第三方服务来进行监控,如腾讯的蓝鲸。
2.如何实现预警、告警
如果使用Ambari或者CM,可以使用alert来实现。
119、Hadoop 特性优点?
参考答案:
1)扩容能力
2)成本低
3)高效率
4)可靠性
120、Hadoop的核心组件是哪些?
参考答案:
1)HDFS
2)MapReduce
3)Yarn
121、Hadoop目前有几个版本?
参考答案:
目前hadoop有1.x、2.x、3.x。三个版本。
122、设置主机名在哪一个文件中?
参考答案:
/etc/sysconfig/network文件中。
123、配置IP、主机名映射的文件是哪一个?
参考答案:
/etc/hosts文件。
124、安装hadoop3.x时需要配置的文件有哪些?
参考答案:
1)hadoop-env.sh
2)core-site.xml
3)hdfs-site.xml
4)mapred-site.xml
5)yarn-site.xml
6)workers
125、hadoop3.x启动jobHistoryserver服务进程的命令?
参考答案:
bin/mapred --daemon start historyserver 启动
bin/mapred --daemon stop historyserver 关闭
126、Hadoop如何快速杀死一个job?
参考答案:
1、执行 hadoop job -list 拿到 job-id
2、hadoop job -kill job-id
127、Hive中的UDF函数有哪几种?你写过哪些?
参考答案:
1、Hive中有三种UDF:(普通)UDF、用户定义聚集函数(user-defined aggregate function,UDAF)、用户定义表生成函数(user-defined table-generating function,UDTF)。
(1)UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。
(2)UDAF 接受多个输入数据行,并产生一个输出数据行。想COUNT和MAX这样的函数就是聚集函数。
(3)UDTF 操作作用于单个数据行,并且产生多个数据行-------一个表作为输出 。
2、只写过普通的UDF和UDAF函数。
128、Hive中创建表有哪几种方式,其区别是什么?
参考答案:
1.hive创建表有以下几种方式
1)create table
2)create table as select ...
3)create table like tablename1;
2.不同方式的区别
1)create table创建表,需要明确指定表结构和索引
2)create table as创建表,只有表结构,没有索引。
3)create table like 创建出来的新表包含源表的完整表结构及索引信息
129、Hive中,collect_list()、collect_set()两个函数的区别是什么?参数类型有什么限制?
参考答案:
(1)Hive中collect相关的函数有collect_list和collect_set。 它们都是将分组中的某列转为一个数组返回,不同的是collect_list不去重而collect_set去重。
(2)collect_list(col)函数只接受基本数据类型,它的主要作用是将某字段的值进行汇总,产生array类型字段。 collect_set(col)函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。
130、Hive在select查询数据后,执行insert操作插入ORC表和parquet表操作的过程中,遇到over gc limit、java.lang.OutMemoryError:Java heap space 等字样的错误,大概从哪些地方查找原因解决问题?
参考答案:
(1)可能数据分布不均匀造成的,可以在select阶段加cluster by rand()让数据均匀分布。
(2)map 和reduce阶段的内存不够,通过hive参数增加内存 set mapreduce.reduce.memory.mb=16384;(实际调试的时候,8G内存不够,增加到16G解决问题) set mapreduce.map.memory.mb=4096;
(3)另外在数据格式不统一的情况下,不同格式的insert操作效率奇低。