大数据面试要点

大数据面试训练题:

数据库:

  • 数据库中join可以替换成子查询
  • 修改缺省值:alter table 表名 alter column 字段名 set default 默认值
  • 全文索引:select *from table where mactch(列名) against(‘关键字’)
  • 关系型数据库中,用来表示实体间联系的是二维表
  • mysql的几种语言:
    • 数据查询语言(DQL)查询表数据
    • 数据操作语言(DML)修改表数据
    • 数据控制语言(DCL)管理权限
    • 数据定义语言(DDL)修改表结构
    • 事务处理语言(TPL)处理事务
  • stuff(原字符,开始位置,删除长度,插入字符)

linux:

  • find -name ‘abc’ :寻找文件夹下名字为abc的文件

  • grep -ri ‘abc’:匹配二进制文件里含有abc的文件

  • 权限:-rwx–r-wx

    0位:文件类型

    1-3位:所有者拥有该文件的权限(r:可读,w:可写,x:可执行)

    4-6位:所属组(同用户组的)拥有该文件的权限

    7-9位:确定其他用户拥有该文件的权限

  • 用户管理相关的配置文件:

    /etc/passwd:存放用户的UID name密码过期时间,修改时间等等

    /etc/shadow:存放密码密文

    /ect/group:存放用户所属组的情况

  • 可以重启的命令:

    • shutdown -r now
    • reboot
    • init6
  • top:查看内存

  • 查看磁盘存储情况:df -h

  • 查看磁盘IO读写情况:iotop

  • 查看端口占用情况:netstat -tunlp|grep 端口号

  • 查看进程:ps aux

Hadoop:

序列化和反序列化:
序列化:就是把内存中的对象,转换成字节序列以便于存储(持久化)和网络传输

反序列化:将收到的字节序列或者磁盘的持久化存储数据,转换成内存中的对象

mapreduce过程:

  • 分片、格式化数据源:

    将文件进行拆分,每一片大小为128M,每一片对应一个map任务,每一个任务会执行一个自定义的map()函数,然后将分好的分片格式化成键值对形式的数据

  • 执行MapTask:

    每个Map任务都有一个内存缓冲区(缓冲区大小为100M),Map任务处理的中间结果,会写入内存缓冲区中,写入缓冲区的数据达到80%就会将溢出数据写入磁盘里,溢写过程中,MapReduce框架会对Key进行排序,如果中间结果比较大,会形成多个溢写文件,最后的缓冲区数据也会全部写入磁盘形成一个溢写文件,如果是多个溢写文件,最后将合并所有的溢写文件为一个文件

  • 执行Shuffle过程

    Shuffle会将MapTask输出的处理结果数据,分发给ReduceTask,并在分发的过程中,对数据按Key进行分区和排序

  • 执行ReduceTask

    输入ReduceTask的数据流是<key,{value list}>形式,用户可以自定义reduce()方法进行逻辑处理,最终以<key,value>的形式输出

  • 写入文件

    MapReduce框架会自动把ReduceTask生成<key,vlaue>传入OutputFormat的write方法,实现文件的写入操作

shuffle过程:

shuffle在map阶段也有,reduce阶段也有

从map产生输出到reduce消化输入的过程

分为map阶段和shuffle阶段:

map阶段:

  • 每个分区会让一个map()函数来处理,map函数产生输出时,并不是简单的把数据写到磁盘,因为频繁的磁盘操作会导致性能严重下降,它的处理过程是把数据先写到圆形缓冲区里,并做一些预排序,以提高效率
  • 当超过缓冲区的80%后,会启动一个后台线程,把缓冲区中的内容写到磁盘上
  • 写到磁盘前,线程首先根据最终要传递到的Reduce任务把数据划分成相应的分区,在每个分区中,后台线程按Key排序(快速排序),如果有一个Conmbiner,便会在排序后的输出上运行
  • 一旦内存缓冲区达到溢出写的阈值,就会创建一个溢出写文件,因此在 Map 任务完成其最后一个输出记录后,便会有多个溢出写文件,在map任务完成前,溢出写文件被并合成一个索引文件和数据文件(多路归并排序)
  • 只要其中一个 Map 任务完成,Reduce 任务就会开始复制它的输出(Copy 阶段)。
  • Map 任务的输出文件放置在运行 Map 任务的 TaskTracker 的本地磁盘上,它是运行 Reduce 任务的 TaskTracker 所需要的输入数据。

reduce阶段:

  • Reduce 进程启动一些数据复制线程,请求 Map 任务所在的 TaskTracker 以获取输出文件(Copy 阶段)
  • 把复制过来的文件经过reducetask处理
  • 最后直接输出