Linux
1.说 10 个常用的 Linux 命令
cp 拷贝 scp 跨域安全复制
mkdir 创建文件目录 rmdir 删除文件目录
find 查找
tar -zxvf 解压文件
rsync 同步文件
Ifconfig 查看当前网卡配置信息
Ping 查看是否与目标 IP 连接成功
Vi 打开文件 / 查看文件
ps -ef 查询当前进程
Kill -9 强制关闭目标程序
Kill- 15 优雅关闭目标程序
Shutdown -h now 关机
2. Linux 系统中创建用户,用户组的命令,赋权命令
创建用户 useradd 用户名
创建用户组 groupadd 用户组名
赋权命令 chmod [权限设置] 文件或目录名 例如: chmod 777 file
3. 用户目录在哪,环境变量有几种配置方式
Home 目录 3 种
系统级环境变量:适用于所有用户和进程。–profile
用户级环境变量:适用于当前用户。----bash.profile
shell 会话环境变量:适用于当前 shell 会话,进程结束时销毁。–shell
4. Linux 安装软件的方式有几种,分别什么区别
4 种
软件包安装 自己下载安装包
压缩解压即安装 自行下载安装包 需要手动处理依赖和删除
yum 下载安装 软件仓库可能没有需要下载的版本软件 从下载失败导致无法安装 需要网络
源码安装 需要自行下载和手动安装
5. 如何选择 Linux 操作系统版本
主要以:用途、界面、安全行、社区支持(是否开源)、发行版本、硬件兼容等方面来选择
如:企业级 小红帽 Centos 界面化 Ubuntu 开源 centos
6.Shell 脚本第一行是什么,运行 Shell 脚本的方式有哪些,有什么区别
第一行是指脚本解释器的路径 #!
常见的执行方式有:
直接执行脚本文 会产生一个新的子 shell 进程 需要权限
bash 命令 会产生一个新的子 shell 进程 需要权限
source 命令 直接执行 Shell 进程 不需要权限
ZooKeeper
1.说说 ZooKeeper 是什么
它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于ZooKeeper 实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能
2. ZooKeeper 集群中有哪些角色,分别有什么作用
在 ZooKeeper 集群中,有三种角色:
1. Leader(领导者):负责处理客户端请求,协调集群中的节点,保证数据的一致性和可靠性。
2. Follower(跟随者):接受客户端请求,并将请求转发给 Leader 节点处理。
3. Observer(观察者):与 Follower 节点类似,但不参与 Leader 选举过程,不具备写的能力,主要用于扩展读取能力。
其中,Leader 是最重要的角色,负责协调整个集群的工作。Follower 和Observer 则是协助 Leader 完成数据的读取和写入。这些角色的存在保证了ZooKeeper 集群的高可用性和数据一致性。
3. 说说 ZooKeeper Znode 的特点与监听机制
ZooKeeper Znode 的特点有:
1. 持久性:Znode 可以持久存在,并且可以在节点创建时指定其是否为持久节点。
2. 临时性:Znode 可以是临时节点,它会在其创建的会话结束时删除。临时节点通常用于表示会话的存在和状态。
3. 顺序性:Znode 可以是顺序节点,它们具有一个唯一的顺序标识符,这个标识符可以用于实现有序队列等功能。
4. 层级结构:Znode 构成了一个层级结构,每个节点可以有多个子节点,每个子节点又可以有自己的子节点。
ZooKeeper 的监听机制是通过注册监听器实现的。客户端可以注册对 Znode 的三种事件进行监听:节点创建、节点删除和节点数据更新。当这些事件发生时,ZooKeeper 就会通知相关的监听器。客户端可以注册不同的监听器来处理不同类型的事件。ZooKeeper 会保证每个事件只会通知一次,因此客户端需要在接收到事件通知后重新注册监听器才能继续监听。
4. 说一下 CAP 原则以及如何选择
CAP 原 则 是 指 在 分 布 式 系 统 中 , 一 致 性 ( Consistency ) 、 可 用 性(Availability)和分区容错性(Partition Tolerance)三个指标无法同时满足,只能选择其中两个指标来保证。具体含义如下:
一致性:所有用户访问同一个数据时,都能得到同样的数据。在分布式系统中,一致性就是指在集群中的任意节点对数据的修改都会同步到其他节点,确保所有节点上的数据是一致的。
可用性:系统保证每个请求都能收到一个响应,不管是成功的响应还是错误的响应。
分区容错性:指在分布式系统中,由于网络或其他原因导致节点之间无法通信时,系统仍能够正常运行。
在选择时,要考虑系统的实际情况和需求,根据不同的应用场景选择不同的指标进行权衡。下面是一些选择策略:
- 对于要求强一致性的系统,需要牺牲可用性或分区容错性,因为一致性需要所有节点都同步,这会增加延迟和负载。例如,银行系统、支付系统等需要强一致性。
- 对于要求高可用性的系统,需要牺牲一致性或分区容错性。例如,在线电商系统、社交网络系统等需要保证高可用性。
- 对于要求高分区容错性的系统,需要牺牲一致性或可用性。例如,数据中心之间的分布式系统,需要保证网络分区容错性。
5. ZooKeeper 的选举过程
ZooKeeper 的选举过程是为了保证集群中只有一个节点充当 Leader,其他节点作为+Follower,从而保证数据的一致性和可靠性。
ZooKeeper 的选举过程分为以下几个步骤:
1. 节点进入 LOOKING 状态,开始选举。
2. 节点发送一个带有自己 ID 和 zxid(事务 ID)的投票给集群中的其他节点。
3. 如果其他节点回复的投票中有超过半数的节点支持该节点,则该节点成为新的Leader,并向集群中发布自己是新的 Leader 的消息。
4. 如果其他节点支持的节点没有超过半数,则该节点需要重新发起一轮选举。
5. 如果某节点成为 Leader 后,其他节点仍然没有收到该节点的确认消息,则这些节点也会重新发起一轮新的选举。
以上是 ZooKeeper 的选举过程简单描述,实际情况中可能会发生多次投票、超时等情况,但总体思路是相同的。
Hadoop
1. HDFS 的读取流程
1. 客户端向 NameNode 请求要读取文件的块信息。
2. NameNode 返回块信息,包括每个块存储在哪个 DataNode 上。
3. 客户端根据返回的块信息,向指定的 DataNode 发送读取请求。
4. DataNode 返回请求的块数据给客户端。
5. 客户端将所有块的数据合并,读取完成。
注意:在读取过程中,如果某个 DataNode 发生故障,客户端会请求其他DataNode 中的副本进行读取。HDFS 在设计时就考虑了数据可靠性和容错性,会将数据存储在多个 DataNode 中,保证数据不会因为某个节点故障而丢失。
2. HDFS 的写入流程
HDFS 的写入流程如下:
1. 客户端向 NameNode 发送写入请求,请求包含了要写入的文件的元数据和数据块大小等信息。
2. NameNode 在元数据命名空间中创建文件记录,并返回给客户端一个包含了所有可用 DataNode 地址的写管道(Pipeline)。
3. 客户端选择一个 DataNode 作为首先要被写入的节点,并向它发送数据块。
4. DataNode 接收到数据块,进行 CRC 校验并返回一个包含了它已接收到数据块信息的响应。
5. 如果客户端已经成功地接收到了这个响应,它就会向下一个 DataNode 发送数据块。
6. 当一个数据块被写入到第一个 DataNode,并成功地被传送到所有副本,客户端会向 NameNode 发送一个确认信息。
7. NameNode 接收到确认信息后,将这个文件的元数据信息记录写入永久存储设备。
8. 当客户端完成了所有的数据块的写入,并且所有数据块都已被传送到了最终副本的节点,客户端向 NameNode 发送一个关闭文件的请求。
9. NameNode 接收到关闭文件的请求后,它将文件的元数据信息标记为已关闭。
3.阐述 MapReduce 的计算流程
MapReduce 的计算流程分为两个阶段:Map 阶段和 Reduce 阶段。
1. Map 阶段
在 Map 阶段,MapReduce 会对输入数据进行分片,分配给多个 Map 任务,每个 Map任务会对分配到的数据进行处理,生成一系列的 key-value 对作为输出。Map 阶段的输入和输出格式均为 key-value。
Map 阶段的计算流程可以概括为以下几个步骤:
- 每个 Map 任务将输入数据分片;
- 对于每个输入数据块,Map 任务将其读入内存,并将其转化为 key-value 对;
- Map 任务对每个 key-value 对进行处理,生成一系列的中间结果;
- Map 任务将中间结果按照 key 进行排序,并分组;
- Map 任务将分组后的中间结果按照 key-value 的形式输出。
2. Reduce 阶段
在 Reduce 阶段,MapReduce 将分组后的中间结果按照 key 分配给多个 Reduce 任务,每个 Reduce 任务会对分配到的数据进行处理,生成最终的结果。Reduce 阶段的输入和输出格式均为 key-value。
Reduce 阶段的计算流程可以概括为以下几个步骤:
- 每个 Reduce 任务将输入数据按照 key 进行排序;
- Reduce 任务对每个 key 的所有 value 进行处理,生成最终的结果;
- Reduce 任务将每个 key 和其对应的结果输出。
4.阐述 YARN 集群的工作流程
YARN(Yet Another Resource Negotiator)是 Hadoop2.0 生态系统中的一个集群管理器,用于管理集群上的资源分配和任务调度。其工作流程如下:
1. 提交应用程序:用户通过客户端提交应用程序到 ResourceManager。
2. 分配 ApplicationMaster:一旦 ResourceManager 接收到应用程序,它会分配一个ApplicationMaster。
3. 分配容器:ApplicationMaster 向 ResourceManager 请求资源,ResourceManager 找到可用的 NodeManager,分配容器给应用程序。
4. 运行任务:容器启动后,ApplicationMaster 向其发送任务,容器会执行任务并将结果返回给 ApplicationMaster。
5. 监 控 和 报 告 : ApplicationMaster 会 监 控 任 务 的 执 行 , 并 将 报 告 发 送 给ResourceManager。
6. 释放资源:当任务完成后,容器将被释放,并且资源将返回到 ResourceManager 的资源池中,以供其他应用程序使用。
5. 为什么会产生 YARN 它解决了什么问题
YARN 是为 了解决 Hadoop MapReduce 的瓶 颈问题而 开发的。 在 Hadoop 1.x 中,MapReduce 是使用 JobTracker 来管理资源的,它负责分配计算资源和任务,但是 JobTracker的性能有限,无法扩展到很大的规模,因此无法满足越来越大的数据处理需求。因此,YARN被引入到 Hadoop 2.x 中,它是一个资源管理器,其设计理念是将计算框架与资源管理系统进行分离,使得不同的应用程序可以共享相同的资源池,从而提高了 Hadoop 的可扩展性和灵活性。
YARN 的主要功能是将集群的计算资源进行统一管理,通过为每个应用程序分配适当的资源,使得多个应用程序可以共享集群资源,同时还可以支持更多的计算框架。通过将资源管理和任务调度分离,YARN 可以更好地支持新的计算框架,如 Spark 和 Storm 等。
因此,YARN 解决了 Hadoop 1.x 中的瓶颈问题,提高了 Hadoop 集群的可扩展性和灵活性,使得 Hadoop 可以更好地满足大规模数据处理的需求。
6.Hadoop MR 模型中数据倾斜一般是在 Mapper 端发生的还是在 Reducer 端发生的,为什么
数据倾斜一般是在 Reducer 端发生的,原因如下:
1. 通常来说,数据倾斜是由某些关键字或关键组合出现的频率远高于其他组合导致的,这种情况在 Mapper 阶段很难发现和处理。而在 Reducer 阶段,相同关键字或者关键组合的数据会被分发到同一个 Reducer 中,因此在 Reducer 阶段才容易发现数据倾斜。
2. 在 Mapper 阶段,数据处理是并发执行的。即使发现了数据倾斜,