大数据知识点汇总---Redis,Spark,Kafka,Hive,Mysql,Hbase,Hadoop...

本文深入探讨大数据领域的关键技术和组件,涵盖Redis、Spark、Kafka、Hive与Hadoop的核心概念、应用场景及性能优化。内容包括Redis的内存数据管理、Spark的DataFrame与DataSet特性、Kafka的数据安全措施、Hive的查询原理及Hadoop的文件系统管理。通过对这些技术的深入理解,读者可以更好地掌握大数据处理和分析的关键要素。
摘要由CSDN通过智能技术生成

建议使用Notepad++/ .java文件 打开
0、大数据5V
Volume 体积大,高速率增长的数据量,PB为单位
Velocity 数据增长速度快
Variety 不同数据类型,文本、音频、视频
Veracity 数据不确定性,大量数据带来不完整性和不一致性
Vlue 数据价值
-------------------------------------------------------- Redis ---------------------------------------------------------
1、Redis支持的最大数据量是多少?
Redis可以支持6W,小数据可以达到10W的并发

2、Redis是什么?适用场景是什么
Redis是一个开源的BSD协议,使用ANSIC编写,基于内存的且支持持久化,高性能的K-V的NoSQL数据库
使用场景:
数据高并发的读写,降低数据IO
海量数据配合关系型数据库做高速缓存的读写
可持久化特定数据
分布式架构,做session共享
对扩展性能要求比较高的数据

3、列举一个常用的Redis客户端的并发模型
Redis为单进程单线程模式,采用队列模式并发访问变为串行访问。
Redis本身没有锁的概念,对于多个客户端并不存在竞争,但是客户端连接混乱导致Redis发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题
解决方法:
a 客户端角度,为了保证每个客户端间有序的与Redis进行通讯,对连接进行池化,同时对客户端读写Redis操作实现内部锁synchronized
b 服务器角度,利用setnx实现锁。

4、布隆过滤器
布隆过滤器可以理解为一个不怎么精确的set结构,当使用contains方法判断某个对象是否存在时,他可能会误判。
但是只要参数设置的合理,他的精确度可以足够精准,只会有小小的误判概率。
当布隆过滤器说某个值存在时,这个值可能不存在,这是它的误判率;当他说不存在时,那就肯定不存在,漏报是不可能的。
底层大致是靠hash 0?1 决定判断

5、常见数据库之间的区别
Redis: 分布式缓存,强调缓存,内存中数据
传统数据库:注重关系,注重事务性
Hbase: 列式数据库,稀疏性存储,用于存储海量数据,底层基于HDFS
Hive: 数据仓库,底层是MR,不是数据库,不能用来做用户的交互存储
Hbase和Redis都是基于K-V数据库,Hbase是基于文件系统的,适合 TB+ 数据;Redis是基于内存的,适合低于TB数据

6、luncene全文检索引擎的架构
是apache下的一个开放源代码的全文检索引擎工具包,基于java的全文检索库。
不同于搜索引擎的是,它只是一个工具包,不能单独运行,需要在project中加入luncene的jar包,最终project在JVM中运行。

-------------------------------------------------------- Spark---------------------------------------------------------
7、SparkSQL介绍下(RDD、DataFream)
Spark中原生的RDD是没有数据结构的
对RDD的变换和操作是不能采用传统的SQL方法
SparkSQL应运而生并建立在Spark上,用于交互式查询
Spark最初依赖Hive解析器,改进后的SparkSQL摆脱依赖
RDD
懒执行不可变的支持Lambda(=>…)并行数据集合
RDD最大的好处就是简单,API人性化程度很高
RDD劣势是性能限制,jvm常驻内存对象,这也就决定了存在GC的限制和数据增加时java序列化成本的升高
DataFrame
与RDD类似,也是一个分布式数据容器,但是DF更像是传统数据库的二维表格,除记录数据外,还记录数据结构信息schema
底层封装的是RDD
DataFrame转化成RDD df.rdd
DataSet
DataSet是DataFrame API的一个扩展,是Spark最新的数据抽象,用户友好
DataFrame是DataSet的特列,DataFrame = DataSet[Row]
DataSet是强类型,DataSet[Person],DataSet[Student]
DF只知道字段,不知字段类型,在执行操作时没办法在编译的时候检查是否类型失败
DS不仅知道字段,还知道字段类型,所以有更严格的错误检查
RDD让我们能够决定怎么做,而DF/DS让我们决定做什么,控制的粒度不一样

