大数据面试题之Linux&Shell

Linux&Shell

Linux 常用高级命令

Shell 常用工具及写过的脚本

1) awk 、 sed 、 cut 、 sort

2) 用 Shell 写过哪些脚本

(1) 集群启动, 分发脚本

#!/bin/bash

case $1 in

"start")

for i in hadoop102 hadoop103 hadoop104

do

ssh $i "绝对路径"

done

;;

"stop")

;;

esac

(2) 数仓层级内部的导入: ods->dwd->dws ->ads

①#!/bin/bash

②定义变量 APP=gmall

③获取时间

传入 按照传入时间

不传 T+ 1

④sql="

先按照当前天 写 sql => 遇到时间 $do_date 遇到表 {$APP}.

自定义函数 UDF UDTF {$APP}.

"

⑤执行 sql

Shell 中单引号和双引号区别

1) 在/home/atguigu/bin 创建一个 test.sh 文件

[atguigu@hadoop102 bin]$ vim test.sh

在文件中添加如下内容

# !/bin/bash

do_date=$1

echo '$do_date '

echo "$do_date"

echo " '$do_date '"

echo '"$do_date" '

echo `date`

2) 查看执行结果

[atguigu@hadoop102 bin]$ test.sh 2022-02-10

$do_date

2022-02-10

'2022-02-10 '

"$do_date"

2022 年 05 月 02 日 星期四 21:02:08 CST

3) 总结:

(1) 单引号不取变量值

(2) 双引号取变量值

(3) 反引号`, 执行引号中命令

(4) 双引号内部嵌套单引号, 取出变量值

(5) 单引号内部嵌套双引号, 不取出变量值

Hadoop

Hadoop 常用端口号

HDFS 读流程和写流程

注意: HDFS 写入流程时候, 某台 dataNode 挂掉如何运行?

当 DataNode 突然挂掉了, 客户端接收不到这个 DataNode 发送的 ack 确认, 客户端会通 知 NameNode, NameNode 检查并确认该块的副本与规定的不符, NameNode 会通知闲置的 DataNode 去复制副本, 并将挂掉的 DataNode 作下线处理 。 等挂掉的 DataNode 节点恢复后, 删除该节点中曾经拷贝的不完整副本数据。

HDFS 小文件处理

1) 会有什么影响

(1) 存储层面

1 个文件块, 占用 namenode 多大内存 150 字节

128G 能存储多少文件块? 128 g* 1024m*1024kb*1024byte/ 150 字节 = 9. 1 亿文

件块

(2) 计算层面

每个小文件都会起到一个 MapTask, 1 个 MapTask 默认内存 1G 。 浪费资源。

2) 怎么解决

(1) 采用har 归档方式, 将小文件归档

(2) 采用 CombineTextInputFormat

(3) 自己写一个 MR 程序将产生的小文件合并成一个大文件 。 如果是 Hive 或者 Spark 有 merge 功能自动帮助我们合并。

(4) 有小文件场景开启 JVM 重用; 如果没有小文件, 不要开启 JVM 重用, 因为会一 直占用使用到的 Task 卡槽, 直到任务完成才释放。

JVM 重用可以使得 JVM 实例在同一个 job 中重新使用 N 次, N 的值可以在 Hadoop 的

mapred-site.xml 文件中进行配置 。 通常在 10-20 之间。

<property>

<name>mapreduce.job.jvm.numtasks</name>

<value>10</value>

<description>How many tasks to run per jvm,if set to -1 ,there is

no limit</description>

</property>

HDFS 的 NameNode 内存

1) Hadoop2.x 系列, 配置 NameNode 默认 2000m

2) Hadoop3.x 系列, 配置 NameNode 内存是动态分配的

NameNode 内存最小值 1G, 每增加 100 万个文件block, 增加 1G 内存。

Shuffle 及优化

Yarn 工作机制

Yarn 调度器

1) Hadoop 调度器重要分为三类

FIFO 、 Capacity Scheduler (容量调度器) 和 Fair Sceduler (公平调度器)。 Apache 默认的资源调度器是容量调度器。

CDH 默认的资源调度器是公平调度器。

2) 区别

FIFO 调度器: 支持单队列 、 先进先出 生产环境不会用。

容量调度器: 支持多队列 。 队列资源分配, 优先选择资源占用率最低的队列分配资源; 作业资源分配, 按照作业的优先级和提交时间顺序分配资源; 容器资源分配, 本地原则 (同 一节点/同一机架/不同节点不同机架)。

公平调度器: 支持多队列, 保证每个任务公平享有队列资源。资源不够时可以按照缺额 分配。

3) 在生产环境下怎么选择?

大厂: 如果对并发度要求比较高, 选择公平, 要求服务器性能必须 OK。 中小公司, 集群服务器资源不太充裕选择容量。

4) 在生产环境怎么创建队列?

(1) 调度器默认就 1 个 default 队列, 不能满足生产要求。

(2) 按照部门: 业务部门 1 、 业务部门 2。

(3) 按照业务模块: 登录注册 、 购物车 、 下单。

5) 创建多队列的好处?

(1) 因为担心员工不小心, 写递归死循环代码, 把所有资源全部耗尽。

(2) 实现任务的降级使用, 特殊时期保证重要的任务队列资源充足。

业务部门 1 (重要) = 》业务部门 2 (比较重要) = 》下单 (一般) = 》购物车 (一般) = 》 登录注册 (次要)

HDFS 块大小

1) 块大小

2) 块大小决定因素

磁盘读写速度

普通的机械硬盘 100m/s => 128m

固态硬盘普通的 300m/s => 256m

内存镜像 500-600m/s => 512m

1.2.9 Hadoop 脑裂原因及解决办法?

1) 出现脑裂的原因

Leader 出现故障, 系统开始改朝换代, 当 Follower 完成全部工作并且成为 Leader 后, 原 Leader 又复活了 (它的故障可能是暂时断开或系统暂时变慢, 不能及时响应, 但其 NameNode 进程还在), 并且由于某种原因它对应的 ZKFC 并没有把它设置为 Standby, 所以 原 Leader 还认为自己是 Leader, 客户端向它发出的请求仍会响应, 于是脑裂就发生了。

2) Hadoop 通常不会出现脑裂。

如果出现脑裂,意味着多个 Namenode 数据不一致,此时只能选择保留其中一个的数据。 例如: 现在有三台 Namenode, 分别为 nn1 、 nn2 、 nn3, 出现脑裂, 想要保留 nn1 的数据, 步骤为:

(1) 关闭 nn2 和 nn3

(2) 在 nn2 和 nn3 节点重新执行数据同步命令: hdfs namenode -bootstrapStandby

(3) 重新启动 nn2 和 nn3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值