技术上:
1. Hadoop学习,核心两个技术点需要理解:
(1) HDFS,含义与应用以及工作原理
希望能带着以下问题去学习:
a. HDFS的存储机制,包括写入过程和读取过程(深入细节)
写入是将数据分割成大小固定的块进行存储的,块大小默认为64Mb(旧),128mb(新),不足64Mb的数据不会占用整个块的大小,写入之后的数据是只读的。
由于数据是只读的,因此数据读取具有一致性,可以多次读取,保证了大吞吐量。
b. NameNode 与 DataNode 的概念和关系,能画出集群中的关系图(画图)
NameNode是管理者,管理文件系统的命名空间,维护文件系统树以及树内的文件和目录,记录每个文件中各个块所在的数据节点信息。唯一。
DataNode 是工作者,根据需要存储并检索数据块,并定期向NameNode发送他们所存储的块的列表。根据需要设置多个。
c. secondaryNameNode工作机制(编辑日志,命名空间镜像查找)
定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。一般运行在另一台单独的物理计算机,因为它在合并过程中需要占用大量的cup资源和与NameNode相同的内存。
d. NameNode与SecondaryNameNode 的区别与联系
SecondaryNameNode 辅助NameNode完成合并工作,并且当NameNode失效时可以替代成为新的NameNode。但是NameNode是始终唯一的。
e. HDFS 数据存储是由哪个程序模块来负责的
f. HDFS 数据多备份的实现机制,数据备份过程是同步的还是异步的
g. hdfs 常用的shell命令集合
(2) HIVE, 工作机制(公司内部叫做tdw)
希望能带着以下问题去学习:
a. Hive内部表和外部表的区别?
内部表的数据生命周期会被Hive控制,删除操作下内部表的数据也会被删除,内部表不方便和其他工作共享数据(不太理解)。
外部表有关键字External表示,hive并不完全拥有外部表的数据,删除外部表只会删除元数据不会删除数据。部分HiveQL语法结构不适用于外部表(具体哪些)。外部表可以理解为对外部数据的引用。
b. Hive表关联查询,如何解决数据倾斜的问题?
c. hive中 sort by ,order by ,cluster by ,distribute by各代表什么意思
d. 数据中的null,在hive底层如何存储
e. Hive有哪些方式保存元数据,各有哪些特点?
f. Hive 中的压缩格式TextFile、SequenceFile、RCfile 、ORCfile各有什么区别?
g. 数据仓库与执行引擎概念的区分
2. Spark 学习,分为几个概念来理解:
(1) 集群概念
a. 在你提交一次spark任务后,整个作业的执行流程都有哪些?即是程序是怎么在spark集群上执行并最终输出结果的。
b. 什么是driver,什么是excutor,他们之间的关系是什么,分别都在哪里运行的。
driver是执行开发程序中的main方法的进程,该进程主要有四个任务:1,把用户程序转化为任务。2,跟踪executor的运行情况。3,为执行器节点调度任务。4,UI展示运行情况。
executor是工作进程,负责在spark作业中运行任务,任务间相互独立。作用:1,负责运行组成spark应用的任务,并将结果返回给驱动器进程。2,通过自己的块管理器为用户程序中要求缓存的RDD提供内存式存储。
他们之间是相互通信的关系,driver根据部署规则可以运行在master或者worker上,executor只能运行在worker上。
c. Spark为什么比 Hive 快
1.spark是基于内存的计算框架,而hive是基于磁盘的计算框架,两者的中间结果存储位置不同。内存的效率高但是可靠性低,磁盘的效率低但是可靠性高。其中spark通过血缘关系和checkpoint保证可靠性。
2.spark的DAG调度相当于优化的mapreduce,主要在于DAG调度尽量减少shuffle,减少中间结果,相比mapreduce减少了磁盘io的时间。此外spark支持将反复使用的数据加载到内存,提高效率。
3.spark是粗粒度资源申请,一般是提前申请足够的资源再开始计算,这样task就不需要等待,但是这样不利于集群资源的充分利用,存在资源浪费,但是速度快。而hive中的mapreduce则是细粒度资源申请,一般是提交完application之后由task自己申请资源再执行,资源利用率高,但是速度慢。此外
(2) 常用概念
a. RDD, DAG, Stage怎么理解?
RDD弹性分布式数据集(Resilient Distributed Dataset),数据集的数据都是平铺的,可以顺序遍历,只读的,可指定缓存在内存,可以通过重新计算得到。一个RDD对象包括5个核心属性:一个分区列表,一个依赖列表,一个计算函数,可选的分区器,可选的计算各分区时优先的位置列表。
DAG是最高层级的调度,为每个job绘制一个有向无环图,跟踪各stage的输出,计算完成job的最短路径,并将Task提交给Task调度器执行
Stage是按照Shuffle分割的Task集合。Shuffle是将不同节点的数据拉取到同一节点。
b. stage, job, task,application 这几个概念以及他们之间的关系。
一次RDD的Action对应一个job,一个job启动多个stage,一个stage包括多个task。apllication泛指运行在spark上的程序。task是执行器里面最小的单元。
c. 宽依赖、窄依赖怎么理解?(画图补充)
宽依赖:父分区对应多个子分区
窄依赖:父分区对应一个子分区
d. Transformation和action是什么?区别?举几个常用方法(了解算子)
Transformation是指由一个rdd生成新rdd的过程,并且所有的Transformation都只是生成了rdd之间的计算关系与计算方法,并没有开始真正的计算。
map(),flatmap(),groupbykey(),reducebykey(),sortbykey(),filter()
action操作不再生成新的rdd,它是实际计算的执行者,它会向集群正式提交计算请求。
count(),collect(),foreach(),take(),first(),reduce()
e. Spark streamming 工作流程是怎么样的,和Storm比有什么区别
1.客户端提交作业后启动driver
2.driver与多个executor沟通,每个executor都以线程的方式运行task,众多task中至少有一个receiver task。
3.receiver task接收到数据后,根据批处理实时间隔生成block,并返回block ID给driver,block则备份到另一个executor上
4.receiver task维护汇报给driver的block ID
5.driver定时启动jobgenerator,并根据dstream的逻辑关系生成逻辑RDD,然后创建jobset,交给jobscheduler
6.jobscheduler负责调度jobset,交给dagscheduler,dagscheduler根据逻辑rdd,生成相应的stages,每个stage包含多个task。
7.taskscheduler负责把task调度到executor上,维护task运行状态。
8.当task、stage、jobset都完成,一个batch才算完成。
与storm的对比:
1.实时计算模型:
storm是来一条消息处理一条,纯实时。 spark streaming是准实时,来一个时间段的数据收集起来,作为一个rdd,再处理。
2.实时计算延迟度:
storm是毫秒级,spark streaming是秒级
3.吞吐量:
storm低吞吐量,spark streaming是高吞吐量
4.事务机制:
storm支持事务,并很完善,spark streaming支持事务,但不完善
5.健壮性/容错性:
storm容错性很强大,由zookeeper和acker支持。spark streaming容错性一般,由checkpoint和wal保证
6.动态调整并行度:
storm支持,spark streaming不支持。
书籍推荐:《Spark最佳实践》建议学习这本书。
业务上:
先买 《计算广告》。
了解清楚一些基本概念:
CPC,CPM,CPA 都是什么意思?
CTR,CVR分别代表什么? 等等,基本概念必须清楚,多用用 腾讯视频和腾讯新闻,平时留意下广告出现的位置--广告位。
业务上很多东西需要来了之后,边做边了解。