8、UDF和UDAF
UDF只能实现一进一出的操作,UDAF可以实现多进一出
Hive的UDAF分类:
Simple,继承org.apache.Hadoop.Hive.ql.exec.UDAF类,并在派生类中以静态内部的方法实现UDAFEvaluator接口方法简单直接,但依赖Java反射机制,性能较低
Generic,Hive推荐新的写法,以抽象类代替原有的接口

9、Spark的Yarn和MR的Yarn有什么区别
MR-Yarn:细粒度资源申请
每个Task运行在一个独立的JVM进程中
可单独为不同类型的Task设置不同的资源量,目前支持内存和CPU两种资源
每个Task都要经历 资源申请 -> Task运行 -> 释放资源
Spark-Yarn:粗粒度资源申请
每个节点上可以运行1-n个Excutor服务
每个Excutor单独运行在一个JVM进程中,每个Task则运行在Excutor中的一个线程
同一个Excutor内部的Task可共享内存
Excutor一旦启动,一直运行,直到最后一个task任务运行完毕,程序才结束

10、Spark和MR性能差别
快:Spark多个任务间数据通信基于内存,Hadoop基于磁盘以及对JVM使用优化
消除了HDFS的读写(磁盘)
消除了MR阶段,Spark有丰富算子
粗细粒度
注意:
简单的查询只使用一次shuffle,Spark需要创建(group by)线程池
MR问题:
a MR仅支持MR操作
b 处理效率低,Map中间结果落地磁盘,Reduce写磁盘,多个MR间交互数据开销大
c Map、Reduce端排序
d 不适合迭代计算,交互式处理、流式处理
e 编程不够灵活
Spark:
高效(10-100倍)
内存计算引擎,提供Cache机制来支持需要反复迭代计算多次数据共享,减少数据读取IO开销
DAG引擎,减少多次计算之间中间结果写到HDFS的开销
使用多线程池模型来减少task启动开销,shuffle过程中避免不必要的sort操作以及减少磁盘IO操作
易用
提供丰富API,支持Java、Scala、Python、R四种语言
代码量少(2-5倍)
丰富的算子
DAG执行引擎,中间结果不落地磁盘,减少磁盘IO
线程池模型减少task启动开销
适合迭代计算和机器学习算法
容错:
当执行中途失败时,MR会从失败处继续执行,因为他依赖于磁盘驱动器
Spark必须从头开始执行

11、Spark缓存
Spark缓存机制是Spark优化重点之一,他将需要重复使用或共用的RDD缓存在内存中,可以提高Spark的性能
Spark底层源码中使用StorageLevel来表示缓存机制,其中包括:使用内存,使用磁盘,使用序列化,使用堆外内存
一般默认选择的是Memory_only,其次是Memery_only_Ser,再次是Memory_only_and_Disk

12、cache和checkpoint区别
cache 将共有的/重复使用的RDD按照持久化的级别进行缓存
checkpoint 将业务场景非常长的逻辑计算的中间结果缓存到HDFS上(新线程)

13、local、local[]、local[]
local[N]模式,
N代表可以使用N个线程,每个线程拥有一个core
如果不指定N,则默认是1个线程,该线程拥有1个core。
local[
],代表在本地运行,与自己机器上的逻辑内核一样多的工作线程

14、Spark怎么设置垃圾回收机制
Driver的JVM参数GC方式
yarn-client模式 读取的是spark-class文件中的JAVA_OPTS
yarn-cluster模式 读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的参数值
Excutor的Jvm参数方式
两种模式都是读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的参数值

