1. 简单概述hdfs原理,以及各个模块的职责(10分)

    namenode:统一管理各个datanode节点的信息,负责文件存储时分发文件到不同的datanode节点
    datanode:负责存储具体文件
    sendarynamenode:协助namenode做一些备份工作

    2.谈谈数据倾斜,如何发生的,并给出优化方案(10分)
    数据倾斜主要发生在某类数据特别重的时候。

    1. 二阶段mapreduce
    2. 探查具体是哪类数据特别重,将此类数据通过随机值或自定义分区等方式打散
    3. 从数据源层面避免这种问题的发生

    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计算的输入