面试题1

一.Hadoop

1.hdfs写流程

2.hdfs读流程

3.hdfs的体系结构

4.一个datanode 宕机,怎么一个流程恢复

5.hadoop 的 namenode 宕机,怎么解决

6.namenode对元数据的管理

7.元数据的checkpoint

8.yarn资源调度流程 

9.hadoop中combiner和partition的作用

10.用mapreduce怎么处理数据倾斜问题?

11.shuffle 阶段,你怎么理解的

12.Mapreduce 的 map 数量 和 reduce 数量是由什么决定的 ,怎么配置

13.MapReduce优化经验

14.分别举例什么情况要使用 combiner,什么情况不使用?

15.MR运行流程解析

16.简单描述一下HDFS的系统架构,怎么保证数据安全?

17.在通过客户端向hdfs中写数据的时候,如果某一台机器宕机了,会怎么处理

18.Hadoop优化有哪些方面

19.大量数据求topN(写出mapreduce的实现思路)

20.列出正常工作的hadoop集群中hadoop都分别启动哪些进程以及他们的作用

21.Hadoop总job和Tasks之间的区别是什么?

22.Hadoop高可用HA模式

23.简要描述安装配置一个hadoop集群的步骤

24.fsimage和edit的区别

25.yarn的三大调度策略

26.hadoop的shell命令用的多吗?,说出一些常用的

27.用mr实现用户pv的top10?

二.Hive

1.大表join小表产生的问题,怎么解决?

2.udf udaf udtf区别

3.hive有哪些保存元数据的方式,个有什么特点。

4.hive内部表和外部表的区别

5.生产环境中为什么建议使用外部表?

6.insert into 和 override write区别?

7.hive的判断函数有哪些

8.简单描述一下HIVE的功能?用hive创建表几种方式?hive表有几种?

9.线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时,最好使用的压缩算法是哪个,并说明其原因

10.若在hive中建立分区仍不能优化查询效率,建表时如何优化

11.union all和union的区别

12.如何解决hive数据倾斜的问题

13.hive性能优化常用的方法

14.简述delete,drop,truncate的区别

15.order by , sort by , distribute by , cluster by的区别

16.Hive 里边字段的分隔符用的什么?为什么用\t?有遇到过字段里 边有\t 的情况吗,怎么处理的?为什么不用 Hive 默认的分隔符,默认的分隔符是什么?

17.分区分桶的区别,为什么要分区

18.mapjoin的原理

19.在hive的row_number中distribute by 和 partition by的区别 

20.hive开发中遇到什么问题?

21.什么时候使用内部表,什么时候使用外部表

22.hive都有哪些函数,你平常工作中用到哪些

23.手写sql,连续活跃用户

24.left semi join和left join区别

25.group by为什么要排序

26.说说印象最深的一次优化场景,hive常见的优化思路

27.聊聊hive的执行引擎,spark和mr的区别?

28.hive的join底层mr是如何实现的?

29.sql问题,连续几天活跃的用户?

30.建好了外部表,用什么语句把数据文件加载到表里

31.Hive的执行流程?

32.hive的元数据信息存储在哪?

33.sql语句的执行顺序from-where-group by-having -select-order by -limit

34.on和where的区别

35.hive和传统数据库之间的区别

36.hive中导入数据的4种方式

三.Spark

1.rdd的属性

2.算子分为哪几类(RDD支持哪几种类型的操作)

3.创建rdd的几种方式

4.spark运行流程

5.Spark中coalesce与repartition的区别

6.sortBy 和 sortByKey的区别

7.map和mapPartitions的区别

8.数据存入Redis  优先使用map mapPartitions  foreach  foreachPartions哪个

9.reduceByKey和groupBykey的区别

10.cache和checkPoint的比较

11.spark streaming流式统计单词数量代码

12.简述map和flatMap的区别和应用场景

13.计算曝光数和点击数

14.分别列出几个常用的transformation和action算子

15.按照需求使用spark编写以下程序,要求使用scala语言

16.spark应用程序的执行命令是什么?

17.Spark应用执行有哪些模式,其中哪几种是集群模式

18.请说明spark中广播变量的用途

19.以下代码会报错吗?如果会怎么解决 val arr = new ArrayList[String]; arr.foreach(println)

20.写出你用过的spark中的算子,其中哪些会产生shuffle过程

21.Spark中rdd与partition的区别

22.请写出创建Dateset的几种方式

23.描述一下RDD,DataFrame,DataSet的区别?

24.描述一下Spark中stage是如何划分的?描述一下shuffle的概念

25.Spark 在yarn上运行需要做哪些关键的配置工作?如何kill -个Spark在yarn运行中Application

