大数据面试要点
大数据面试训练题:
数据库:
- 数据库中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处理
- 最后直接输出