15、Spark和Hadoop的shuffle区别
Hadoop:
shuffle过程是明显几个阶段,map/spill/merge/shuffle/sort/reduce按照流程顺序执行的,属于push类型
shuffle是 sort-based 类型
优化方法:
map端合并combiner
map端压缩compress
Spark:
shuffle过程是算子驱动的,具有懒执行特点,属于pull类型
shuffle是 hash-based 类型
两阶段,Shuffle Write(ShuffleMapTask) 和 Shuffle Read

16、在Hive中常用排序注意点
order by 对查询结果做全局排序,只允许一个reduce处理,慎用!
sort by 非全局排序,数据进入reducer前完成排序,会对单个reduce数据排序
distribute by 分区排序,按照指定的字段对数据进行划分输出到不同的reduce中,常和sort by结合使用
distribute by xxxx, sort by xoxo 先按照xxxx进行分区,然后再分区内再排序
cluster by 除了具有distribute by的功能外还兼具 sort by 的功能

17、Spark-Excutor
在每个WorkerNode上为某个应用启动一个Excutor进程,负责运行任务并将数据存放于内存/磁盘上,每个任务都有各自独立的Excutor
Excutor是一个应用程序运行的监控和执行容器

18、Spark、Hive、MR数据清洗的区别
多数场景优先考虑Hive进行数据清洗,少部分单独编写MR/Spark进行复杂处理
Spark适合实时数据处理,处理任务比MR快,但是对内存消耗很大
MR适合非实时处理,单纯数据量大的数据
现在做的特征提取,也可以广义理解成数据清洗,公司订单量不大,时间要求不高,用Python脚本处理也是可以的

19、每个RDD实现什么函数达到分片为单位
compute函数,达到“Spark中RDD的计算是以分片为单位”的目的
compute函数会对迭代器进行复合,不需要保存每次计算的结果

20、在大数据计算时,Hive、Spark、Hadoop三大框架join方式
Hive
common join
reduce join
shuffle join
Spark
Broadcast Hash Join
Shuffle Hash Join
Sort Merge Join
Hadoop
map side join 小表join大表
reduce side join 最简单的join,map阶段对不同文件数据打标签,reduce阶段进行实际连接操作
SemiJoin 半连接,map端过滤掉不参加join操作的数据,减少网络IO

-------------------------------------------------------- Kafka---------------------------------------------------------
21、怎么保证Kafka里的数据安全
​ 生产者数据不丢失 producer有丢数据的可能,但是可以通过配置保证消息的不丢失
​ 同步—调节ACK机制的参数(0,1,all)另ACK检查机制为all,设置为0风险很大
​ 异步—通过buffer来进行控制数据的发送,由时间阈值和消息的数量阈值控制,
​ 如果buffer满了数据还没发送出去,如果设置里立即清理模式,风险大,故一定设置为阻塞模式
​ 消费者数据不丢失
​ 通过offset commit来保证数据不丢失,kafka记录了每次消费的offset,便于下次继续在此消费数据

22、Kafka中Key为null问题
生产者发送消息的时候,可以指定Key,作用是为消息选择存储分区,Key可以为空;当指定Key不为空时,Kafka根据Key的hash值与分区数取模来决定数据存储分区位置
当Key=null时,kafka是先从缓存中取分区号,然后判断缓存的值是否为空,若不为空,就将消息存到这个分区,否则重新计算要存储的分区,并将分区号缓存,供下次使用
Kafka定义一个全局变量,这个变量值是配置参数中topic.metadata.refresh.interval.ms设置的值,当缓存过时后就会重新计算分区号
也就是说说在Key为null的情况下,Kafka并不是每条消息都随机选择一个Partition;而是每隔topic.metadata.refresh.interval.ms才会随机选择一次!

23、Kafka底层存储原理
Kafka中的消息是以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值