26.通常来说,Spark与MapReduce相比,Spark运行效率更高。请说明效率更高来源于Spark内置的哪些机制?请列举常见spark的运行模式?

27.RDD中的数据在哪?

28.如果对RDD进行cache操作后,数据在哪里?

29.Spark中Partition的数量由什么决定

30.Scala里面的函数和方法有什么区别

31.SparkStreaming怎么进行监控?

32.Spark判断Shuffle的依据?

33.Scala有没有多继承?可以实现多继承么?

34.Sparkstreaming和flink做实时处理的区别

35.Sparkcontext的作用

36.Sparkstreaming读取kafka数据为什么选择直连方式

37.离线分析什么时候用sparkcore和sparksql

38.Sparkstreaming实时的数据不丢失的问题

39.简述宽依赖和窄依赖概念,groupByKey,reduceByKey,map,filter,union五种操作哪些会导致宽依赖,哪些会导致窄依赖

40.数据倾斜可能会导致哪些问题,如何监控和排查,在设计之初,要考虑哪些来避免

41.有一千万条短信,有重复,以文本文件的形式保存,一行一条数据,请用五分钟时间,找出重复出现最多的前10条

42.现有一文件,格式如下,请用spark统计每个单词出现的次数

43.共享变量和累加器

 44.当 Spark 涉及到数据库的操作时,如何减少 Spark 运行中的数据库连接数?

45.特别大的数据,怎么发送到excutor中?

46.spark调优都做过哪些方面?

47.spark任务为什么会被yarn kill掉?

48.Spark on Yarn作业执行流程?yarn-client和yarn-cluster有什么区别?

49.Flatmap底层编码实现?

50.spark_1.X与spark_2.X区别 

51.说说spark与flink

52.spark streaming如何保证7*24小时运行机制?

53.spark streaming是Exactly-Once吗?

四.Kafka

1.Kafka名词解释和工作方式

2.Consumer与topic关系

3.kafka中生产数据的时候,如何保证写入的容错性?

4.如何保证kafka消费者消费数据是全局有序的

5.有两个数据源,一个记录的是广告投放给用户的日志,一个记录用户访问日志,另外还有一个固定的用户基础表记录用户基本信息(比如学历,年龄等等)。现在要分析广告投放对与哪类用户更有效,请采用熟悉的技术描述解决思路。另外如果两个数据源都是实时数据源(比如来自kafka),他们数据在时间上相差5分钟,需要哪些调整来解决实时分析问题?

6.Kafka和SparkStreaing如何集成?

7.列举Kafka的优点,简述Kafka为什么可以做到每秒数十万甚至上百万消息的高效分发?

8.为什么离线分析要用kafka?

9.Kafka怎么进行监控?

10.Kafka与传统的消息队列服务有很么不同

11.Kafka api  low-level与high-level有什么区别,使用low-level需要处理哪些细节

12.Kafka的ISR副本同步队列

13.Kafka消息数据积压,Kafka消费能力不足怎么处理?

14.Kafka中的ISR、AR又代表什么?

15.Kafka中的HW、LEO等分别代表什么?

16.哪些情景会造成消息漏消费?

17.当你使用kafka-topics.sh创建了一个topic之后,Kafka背后会执行什么逻辑?

18.topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?

19.topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?

20.Kafka有内部的topic吗?如果有是什么?有什么所用?

21.聊一聊Kafka Controller的作用?

22.失效副本是指什么?有那些应对措施?

        23.Kafka 都有哪些特点?

        24.请简述下你在哪些场景下会选择 Kafka?

        25.Kafka 的设计架构你知道吗?

        26.Kafka 分区的目的?

        27.你知道 Kafka 是如何做到消息的有序性?

        28.Kafka 的高可靠性是怎么实现的?

        29.请谈一谈 Kafka 数据一致性原理

        30.ISR、OSR、AR 是什么?

        31.LEO、HW、LSO、LW等分别代表什么

        32.Kafka 在什么情况下会出现消息丢失?

        33.怎么尽可能保证 Kafka 的可靠性

        34.消费者和消费者组有什么关系?

        35.Kafka 的每个分区只能被一个消费者线程,如何做到多个线程同时消费一          个分区?

        36.数据传输的事务有几种?

        37.Kafka 消费者是否可以消费指定分区消息?

        38.Kafka消息是采用Pull模式,还是Push模式?

        39.Kafka 消息格式的演变清楚吗?

        40.Kafka 偏移量的演变清楚吗?

        41.Kafka 高效文件存储设计特点

        42.Kafka创建Topic时如何将分区放置到不同的Broker中

        43.Kafka新建的分区会在哪个目录下创建

        44.谈一谈 Kafka 的再均衡

        45.谈谈 Kafka 分区分配策略

        46.Kafka Producer 是如何动态感知主题分区数变化的?

        47.Kafka 是如何实现高吞吐率的?

        48.Kafka 监控都有哪些?

        49.如何为Kafka集群选择合适的Topics/Partitions数量

        50.谈谈你对 Kafka 事务的了解?

        51.谈谈你对 Kafka 幂等的了解?

        52.Kafka 缺点?

        53.Kafka 新旧消费者的区别

        54.Kafka 分区数可以增加或减少吗?为什么?

        55.kafka消息的存储机制

        56.相比较于传统消息队列,kafka的区别

        57.消息丢失和消息重复

