大数据开发面试宝典

312个问题,问题涵盖广、从自我介绍到大厂实战、19大主题,一网打尽、真正提高面试成功率 

一、Linux

1. 说⼀下linux的常⽤命令?

说一些高级命令即可

systemctl 设置系统参数 如:systemctl stop firewalld关闭防火墙

tail / head        查看文件尾部或开头,通常用来查看日志文件

grep        查找文件 通常配合管道符 | 使用

scp        将文件分发给其他服务器

ping        查看网络是否正常

yum        下载并安装软件包

tar        解压缩

2. 如何查看linux⽂件的前⼗⾏ 或者 后⼗⾏

head -n 10 /tmp/tmpfile # 查看⽂件前10⾏
tail -n 10 /tmp/tmpfile # 查看⽂件后10⾏
cat filename | head -n 300 | tail -n +100 # 显示100⾏到300⾏
cat filename | tail -n +10 | head -n 20 # 从10⾏开始,显示20⾏,即显示10-39
⾏

3. 只知道进程名称,⽐如yarn,如何找到此进程并杀死?

ps aux | grep yarn        来查找进程yarn进程 ID
kill -9 id        强制杀死进程

⼆、Shell

1. Shell 常⽤⼯具及写过的脚本

1)常⽤⼯具:

        scp        通过 SSH 协议复制文件        scp file.txt user@host:/path/to/destination

        sort       对文件内容排序        sort file.txt

        bash     执行 Shell 脚本        bash ./a.sh

        echo     输出值                       echo('666')

2)⽤ Shell 写过哪些脚本

(1)集群启动,分发脚本        start-all.sh

(2)数仓与 MySQL 的导⼊导出 (sqoop脚本)sqoop - ...

(3)数仓层级内部的导⼊:ods->dwd->dws->dwt->ads

2. Shell 中单引号和双引号区别?

1)单引号不取变量值
2)双引号取变量值
3)反引号  ` ,执⾏引号中命令
4)双引号内部嵌套单引号,取出变量值
5)单引号内部嵌套双引号,不取出变量值

三、MySQL

1. MySQL 索引使⽤有哪些注意事项呢?

这个可以从 索引哪些情况会失效和 索引不适合哪些场景两个⽅⾯回答
1)索引哪些情况会失效
  • (1)查询条件包含or,会导致索引失效。
  • (2)隐式类型转换(查询时自动将某种数据类型转换为另一种数据类型),会导致索引失效,例如age字段类型是int,我们where age = “1”,这样就会触发 隐式类型转换。
  • (3)like通配符会导致索引失效。注意:"ABC%“会⾛range索引,”%ABC"索引才会失效。
  • (4)联合索引包含多个列的索引),查询时的条件列不是联合索引中的第⼀个列,索引失效。
  • (5)对索引字段进⾏函数运算。
2)索引不适合哪些场景
  • 数据量少的不适合加索引
  • 更新⽐较频繁的也不适合加索引
  • 离散性低数据值之间的差异小)的字段不适合加索引(如性别)

2. 数据库的优化

  • 1)加索引 

                它会将表中的某一列或多列的值与对应的记录位置,数据库可以避免全表扫描,而是通过索引直接定位到符合条件的记录,从而显著减少查询的时间

  • 2)⾏列裁剪,避免返回不必要的数据(select 字段)

                通过只选择需要的列(而不是SELECT *),减少网络传输的数据量

  • 3)适当分批量进⾏ 避免一次性大数据量操作

  • 4)优化sql结构
  • 5)分库分表

3. Hive数仓与mysql数据库的区别?

  • 1)数据规模
    •  Hive⽀持很⼤规模的数据计算;数据库可以⽀持的数据规模较⼩。
  • 2)计算引擎
    • Hive底层运⾏的是MapReduce程序,但是数据库有⾃⼰的执⾏引擎。
  • 3)数据更新
    • Hive读多写少,不建议对数据改写;数据库对数据的增删改操作⽐较多。
  • 4)存储数据位置
    • Hive数据实际是存储在HDFS上,数据库的数据存储在块设备上或者本地⽂件系统中
  • 5)数据冗余
    • hive允许一定量的数据冗余

四、Hadoop

1. Hadoop 常⽤端⼝号

2. HDFS 读流程和写流程 *

读流程

  • 1)客户端向namenode请求下载⽂件,namenode通过查询元数据,找到⽂件块所在的datanode地址。
  • 2)挑选⼀台datanode(就近原则,然后随机)服务器,请求读取数据。
  • 3)datanode开始传输数据给客户端(从磁盘⾥⾯读取数据放⼊流,以packet为单位来做校验)。
  • 4)客户端以packet为单位接收,先在本地缓存,然后写⼊⽬标⽂件。
  • 这个读流程是⽐较简单的,⾥⾯还涉及到⽤户读权限的校验以及⽂件是否存在的判断

写流程

  • 1)客户端向namenode请求上传⽂件,namenode检查⽬标⽂件是否已存在,⽗⽬录是否存在。
  • 2)namenode返回是否可以上传。
  • 3)客户端请求第⼀个 block上传到哪⼏个datanode服务器上。
  • 4)namenode返回3个datanode节点,分别为dn1、dn2、dn3。
  • 5)客户端请求dn1上传数据,dn1收到请求会继续调⽤dn2,然后dn2调⽤dn3,将这个通信管道建⽴完成。
  • 6)dn1、dn2、dn3逐级应答客户端
  • 7)客户端开始往dn1上传第⼀个block(先从磁盘读取数据放到⼀个本地内存缓存),以packet为单位, dn1
  • 8)收到⼀个packet就会传给dn2,dn2传给dn3;dn1每传⼀个packet会放⼊⼀个应答队列等待应答
  • 9)当⼀个block传输完成之后,客户端再次请求namenode上传第⼆个block的服务器。(重复执⾏3-7 步)

3. HDFS 常⽤命令

hdfs dfs -help
hdfs dfs -cat <hdfsfile> # 查看⽂件内容
hdfs dfs -mkdir <path> # 新建⽬录
hdfs dfs -put # 上传本地⽂件到hdfs
hdfs dfs -rm # 删除⽂件或⽬录
hdfs dfs -get < hdfs path> < localpath> # 将hdfs⽂件下载到本地

4. HDFS ⼩⽂件处理

1)会有什么影响
a) 存储层⾯
(1)1 个⽂件块,占⽤ namenode 多⼤内存 150 字节
(2)128G 能存储多少⽂件块?
(3)128 * 1024*1024*1024byte/150 字节 = 9 亿⽂件块
(4)极⼤的占⽤了NameNode的内存
b) 计算层⾯
每个⼩⽂件都会起到⼀个 MapTask,占⽤了⼤量计算资源
2)怎么解决
a)采⽤ har 归档⽅式,将⼩⽂件归档
b)采⽤ CombineTextInputFormat

5. MapReduc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值