天天看点

hadoop、hive、spark、hbase综述hadoop综述spark综述habase综述

hadoop综述

1    namenode

    一般在master节点上,用来存储文件和目录的所有元数据信息    

    常见面试问题:"namenode和datanode可以在同一个节点吗?"

    -- 原理上可以在一个节点,但是这样做有很多弊端,比如datanode是数据的实际执行节点,对资源的占用会影响namenode节点的性能;

2    datanode

    一般在slave节点上,用来存储实际数据    

3    secondary namenode

    namenode的副本节点,定期通过editlog合并namenode的变化。

    常见面试问题:namenode的主从节点,以什么形式合并变化?

    -- 通过editlog,即是编辑日志

4    jobtracker

    运行在namenode上,是负责提交和运行mapreduce job的守护程序,会向tasktracker分配任务

    一句话总结,即是jobtracker存在于namenode上,向tasktracker分配任务

    常见面试问题:jobtracker类似spark里面的什么?

    -- 类似driver,tasktracker类似spark里面的worker,spark也是driver向worker分配具体任务,然后任务执行在worker的executor上

5    tasktracker

    运行在datanode上,是具体的执行计算的节点    

6    resourcemanager

    yarn上负责资源分配和调度    

    常见面试问题:RM、NM 和 NN、DN比较

    -- RM和NM是针对yarn而言的资源分配和节点管理,NN和DN是相对于hadoop而言,不是一种体系的概念,不好一起比较;

7    nodemanager

    slave节点,顾名思义,是用来管理节点的,检测启动了应用程序的容器,向resourcemanager报告    

8    jobhistoryserver        

    维护有关的mapreduce工作中的应用终止后的信息    也即是MR应用终止后,应用终止后的信息会保存在jobhistoryserver中;

9    什么是主动和被动的namenodes    

    既是主备namenode的另一种叫法,namenodes的主动被动,既是主备的意思

10    hadoop集群可以删除或者添加节点嘛,怎么添加    

    这都是针对数据节点而言,数据节点崩溃可以删除或者新增    

    添加的方法参见hadoop官网

11    两个客户端尝试访问相同的HDFS文件,会发生什么    

    HDFS只支持独占写入,所以会接受一个拒绝一个    

    -- HDFS的独占写入特性,但可以并发的读

12    解释报错:文件只能被复制到0节点,而不是1    

    这是0节点没有任何可用的datanode    

    文件不能被复制到某节点的报错:一般说明某节点没有任何可用的datanode

13    hdfs关闭安全模式    

    hadoop dfsadmin -safemode        

    hdfs的系统操作命令,dfsadmin

14    如何定义hdfs的block    

    dfs.block.size    

    在HDFS-site.xml中    

    -- hdfs的block的作用:block是hdfs中最基本的存储单位

15    hadoop2默认block大小    

    128M        

16    rack awareness    

    既是副本放置策略    

    若值为3:

    -- 策略既是数据的每个块,两个副本在一个机架中,第三个副本存在于不同的机架;

    -- 副本放置策略:若副本为3,两个同机架,一个跨机架

17    为什么hadoop适用于大型数据集,而不是适用具有大量的小文件的应用程序?    

    因为namenode很昂贵,如果大量的小文件过多的消耗了namenode,肯定不如一个单独文件中有大量数据        

    namenode是存储文件和目录的所有元数据信息的节点,如果文件数量很多的话,那对namenode的消耗会很大,因为无论多小的文件都要对应一个元数据信息,多大的文件也要对应一个元数据信息;

18    speculative running    

    因为一个节点运行任务较慢,冗余另一个节点让两个节点同时执行同一任务,这两个程序先完成的被接受,后完成的被杀死    

    前面描述的这个过程称为:specculative running,即是投机执行,如果一个节点执行缓慢,会复制一个同样的节点来执行同一个任务,相同的被接受,不同的被杀死;

19    hadoop集群中实现HA    

    使用QJM或者NFS共享存储        

20    为什么在HDFS,读是并行的,但写不是    

    HDFS的读可以MR分割成块读取,但写MR并不能并行;    

    -- 导致spark的读也是并行的(细粒度),但写是粗粒度    

    -- HDFS的读是并行的,写是独占写入,前面的两个文件同时写一个HDFS的原理即是来源于此

    -- 类似spark读是细粒度,写是粗粒度;

21    报错:访问hdfs报错:连接被拒绝,java异常    namenode不工作了    

    可能是namenode是在安全模式

    或者namenodeIP地址改变了

    hdfs连接异常报错:一般是namenode报错,所以namenode和hdfs的联系较为紧密;

22    zookeeper在集群中的作用    

    管理集群、hadoop节点之间的协调、元数据的同步        

23    什么是hive中的serdr    

    一种序列化和一个反序列化的组合    

    -- hive使用serdr来读取和写入表行    

    SerDr说明hive如何去处理一条记录,包括Serialize/Deserilize两个功能

    Serialize把hive使用的java object转换成能写入hdfs的字节序列,或者其他系统能识别的流文件

    Deserilize把字符串或者二进制流转换成hive能识别的java object对象

24    hive存储表中数据的默认位置是    

    HDFS://NameNode/用户/hive/warehouse        

    hive,hdfs的元数据信息都存在hdfs的namenode文件夹对应用户下面;