五.Hbase

1.Hbase调优

2.hbase的rowkey怎么创建好?列族怎么创建比较好?

3.hbase过滤器实现用途

4.HBase宕机如何处理

5.hive跟hbase的区别是?

6.hbase写流程

7.hbase读流程

8.hbase数据flush过程

9.数据合并过程

10.Hmaster和Hgionserver职责

11.HBase列族和region的关系?

12.请简述Hbase的物理模型是什么

13.请问如果使用Hbase做即席查询,如何设计二级索引

14.如何避免读、写HBaes时访问热点问题?

15.布隆过滤器在HBASE中的应用

16.Hbase是用来干嘛的?什么样的数据会放到hbase

17.Hbase和Hive的区别与适用场景

18.Hbase在建表时的设计原则(注意事项)

19.hbase优化方法

20.Hbase中的region server发生故障后的处理方法(zk-->WAL)

六.数仓

1.维表和宽表的考查(主要考察维表的使用及维度退化手法)

2.数仓表命名规范

3.拉链表的使用场景

4.一亿条数据查的很慢,怎么查快一点

5.有什么维表

6.数据源都有哪些

7.你们最大的表是什么表,数据量多少

8.数仓架构体系

9.数据平台是怎样的,用到了阿里的那一套吗?

10.你了解的调度系统有那些?,你们公司用的是哪种调度系统

11.你们公司数仓底层是怎么抽数据的?

12.为什么datax抽数据要比sqoop 快?

13.埋点数据你们是怎样接入的

14.如果你们业务库的表有更新,你们数仓怎么处理的?

15.能独立搭建数仓吗

16.搭建过CDH 集群吗

17.说一下你们公司的大数据平台架构?你有参与吗?

18.介绍一下你自己的项目和所用的技术

19.对目前的流和批处理的认识?就是谈谈自己的感受

20.你了解那些OLAP 引擎,MPP 知道一些吗?clickHouse 了解一些吗?你自己做过测试性能吗?

21.Kylin 有了解吗?介绍一下原理

22.datax 源码有改造过吗

23.你们数仓的APP 层是怎么对外提供服务的?

24.数据接入进来,你们是怎样规划的,有考虑数据的膨胀问题吗

25.简述拉链表,流水表以及快照表的含义和特点

26.全量表(df),增量表(di),追加表(da),拉链表(dz)的区别及使用场景

27.你们公司的数仓分层,每一层是怎么处理数据的

28.什么是事实表,什么是维表

29.星型模型和雪花模型

30.缓慢变化维如何处理,几种方式

31.datax与sqoop的优缺点

32.datax抽数碰到emoji表情怎么解决

33.工作中碰到什么困难,怎么解决的

34.如何用数据给公司带来收益

35.需求驱动和业务驱动,数据开发和ETL开发,实战型和博客型

36.如何用数据实现业务增长,黑客增长?

37.什么是大数据?千万级别的数据完全可以用传统的关系型数据库集群解决,为什么要用到大数据平台。

38.数据质量,元数据管理,指标体系建设,数据驱动

39.什么是数仓,建设数仓时碰到过什么问题

40.实时数仓技术选型及保证exactly-once

41.维度建模和范式建模的区别;

42.埋点的码表如何设计;

43.集市层和公共层的区别;

44.缓慢变化维的处理方式

45.聊聊数据质量

46.说说你从0-1搭建数仓都做了什么?你觉得最有挑战的是什么?

47.数据模型如何构建,星型、雪花、星座的区别和工作中如何使用;

48.如何优化整个数仓的执行时长,比如7点所有任务跑完,如何优化到5点;

49.数据倾斜,遇到哪些倾斜,怎么发现的?怎么处理的?;

50.如何保证数据质量;

51.如何保证指标一致性;

52.了解onedata吗,说说你的理解;

53.数据漂移如何解决;

54.实时场景如何解决的;

