- 简单概述hdfs原理,以及各个模块的职责(10分)
namenode:统一管理各个datanode节点的信息,负责文件存储时分发文件到不同的datanode节点
datanode:负责存储具体文件
sendarynamenode:协助namenode做一些备份工作
2.谈谈数据倾斜,如何发生的,并给出优化方案(10分)
数据倾斜主要发生在某类数据特别重的时候。
- 二阶段mapreduce
- 探查具体是哪类数据特别重,将此类数据通过随机值或自定义分区等方式打散
- 从数据源层面避免这种问题的发生
3.请描述mapreduce中shuffer阶段的工作流程,如何优化shuffer阶段的?(10分)
shuffer发生在map之后,reduce之前,主要是对数据进行洗牌打乱。
将map输出的数据放到一个环形缓冲区,达到一定比例就溢写到本地磁盘,通常有几个文件就会有几个reduce。
如何优化:调整环形缓冲区的大小。调整mapreduce任务个数
4.写出你对zookeeper的理解(5分)
zk是一个分布式一致性的框架。主要有cap的一致性和高可用性。
通常可以用来监控服务的状态。主要存储形式是目录结构。
比较著名的是zk选举机制。
同时为了防止脑裂zk集群通常是奇数且超过半数选举才可以选出leader
5.Hive 的 sort by 和 order by 的区别 (5分)
6.Hbase 的 rowkey 怎么创建比较好?列族怎么创建比较好?(10分)
保证唯一性。
7.Redis, 传统数据库,hbase,hive 每个之间的区别(10分)
内存型nosql数据库,关系型数据库,列式数据库,基于文件的大数据关系型数据库,
8.下面哪个不是 SPARK RDD 的特点 (c )(5分)
A. 可分区 B 可序列化 C 可修改 D 可持久化
9. 关于SPARK中的广播变量,下面哪个是错误的 (b )(5分)
A 任何函数调用 B 是只读的 C 存储在各个节点 D 存储在磁盘或 HDFS
10 .你需要打印一个给定的数字的反序,如输入10572,输出27501,如果没有输入数据,应该抛出错误和使用shell脚本说明。请实现该shell,并说明使用的算法。(10分)
思路:
获取输入参数,没有则抛错
将数字分解为n位
循环遍历倒置放入新的位置
最后转换格式输出
11.(20分) HDFS中有两个文件a.text与b.text,文件路径在f://txt/2/ 下,文件的格式为(ip username),如:a.text,b.text
———————————————
a.text
127.0.0.1 xiaozhang
127.0.0.1 xiaoli
127.0.0.2 wangwu
127.0.0.3 lisi
B.text
127.0.0.4 lixiaolu
127.0.0.5 lisi
每个文件至少有1000万行,请用spark程序完成以下工作,
1)每个文件的各自的IP数量
2)出现在b.text而没有出现在a.text的IP
3)每个user出现的次数以及每个user对应的IP的个数
1.类似wordcount,map做拆分和各ip的统计,reduce做聚合计算
2.维护一个公共的数据结构存储b.text的ip,读取a.text的ip时候和这个公共的数据结构做比较,没出现过则出入这个ip
3.将user作为map的key,ip和数量组合为reduce计算的输入