大数据知识总结

本文详细介绍了Hadoop的主从架构,包括HDFS和YARN的组件与工作流程,以及HDFS的副本放置策略和参数设置优先级。Hive的部分涵盖了sortby和orderby的区别,内部表与外部表的差异,以及数据倾斜的解决方案。Spark的特点、运行模式、RDD算子和执行流程也被提及。此外,Kafka的ACK机制、数据可靠性保障和故障处理策略被讨论,最后是shell脚本中的一些基本概念和用法。
摘要由CSDN通过智能技术生成

目录

Hadoop

1.Hadoop的主从架构

2.HDFS副本放置策略

3.HDFS参数设置的优先级

4.hdfs的读写流程

5.文件块丢失怎么办

Hive

1.sort by 和 order by 的区别

2.内部表和外部表的区别

3.yarn执行流程

4.hive有哪些保存元数据的方式

5.Hive中有没有遇到数据倾斜,怎么解决的?

Spark

1.Spark的特点

2.Master spark作业运行模式

3.RDD算子

4.RDD的宽窄依赖

5.spark执行流程

6.创建DataSet的几种方式

7.spark SQL 和hive on spark有什么区别?

kafka

1.kafka的ack机制

2.kafka怎么保证数据的可靠性?

3.Kafka挂了如何处理?

4.kafka数据积压怎么办?

5.Zookeeper对于Kafka的作用是什么

shell

shell 脚本中所有循环的语法

2.在脚本中获取脚本名称

3.从文件中获取最后一行和第一行

4.将字符串添加到字符串

5.& 和 && 有什么区别


Hadoop

1.Hadoop的主从架构

hdfs

它是一个分布式文件系统,用来存储海量数据。其架构概述:

(1)namenode,负责指挥数据的存储;

(2)datanode,主要负责数据的存储;

(3)seconderynamenode,主要辅助namenode工作

yarn

它用于hadoop的资源和作业的调度。其架构概述:

(1)resourcemanager,负责指挥资源分配;

(2)nodemanager,真正的单个节点服务器资源

2.HDFS副本放置策略

生产上读写操作,选择DN节点进行读取

第一副本:

1.放置在client上传的DN节点

2.client 不在DN节点 ,就随机选择一个DN

第二个副本:

放置在第一个副本不同的机架上的某个DN节点

第三副本:

与第二个副本相同机架的不同节点上

3.HDFS参数设置的优先级

  • 默认配置文件

core-default.xml

hdfs-default.xml

mapred-default.xml

yarn-default.xml

  • 生产配置文件

core-site.xml

hdfs-site.xml

mapred-site.xml

yarn-site.xml

  • 代码里面设置的参数

Configuration

优先级排序:代码里面设置的参数 >生产配置文件 > 默认配置文件

4.hdfs的读写流程

写流程:

  • Client 调用FileSystem.crete(filepath),让NameNode进行RPC通信,NameNode去检查这个路径的文件是否已经存在、是否有权限能够创建这个文件,如果可以就创建一个新的文件,但这时还没有写数据,是不关联任何block的。NameNode根据上传的文件的大小、块大小、副本数参数,计算要上传多少块和块存储在DataNode的位置,最终将这些信息返回给FSDataOutputStream对象(客户端 )
  • Client调用write方法,将第一个块的第一个副本数写第一个DataNode节点,写完去第二个DataNode节点写第二个副本,写完去第三个DataNode节点写第三个副本,当第三个副本写完,就返回一个ack package,确认包给第二个DataNode节点;当第二个DataNode节点接收到这个ack packet确认包,加上自己也写完了就返回一个ack package给第一个DataNode节点;当第一个DataNode节点收到这个ack确认包,加上自己也写完了第一个DataNode节点,将ack package 返回给FSDataOutputStream对象,就表示第一个块 的三个副本写完。其他块也是以此类推。
  • 当所有的块全部写完 ,client调用FSDataOutputStream对象的close方法告诉NameNode文件写完了 。

读流程:

  • Client调用FS.open(filepath)与NN进行RPC通讯,返回该文件的部分或者全部的block列表

给FSDataInputStream对象。

  • Client调用FSDataInputStream对象的read方法,去与第一个块的最近的DataNode进行读取。读取完成会check, 假如ok 就关闭与DataNode通信。假如读取失败,会记录 DataNode和block信息 ,下次就不会从这个节点读取。那么就从第二个节点读取,然后去与第二个块的最近的DataNode进行读取,以此类推。假如当block列表全部读取完成,文件还没有读取完,继续调用FS从NameNode获取下一个批次的block列表,以此类推。
  • Client调用FSDataInputStream对象的close方法,关闭输入流。