55.拉链表如何设计,拉链表出现数据回滚的需求怎么解决。

56.平台选型依据;

57.数仓分层、模型、每层都是做什么的?为什么这么做?

58.交叉维度的解决方案?

59.数据质量如何保证(DQC)?

60.任务延迟如何优化(SLA)?

61.聊一下数据资产。

62.如果让你设计实时数仓你会如何设计,为什么?

63.指标如何定义?

64.sql问题:连续活跃n天用户的获取;

65.数据倾斜的sql如何优化;数据量大的sql如何优化?

66.数据仓库主题的划分,参考Teradata的LDM模型;

67.Kimball和Inmon的相同和不同;

68.数据质量管理、数据治理有什么好的方案?知识库管理有什么好的思路?血缘关系图。

69.元数据管理相关问题,集群存储不够了,需要清理不需要的任务和数据该怎么做?

70.业务库2亿数据入仓的策略,一次全量,之后每次增量;

71.什么场景会出现数据倾斜,怎么解决?比如select user_id,count(1) from table group by user_id,其中某些user_id的访问量很大,查询不出结果该怎么办?

72.sql里面on和where有区别吗? 

73.聊一下技术架构,整个项目每个环节用的什么技术这个样子;

74.hive、hbase、spark。。。。这些大数据组件,熟悉哪个或者哪些?我说hive和hbase,对方就问hive和hbase的原理,差异等问题;

75.有没有实时数仓的经验,数据实时入仓思路,canal;

76.你对当前的项目组有没有什么自己的看法、意见或者需要改进的地方,这个改进对你有没有什么影响

77.ods的增量能否做成通用的?

78.公共层和数据集市层的区别和特点?

79.从原理上说一下mpp和mr的区别

80.对了中间还有问数仓数据的输出主要是哪些还有数仓的分层;

81.报表如何展示

82.数据库和数据仓库有什么区别

七.Flink

1.Flink实时计算时落磁盘吗

2.日活DAU的统计需要注意什么

3.Flink调优

4.Flink的容错是怎么做的

5.Parquet格式的好处?什么时候读的快什么时候读的慢

6.flink中checkPoint为什么状态有保存在内存中这样的机制?为什么要开启checkPoint?

7.flink保证Exactly_Once的原理?

8.flink的时间形式和窗口形式有几种?有什么区别,你们用在什么场景下的?

9.flink的背压说下?

10.flink的watermark机制说下,以及怎么解决数据乱序的问题?

11.flink on yarn执行流程

12.说一说spark 和flink 的区别 

八.Java

1.hashMap底层源码,数据结构

2.写出你用过的设计模式,并举例说明解决的实际问题

3.Java创建线程的几种方式

4.请简述操作系统的线程和进程的区别

5.Java程序出现OutOfMemoryError:unable to create new native thread 的原因可能有哪些?如何分析和解决?

6.采用java或自己熟悉的任何语言分别实现简单版本的线性表和链表,只需实现add,remove方法即可

7.ArrayList和LinkedList的区别

8.JVM 内存分哪几个区,每个区的作用是什么?

9.Java中迭代器和集合的区别?

10.HashMap 和 HashTable 区别

11.线程池使用注意哪些方面?

12.HashMap和TreeMap的区别?TreeMap排序规则?

13.用java实现单例模式

14.使用递归算法求n的阶乘:n! ,语言不限

15.HashMap和Hashtable的区别是什么

16.TreeSet 和 HashSet 区别

17.Stringbuffer 和 Stringbuild 区别

18.Final、Finally、Finalize

19..==和 Equals 区别

20.比较ArrayList,LinkedList的存储特性和读写性能

21.Java 类加载过程

22.java中垃圾收集的方法有哪些?

23.如何判断一个对象是否存活?(或者GC对象的判定方法)

24.jvm、堆栈

25.java基本数据类型

九.Elasticsearch

1.为什么要用es?存进es的数据是什么格式的,怎么查询

十.Flume

1.什么是flume

2.flume运行机制

3.Flume采集数据到Kafka中丢数据怎么办

4.Flume怎么进行监控?

5.Flume的三层架构,collector、agent、storage

十一.Sqoop

1.Sqoop底层运行的任务是什么

2.sqoop的迁移数据的原理

3.Sqoop参数

4.Sqoop导入导出Null存储一致性问题

5.Sqoop数据导出一致性问题

6.通过sqoop把数据加载到mysql中,如何设置主键?

十二.Redis

1.缓存穿透、缓存雪崩、缓存击穿

2.数据类型

3.持久化

4.悲观锁和乐观锁

5.redis 是单线程的,为什么那么快

6.redis的热键问题?怎么解决?