25    hbase中的WAL和Hlog    

    WAL:预写日志    

    记录数据发生的所有更改,在服务器发生故障时,WAL作为生命线检索丢失的数据;    

    -- WAL是hbase的生命线

spark综述

1    spark怎么实现HA

    spark master使用zookeePer做HA    

    并且把元数据在ZK中保存    

    -- hadoop用NFS做HA,spark master使用ZK做HA    

2    spark master HA主从切换不会影响集群已有作业运行,为什么?    

    因为不需要再和master通讯    

    程序的资源申请的过程先于程序调度的过程,程序在运行之前,已经申请过资源了,driver和Executors通讯,不需要和master进行通讯的

    -- 所以master节点换了,也不会影响现有节点,只要excutor的节点没挂就可以;    

3    什么是粗粒度分配,什么是细粒度分配    

    粗粒度,启动时就分配好资源,后续就使用这个分配好的资源,我称之为大方分配

    细粒度    用资源的时候分配,用完就立即收回,我称之为小气分配

4    spark有哪些常见的稳定版本    

    1.6或者2.0        

5    driver的功能(有点像jobtracker)    

    作业的主进程,具有main函数,并且有sparkcontext,是程序的入口    

    作用:

    负责向集群申请资源

    向master注册信息

    作业调度

    作业解析

    生成stage

    调度task到executor上

    包括DAGScheduler,TaskScheduler"    

6    work的主要工作(有点像jobtracker)        

    管理当前节点内存、CPU使用情况;

    接受master分配过来的资源指令

    通过executorrunner启动程序;

    不会汇报当前信息给master,这是driver的工作;

    不会运行程序的代码,那是excutor的工作;"    

7    什么是rdd的宽依赖和窄依赖    

    宽依赖    多个子RDD依赖同一个父RDD    

    窄依赖    一个子RDD依赖一个父RDD    

8    cache后面不能接其他算子    

    可以,但接了算子之后,起不到缓存应有的效果

    因为其他算子相当于读了cache的内容,重新触发了cache;        

9    reducebykey 和 reduce两个算子    

    reduceByKey不是action,reduce是action        

10    数据本地化是在哪个环节确定的    

    是由具体的task在哪台机器上运行确定的        

11    RDD的弹性表现在哪几点    

    自动进行内存和磁盘的存储切换 -- 内存和磁盘的弹性

    容错重试 -- 容错的弹性

    分片的弹性 -- 分片的弹性

12    RDD有哪些缺陷    

    不支持细粒度的写和更新操作,spark写数据是粗粒度的,但读数据是细粒度的;

    不支持增量迭代计算,flink支持;-- flink相比于spark的优势:支持增量迭代        

13    spark的shuffle过程    

    比如groupByKey就会有一个shuffle过程,通过键的哈希值shuffle;        

14    如何从kafka中获取数据    

    基于receiver的方式:是kafka的高层次Consumer API;

    基于Direct方式:周期性的查询kafka来获得每个topic+partition最新的offset,当处理数据的job启动时,就会使用kafka的简单的consumer api来获取kafka指定的offset范围的数据;"    offset: 消息序列号,一个连续的用于定位被追加到分区的每一个消息的序列号,最大值为64位的long大小,19位数字字符长度    kafka中各关键词的解释:https://blog.csdn.net/sand_clock/article/details/68486599

15    kafka中数据倾斜解决方案    "首先是定位数据倾斜:OOM或者是任务执行缓慢,看日志或者看WebUI

    解决:

    1)、广播小表

    2)、分拆数据倾斜部分为几个部分

    3)、增大并行度

    4)、自定义partitioner,分散key的分布"        

16    spark中数据的位置是谁管理的    

    是由blockmanager进行管理        

17    spark如何处理不能被序列化的对象    

    将不能序列化的对象封装成object即可        

18    spark程序执行,有时候默认为什么产生很多task,怎么修改task执行个数?    

    task和partion是一一对应的,只要设置partition个数即可;    

    -- 注意:task和partition是一一对应的    

19    为什么spark application没有获得足够的资源,job就开始执行了    

    因为task的excutor申请资源和程序执行是两个过程,一般是先资源申请,然后程序执行,此时有可能是这两个过程异步了;    

20    什么叫spark持久化    

    通俗解释既是落了内存        

21    为什么要进行序列化    

    序列化可以减少数据的体积,减少存储空间

    但坏处是还要反序列化

habase综述

1    hbase读写    

    github pysaprk+hbase 工具类:https://github.com/zenyud/Pyspark_ETL    

    主要原理:

        hbase-client用来连接客户端

        hbase-server用来进行hbase的各种操作"

2    hbase查询            

    还可以使用上面的程序查询

3    hbase和mysql(等其他关系数据库的写入写出)的实现

    https://segmentfault.com/a/1190000013928073

    https://blog.csdn.net/thinkpadshi/article/details/77628346

    1)、除了直接用程序对hbase进行读取操作之外,也可以先把数据写入关系型数据库,然后用sqoop实现读取;

    2)、一般,mysql的表名对应hbase的column-family,mysql的主键对应hbase的rowkey

        mysql表名 -- 类似hbase的列簇名

        mysql的主键 -- 类似hbase的rowkey

        -- 上面两点可以从mysql数据导入hbase看出来;

    3)、可以使用sqoop完成hbase和关系型数据库的互相传导;

继续阅读