5.文件块丢失怎么办

  • 用hdfs fsck / 查看hdfs block是否丢失
  • 若hdfs block丢失,不用解决 hdfs 高容错 自动恢复;手动进行恢复 丢失的block,

hdfs debug recoverLease -path <filename> [-retries <num-retries>]

Hive

1.sort by 和 order by 的区别

  • order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
  • sort by不是全局排序,其在数据进入reducer前完成排序. 因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1, 则sort by只保证每个reducer的输出有序,不保证全局有序。

2.内部表和外部表的区别

  • 内部表数据由Hive自身管理,外部表数据由HDFS管理;
  • 内部表被drop以后,mysql和HDFS上的数据都会被清空,外部表被drop以后,mysql上的数据没了,但是HDFS上的数据还存在。

参考:(7条消息) mysql 外部表_内部表和外部表的区别_灯灯藕粉的博客-CSDN博客

3.yarn执行流程

  • client给rm apps发送请求 去运行 jar (app master)
  • apps 分配一个container 去运行app master
  • app master 向 apps manager去注册 yarn web 可以看到job 运行情况
  • app master 向 resouce scheduler 申请资源运行我的代码
  • nodemanager会开启资源container去运行map task reduce task
  • task 会向app master汇报代码的运行情况
  • 当运行完成之后app master 会给 apps manager通知我的作业运行完成了 请求释放资源
  • apps manager收到请求之后通知客户端你的代码运行完成了

4.hive有哪些保存元数据的方式

内嵌模式,本地模式,远程模式

5.Hive中有没有遇到数据倾斜,怎么解决的?

  • map端数据倾。当单个文件大小稍大于block的大小可以适当的增加map的个数。
  • Join 倾斜。大表 Join 大表:运行时优化,采用skewjoin(倾斜关联)开启对倾斜数据join的优化;

大表 Join 小表,开启map端join: set hive.auto.convert.join = true; 默认是打开的。开启该设置后,join时会在map端将小表缓存到内存中(缓存为hash table),在map端执行join。小表默认是 1000行或者25Mb大小。可以通过设置参数提高小表的阈值 :

set hive.mapjoin.smalltable.filesize=25000000;

  • Count distinct 倾斜,将 count distinct 改写为 group by 的写法

参考:(7条消息) 【HIVE数据倾斜常见解决办法】_hive join 数据倾斜_xiannon的博客-CSDN博客

Spark

1.Spark的特点

速度快

spark基于内存计算,利用DAG执行引擎高效处理数据流。

易用性

spark支持开发语言有java、scala、python、sql多种语言,封装好了多种外部数据源,支持超过80种高级算子。

通用性

spark有多个子模块,它们之间可以进行交互式使用。

sparkcore(离线计算),sparksql(离线计算),sparkstreaming(实时计算),structstreaming(实时计算),mllib( 机器学习),图计算(图处理)。

运行作业的地方

yarn,mesos,k8s,standalone[spark本身集群 ]

2.Master spark作业运行模式

(1)local模式

(2)standalone集群模式

(3)yarn集群

3.RDD算子

(1)transformation操作下的算子:

map,filter,mapPartitionsWithIndex,mapvalues,flatMap

glom : 把每一个分区的数据形成一个数组 比mapPartitionsWithIndex

sample:抽样

union : 简单数据合并,不去重

intersection:交集

subtract:差集,出现在a里面的元素的 没有出现在b里面的 叫差集

distinct :去重

groupByKey:按key进行分组

reduceByKey:只对key进行去重

groupby:自定义分组,灵活

sortByKey:按照key进行排序

sortby:自定义排序,灵活

转换算子常用的:

map、flatmap、filter、mapparitions、distinct、

groupby、sortby、reducebykey、mapvalues

(2)actions操作下的算子:

collect(),foreach(),foreachpartition,reduce,first(),top,countByKey()

常用:

foreach()

foreachpartition

4.RDD的宽窄依赖

窄依赖:父 RDD 的每个分区最多只能被子 RDD 的一个分区使用

宽依赖:父 RDD 的每个分区可以被子 RDD 的多个分区使用

5.spark执行流程

(1)spark作业运行在集群上有一系列进程

(2)SparkContext 去协调这些进程(driver、executors)

(3)运行spark作业:

sc去连接 cluster manager;

cluster manager 给spark作业分配资源;

spark一旦连接上cluster;

sc 发送代码给executor,发送task去executor运行;

6.创建DataSet的几种方式

(1)由DataFrame转化成DataSet

(2)通过SparkSession.createDataSet()直接创建

(3)通过toDS方法隐式转换

7.spark SQL 和hive on spark有什么区别?

  • Hive on Spark把Spark作为Hive的一个计算引擎,将Hive的查询作为Spark的任务提交到Spark集群上进行计算。
  • Spark SQL是spark套件中一个模板,它将数据的计算任务通过SQL的形式转换成了RDD的计算,类似于Hive通过SQL的形式将数据的计算任务转换成了MapReduce。

参考:浅谈Hive on Spark 与 Spark SQL的区别-云社区-华为云 (huaweicloud.com)

kafka

1.kafka的ack机制

ack=0时,生产者不会等待broker的ack,这个延迟最低但是存储的保证最弱,当server挂掉的时候就会丢数据;

ack=1时,服务端会等待ack值,leader副本确认接收到消息后,发送ack,但是如果leader挂掉后它不确保是否复制完成新leader也会导致数据丢失;

ack=-1时,同样在1的基础上,服务端会等所有的follower的副本收到数据后才会收到leader发出的ack,这样数据不会丢失。

2.kafka怎么保证数据的可靠性?

  • Kafka 的分区多副本架构是 Kafka 可靠性保证的核心,把消息写入多个副本可以使 Kafka 在发生崩溃时仍能保证消息的持久性
  • 如果我们要往 Kafka 对应的主题发送消息,我们需要通过 Producer 完成。Kafka 在 Producer 里面提供了消息确认机制,可以在定义 Producer 时通过 acks 参数指定,根据实际的应用场景,我们设置不同的 acks,以此保证数据的可靠性。
  • 为了保证数据的可靠性,我们最少需要配置一下几个参数:

(1)producer 级别:acks=all(或者 request.required.acks=-1),同时发生模式为同步 producer.type=sync

(2)topic 级别:设置 replication.factor>=3,并且 min.insync.replicas>=2;

(3)broker 级别:关闭不完全的 Leader 选举,即 unclean.leader.election.enable=false;

参考:Kafka 是如何保证数据可靠性和一致性 - 腾讯云开发者社区-腾讯云 (tencent.com)

3.Kafka挂了如何处理?

  • 紧急处理方式:先尝试重新启动一下,如果能启动正常,那直接解决。
  • 分析影响:分析数据的一致性(丢数、重复、乱序)。如果数据出现问题,在日志服务器有30天备份
  • 定位问题:查看Kafka日志
  • 解决问题:如果因为资源问题,如CPU使用率过高等,考虑增加内存、增加CPU、网络带宽。

4.kafka数据积压怎么办?

(1)如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数= 分区数。(两者缺一不可)增加分区数通过alter命令完成。

(2)如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少(拉取数据/处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据积压。

5.Zookeeper对于Kafka的作用是什么

  • Broker是分布式部署并且相互之间相互独立,但是需要有一个注册系统能够将整个集群中的Broker管理起来,此时就使用到了Zookeeper。
  • 在Kafka中,同一个Topic的消息会被分成多个分区并将其分布在多个Broker上,这些分区信息及与Broker的对应关系也都是由Zookeeper在维护

参考:Zookeeper 在 Kafka 中的作用 - 简书 (jianshu.com)

shell

shell 脚本中所有循环的语法

循环:

for i in $( ls ); do

echo item: $i

done

while 循环:

#!/bin/bash

COUNTER=0

while [ $COUNTER -lt 10 ]; do

echo The counter is $COUNTER

let COUNTER=COUNTER+1

done

直到循环:

#!/bin/bash

COUNTER=20

until [ $COUNTER -lt 10 ]; do

echo COUNTER $COUNTER

let COUNTER-=1

done

2.在脚本中获取脚本名称

$0

3.从文件中获取最后一行和第一行

tail -1 head -1

4.将字符串添加到字符串

V1="Hello"

V2="World"

V3=$V1+$V2

echo $V3

输出

Hello+World

5.& 和 && 有什么区别

& - 当我们想要将脚本放到后台时使用它

&& - 当我们想要执行命令/脚本时,如果第一个脚本成功完成

参考:(7条消息) 70 个 Shell 脚本面试问题和答案_shell面试脚本_太极淘的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值