十三.Mysql

1.请写出mysql登录命令,用户名user,密码123456,地址192.168.1.130

2.为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?

十四.数据结构与算法

1.二分查找

2.快排

3.归并排序

4.冒泡排序

5.字符串反转

6.Btree简单讲一下

7.动态规划 最大连续子序列和

8.二叉树概念,特点及代码实现

9.链表

十五.Linux

1.怎么查看用户组

2.怎么修改文件权限

3.常用的命令有哪些

4.怎么修改文本文件第一行字符

5.查看内存

6.查看磁盘存储情况

7.查看磁盘IO读写(yum install iotop安装)

8.直接查看比较高的磁盘读写程序

9.查看端口占用情况

10.查看报告系统运行时长及平均负载

11.查看进程

一.Hadoop

1.hdfs写流程

客户端跟namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在

namenode返回是否可以上传

client请求第一个 block该传输到哪些datanode服务器上

namenode返回3个datanode服务器ABC

client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端

client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答

当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

2.hdfs读流程

client跟namenode通信查询元数据,找到文件块所在的datanode服务器

挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流

datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)

客户端以packet为单位接收,现在本地缓存,然后写入目标文件

3.hdfs的体系结构

hdfs有namenode、secondraynamenode、datanode组成。为n+1模式

NameNode负责管理和记录整个文件系统的元数据

DataNode 负责管理用户的文件数据块,文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上,每一个文件块可以有多个副本,并存放在不同的datanode上,Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量

HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

secondraynamenode负责合并日志

4.一个datanode 宕机,怎么一个流程恢复

Datanode宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。如果是长时间宕机了,那么datanode上的数据应该已经被备份到其他机器了,那这台datanode就是一台新的datanode了,删除他的所有数据文件和状态文件,重新启动。

5.hadoop 的 namenode 宕机,怎么解决

先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在,如果只是节点挂了,重启即可,如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做namenode的HA。

6.namenode对元数据的管理

namenode对数据的管理采用了三种存储形式:

内存元数据(NameSystem)

磁盘元数据镜像文件(fsimage镜像)

数据操作日志文件(可通过日志运算出元数据)(edit日志文件)

7.元数据的checkpoint

每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)

namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据

8.yarn资源调度流程 

用户向YARN 中提交应用程序, 其中包括ApplicationMaster 程序、启动ApplicationMaster 的命令、用户程序等。

ResourceManager 为该应用程序分配第一个Container, 并与对应的NodeManager 通信,要求它在这个Container 中启动应用程序的ApplicationMaster。

ApplicationMaster 首先向ResourceManager 注册, 这样用户可以直接通过ResourceManage 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

ApplicationMaster 采用轮询的方式通过RPC 协议向ResourceManager 申请和领取资源。

 一旦ApplicationMaster 申请到资源后,便与对应的NodeManager 通信,要求它启动任务。

NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

各个任务通过某个RPC 协议向ApplicationMaster 汇报自己的状态和进度,以让ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC 向ApplicationMaster 查询应用程序的当前运行状态。

 应用程序运行完成后,ApplicationMaster 向ResourceManager 注销并关闭自己。

9.hadoop中combiner和partition的作用

combiner是发生在map的最后一个阶段,父类就是Reducer,意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量,缓解网络传输瓶颈,提高reducer的执行效率。

partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊

10.用mapreduce怎么处理数据倾斜问题?

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

(1)局部聚合加全局聚合。

第一次在 map 阶段对那些导致了数据倾斜的 key 加上 1 到 n 的随机前缀,这样本来相

同的 key 也会被分到多个 Reducer 中进行局部聚合,数量就会大大降低。

第二次 mapreduce,去掉 key 的随机前缀,进行全局聚合。

思想:二次 mr,第一次将 key 随机散列到不同 reducer 进行处理达到负载均衡目的。第

二次再根据去掉 key 的随机前缀,按原 key 进行 reduce 处理。

这个方法进行两次 mapreduce,性能稍差。

(2)增加 Reducer,提升并行度

JobConf.setNumReduceTasks(int)

(3)实现自定义分区

根据数据分布情况,自定义散列函数,将 key 均匀分配到不同 Reducer

11.shuffle 阶段,你怎么理解的

shuffle: 洗牌、发牌——(核心机制:缓存,数据分区,排序,Merge进行局部value的合并);

具体来说:就是将maptask输出的处理结果数据,分发给reducetask,并在分发的过程中,对数据按key进行了分区和排序;

1)Map 方法之后 Reduce 方法之前这段处理过程叫 Shuffle

2)Map 方法之后,数据首先进入到分区方法,把数据标记好分区,然后把数据发送到 环形缓冲区;环形缓冲区默认大小 100m,环形缓冲区达到 80%时,进行溢写;溢写前对数 据进行排序,排序按照对 key 的索引进行字典顺序排序,排序的手段快排;溢写产生大量溢 写文件,需要对溢写文件进行归并排序;对溢写的文件也可以进行 Combiner 操作,前提是汇总操作,求平均值不行。最后将文件按照分区存储到磁盘,等待 Reduce 端拉取。

3)每个 Reduce 拉取 Map 端对应分区的数据。拉取数据后先存储到内存中,内存不够 了,再存储到磁盘。拉取完所有数据后,采用归并排序将内存和磁盘中的数据都进行排序。

在进入 Reduce 方法前,可以对数据进行分组操作。

12.Mapreduce 的 map 数量 和 reduce 数量是由什么决定的 ,怎么配置

map的数量由输入切片的数量决定,128M切分一个切片,只要是文件也分为一个切片,有多少个切片就有多少个map Task。

reduce数量自己配置。

13.MapReduce优化经验

 设置合理的map和reduce的个数。合理设置blocksize

避免出现数据倾斜

combine函数

对数据进行压缩

小文件处理优化:事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名,value:文件内容)

参数优化

14.分别举例什么情况要使用 combiner,什么情况不使用?

求平均数的时候就不需要用combiner,因为不会减少reduce执行数量。在其他的时候,可以依据情况,使用combiner,来减少map的输出数量,减少拷贝到reduce的文件,从而减轻reduce的压力,节省网络开销,提升执行效率

15.MR运行流程解析

一个mr程序启动的时候,最先启动的是MRAppMaster,MRAppMaster启动后根据本次job的描述信息,计算出需要的maptask实例数量,然后向集群申请机器启动相应数量的maptask进程

maptask进程启动之后,根据给定的数据切片范围进行数据处理,主体流程为:

利用客户指定的inputformat来获取RecordReader读取数据,形成输入KV对

将输入KV对传递给客户定义的map()方法,做逻辑运算,并将map()方法输出的KV对收集到缓存

将缓存中的KV对按照K分区排序后不断溢写到磁盘文件

MRAppMaster监控到所有maptask进程任务完成之后,会根据客户指定的参数启动相应数量的reducetask进程,并告知reducetask进程要处理的数据范围(数据分区)

Reducetask进程启动之后,根据MRAppMaster告知的待处理数据所在位置,从若干台maptask运行所在机器上获取到若干个maptask输出结果文件,并在本地进行重新归并排序,然后按照相同key的KV为一个组,调用客户定义的reduce()方法进行逻辑运算,并收集运算输出的结果KV,然后调用客户指定的outputformat将结果数据输出到外部存储

16.简单描述一下HDFS的系统架构,怎么保证数据安全?

HDFS数据安全性如何保证?

存储在HDFS系统上的文件,会分割成128M大小的block存储在不同的节点上,block的副本数默认3份,也可配置成更多份;

第一个副本一般放置在与client(客户端)所在的同一节点上(若客户端无datanode,则随机放),第二个副本放置到与第一个副本同一机架的不同节点,第三个副本放到不同机架的datanode节点,当取用时遵循就近原则;

datanode已block为单位,每3s报告心跳状态,做10min内不报告心跳状态则namenode认为block已死掉,namonode会把其上面的数据备份到其他一个datanode节点上,保证数据的副本数量;

datanode会默认每小时把自己节点上的所有块状态信息报告给namenode;

采用safemode模式:datanode会周期性的报告block信息。Namenode会计算block的损坏率,当阀值<0.999f时系统会进入安全模式,HDFS只读不写。HDFS元数据采用secondaryname备份或者HA备份

17.在通过客户端向hdfs中写数据的时候,如果某一台机器宕机了,会怎么处理

       在写入的时候不会重新重新分配datanode。如果写入时,一个datanode挂掉,会将已经写入的数据放置到queue的顶部,并将挂掉的datanode移出pipline,将数据写入到剩余的datanode,在写入结束后, namenode会收集datanode的信息,发现此文件的replication没有达到配置的要求(default=3),然后寻找一个datanode保存副本。

18.Hadoop优化有哪些方面

0)HDFS 小文件影响

(1)影响 NameNode 的寿命,因为文件元数据存储在 NameNode 的内存中

(2)影响计算引擎的任务数量,比如每个小的文件都会生成一个 Map 任务

1)数据输入小文件处理:

(1)合并小文件:对小文件进行归档(Har)、自定义 Inputformat 将小文件存储成SequenceFile 文件。

(2)采用 ConbinFileInputFormat 来作为输入,解决输入端大量小文件场景。

(3)对于大量小文件 Job,可以开启 JVM 重用。

2)Map 阶段

(1)增大环形缓冲区大小。由 100m 扩大到 200m

(2)增大环形缓冲区溢写的比例。由 80%扩大到 90%

(3)减少对溢写文件的 merge 次数。(10 个文件,一次 20 个 merge)

(4)不影响实际业务的前提下,采用 Combiner 提前合并,减少 I/O。

3)Reduce 阶段

(1)合理设置 Map 和 Reduce 数:两个都不能设置太少,也不能设置太多。太少,会导致 Task 等待,延长处理时间;太多,会导致 Map、Reduce 任务间竞争资源,造成处理超时等错误。

(2)设置 Map、Reduce 共存:调整 slowstart.completedmaps 参数,使 Map 运行到一定程度后,Reduce 也开始运行,减少 Reduce 的等待时间。

(3)规避使用 Reduce,因为 Reduce 在用于连接数据集的时候将会产生大量的网络消耗。

(4)增加每个 Reduce 去 Map 中拿数据的并行数

(5)集群性能可以的前提下,增大 Reduce 端存储数据内存的大小。

4)IO 传输

(1)采用数据压缩的方式,减少网络 IO 的的时间。安装 Snappy 和 LZOP 压缩编码器。

(2)使用 SequenceFile 二进制文件

5)整体

(1)MapTask 默认内存大小为 1G,可以增加 MapTask 内存大小为 4-5g

(2)ReduceTask 默认内存大小为 1G,可以增加 ReduceTask 内存大小为 4-5g

(3)可以增加 MapTask 的 cpu 核数,增加 ReduceTask 的 CPU 核数

(4)增加每个 Container 的 CPU 核数和内存大小

(5)调整每个 Map Task 和 Reduce Task 最大重试次数

19.大量数据求topN(写出mapreduce的实现思路)

20.列出正常工作的hadoop集群中hadoop都分别启动哪些进程以及他们的作用

1.NameNode它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadate。

2.SecondaryNameNode它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。

3.DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。

4.ResourceManager(JobTracker)JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。

5.NodeManager(TaskTracker)执行任务

6.DFSZKFailoverController高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。

7.JournalNode 高可用情况下存放namenode的editlog文件.

21.Hadoop总job和Tasks之间的区别是什么?

Job是我们对一个完整的mapreduce程序的抽象封装

Task是job运行时,每一个处理阶段的具体实例,如map task,reduce task,maptask和reduce task都会有多个并发运行的实例

22.Hadoop高可用HA模式

HDFS高可用原理:

Hadoop HA(High Available)通过同时配置两个处于Active/Passive模式的Namenode来解决上述问题,状态分别是Active和Standby. Standby Namenode作为热备份,从而允许在机器发生故障时能够快速进行故障转移,同时在日常维护的时候使用优雅的方式进行Namenode切换。Namenode只能配置一主一备,不能多于两个Namenode。

主Namenode处理所有的操作请求(读写),而Standby只是作为slave,维护尽可能同步的状态,使得故障时能够快速切换到Standby。为了使Standby Namenode与Active Namenode数据保持同步,两个Namenode都与一组Journal Node进行通信。当主Namenode进行任务的namespace操作时,都会确保持久会修改日志到Journal Node节点中。Standby Namenode持续监控这些edit,当监测到变化时,将这些修改同步到自己的namespace。

当进行故障转移时,Standby在成为Active Namenode之前,会确保自己已经读取了Journal Node中的所有edit日志,从而保持数据状态与故障发生前一致。

为了确保故障转移能够快速完成,Standby Namenode需要维护最新的Block位置信息,即每个Block副本存放在集群中的哪些节点上。为了达到这一点,Datanode同时配置主备两个Namenode,并同时发送Block报告和心跳到两台Namenode。

确保任何时刻只有一个Namenode处于Active状态非常重要,否则可能出现数据丢失或者数据损坏。当两台Namenode都认为自己的Active Namenode时,会同时尝试写入数据(不会再去检测和同步数据)。为了防止这种脑裂现象,Journal Nodes只允许一个Namenode写入数据,内部通过维护epoch数来控制,从而安全地进行故障转移。

23.简要描述安装配置一个hadoop集群的步骤

使用root账户登录。

修改IP。

修改Host主机名。

配置SSH免密码登录。

关闭防火墙。

安装JDK。

上传解压Hadoop安装包。

配置Hadoop的核心配置文件hadoop-evn.sh,core-site.xml,mapred-site.xml,hdfs-site.xml,yarn-site.xml

配置hadoop环境变量

格式化hdfs # bin/hadoop  namenode  -format

启动节点start-all.sh

24.fsimage和edit的区别

fsimage:filesystem image 的简写,文件镜像。

客户端修改文件时候,先更新内存中的metadata信息,只有当对文件操作成功的时候,才会写到editlog。

fsimage是文件meta信息的持久化的检查点。secondary namenode会定期的将fsimage和editlog合并dump成新的fsimage

25.yarn的三大调度策略

FIFO Scheduler把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。

Capacity(容量)调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。

在Fair(公平)调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。

  需要注意的是,在下图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。

26.hadoop的shell命令用的多吗?,说出一些常用的

27.用mr实现用户pv的top10?

map输入数据,将数据转换成(用户,访问次数)的键值对,然后reduce端实现聚合,并且将结果写入用户、访问次数的实体类,并且实现排序,最后的结果做一个top10的筛选

二.Hive

1.大表join小表产生的问题,怎么解决?

mapjoin方案

join因为空值导致长尾(key为空值是用随机值代替)

join因为热点值导致长尾,也可以将热点数据和非热点数据分开处理,最后合并

2.udf udaf udtf区别

UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。

UDAF 接受多个输入数据行,并产生一个输出数据行。像COUNT和MAX这样的函数就是聚集函数。

UDTF 操作作用于单个数据行,并且产生多个数据行-------一个表作为输出。lateral view explore()

简单来说:

UDF:返回对应值,一对一

UDAF:返回聚类值,多对一

UDTF:返回拆分值,一对多

3.hive有哪些保存元数据的方式,个有什么特点。

内存数据库derby,安装小,但是数据存在内存,不稳定

mysql数据库,数据存储模式可以自己设置,持久化好,查看方便。

4.hive内部表和外部表的区别

Hive内部表外部表区别及各自使用场景

5.生产环境中为什么建议使用外部表?

Hive内部表外部表区别及各自使用场景

6.insert into 和 override write区别?

insert into:将数据写到表中

override write:覆盖之前的内容。

7.hive的判断函数有哪些

hive 的条件判断(if、coalesce、case)

8.简单描述一下HIVE的功能?用hive创建表有几种方式?hive表有几种?

hive主要是做离线分析的

hive建表有三种方式

直接建表法

查询建表法(通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据一般用于中间表)

like建表法(会创建结构完全相同的表,但是没有数据)

hive表有2种:内部表和外部表

9.线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时,最好使用的压缩算法是哪个,并说明其原因

10.若在hive中建立分区仍不能优化查询效率,建表时如何优化

11.union all和union的区别

union 去重

union oll 不去重

12.如何解决hive数据倾斜的问题

Hive调优,数据工程师成神之路

13.hive性能优化常用的方法

Hive调优,数据工程师成神之路

14.简述delete,drop,truncate的区别

delet 删除数据

drop 删除表

truncate  摧毁表结构并重建

15.order by , sort by , distribute by , cluster by的区别

1、 order by可以指定desc降序asc升序

 order by会对输入做全局排序,因此只有一个 reducer(多个 reducer无法保证全局有序),然而只有一个 Reducer,会导致当输入规模较大时,消耗较长的计算时间。

2、 sort by不是全局排序,其在数据进入 reducer前完成排序,因此,如果用 sort by进行排序并且设置 mapped. reduce. tasks〉1,则 sort by只会保证每个 reducer的输出有序,并不保证全局有序。(全排序实现:先用 sortby保证每个 reducer输出有序,然后在进行 order by归并下前面所有的 reducer输出进行单个 reducer排序,实现全局有序。)

3、 distribute by(重要)

 distribute by是控制在map端如何拆分数据给 reduce端的。hive会根据 distribute by后面列,对应 reduce的个数进行分发,默认是采用hash算法。sort by为每个 reduce产生一个排序文件。在有些情况下,你需要控制某个特定行应该到哪个 reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此, distribute by经常和 sort by配合使用。

4、 cluster by

 cluster by具有 distribute by和 sort by的组合功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC

如何实现组内排序或者组内TopN?语法格式

 row number(0)OVER( partition by COLI order by CL2desc)rank先对COL1列进行分区,再对COL2列进行排序。组内排序

16.Hive 里边字段的分隔符用的什么?为什么用\t?有遇到过字段里 边有\t 的情况吗,怎么处理的?为什么不用 Hive 默认的分隔符,默认的分隔符是什么?

hive 默认的字段分隔符为 ascii 码的控制符\001(^A),建表的时候用 fields terminated by '\001'

遇到过字段里边有\t 的情况,自定义 InputFormat,替换为其他分隔符再做后续处理

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容