大数据面试题2

1.HDFS写文件流程

  • 1、客户端向NameNode发送写文件请求。
  • 2、NameNode检查是否已存在文件,检查客户端是否有写权限。若通过检查,在名称空间中创建一个新的文件。
  • 3、文件系统返回一个输出流对象(DFSOutputStream),客户端用于写数据。
  • 4、客户端将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,第一个节点将数据块发送给第二个节点,第二个节点将数据块发送给第三个节点。
  • 5、三个数据节点存储数据成功后会向客户端发送写入成功,客户端会通知NameNode写入完毕。
  • 6、关闭输出流。

2.HDFS读文件流程

  • 1、客户端向NameNode发送读文件请求,NameNode返回文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址
  • 2、文件系统返回FSDataInputStream给客户端,用来读取数据
  • 3.FSDataInputStream连接保存次文件第一个数据块的最近的数据节点,data从数据节点读到客户端
  • 4、当此数据块读取完毕是,FSDataInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点
  • 5、当客户端读取数据完毕后,关闭FSDataInputStream
  • 6、在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点
  • 7、失败的数据节点将被记录,以后不再连接

3.Yarn的运行原理

  • 1、客户端向RM中提交程序
  • 2、RM向NM中分配一个container,并在该container中启动AM
  • 3、AM向RM注册,这样用户可以直接通过RM查看停用程序的运行状态
  • 4、AM向RM申请和领取资源,资源的协调通过异步完成
  • 5、AM申请到资源后,便与对应的NM通信,要求他启动任务
  • 6、NM为任务设置好运行环境(包括环境变量,jar包,二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
  • 7、各个任务向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务
  • 8、应用程序运行完成后,AM向RM注销并关闭自己

4.hive的运行原理

  • hive 通过给用户提供一系类的交互接口,接收到客户的指令(SQL),使用自己的Driver,结合元数据(Metstore),将这些指令翻译成MapReduce,提交到Hadoop集群中执行,最后,将执行返回结果输出到用户交互接口(将SQL语言中的select ,where ,group等很多语句用MapReduce写成模板,所有的模板分装到hive中,用户书写的SQL 语句与模板的mapreduce进行匹配,运行MapReduce,结果)
    • 1、用户通过一些交互接口或者JDBC 进行SQL语句书写
    • 2、任务提交给Driver
    • 3、SQL Parser解析器 将hiveql转换为抽象语法树AST,
    • 4、Physical Plan 编译器 然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划
    • 5、Query Optimizer 优化器 对逻辑执行计划进行优化
    • 6、Execution 执行器 将逻辑执行计划转化成物理执行计划(mapreduce)
    • 7、取得并返回执行结果

5.NameNode和SecondaryNameNode的工作原理

  • 1、fsimage是namenode内存中元数据序列化形成的文件
    edits记录客户端更新元数据信息的每一步操作
  • 2、第一次启动namenode格式化后,创建fsimage和edits文件,如果不是第一次启动,直接加载编辑日志和镜像文件到内存
  • 3、客户端对元数据进行增删改的请求
  • 4、namenode记录操作日志,更新滚动日志
  • 5、namenode在内存中对数据进行增删改
  • 6、secondarynamenode 询问namenode是否需要chkpoint
  • 7、secondarynamenode请求执行checkpoink
  • 8、namenode滚动正在写的edits文件
  • 9、将滚动前的编辑日志和镜像文件拷贝到secondarynamenode
  • 10、生成新的镜像文件fsiamge.checkpoint
  • 11、拷贝fsimage.checkpoint到namenode
  • 12、namenode将fsiamge.chkpoint重新命令成fsimage

6.shuffle的运行原理

  • MapReduce中,map阶段处理的数据如何传递给reduce阶段,是MapReduce框架中最关键的一个流程,这个流程就叫shuffle。shuffle是洗牌,发牌,核心机制是:数据分区,排序,缓存。具体来说就是将MapTask输出的处理结果数据,分发给reduceTask,并在分发的过程中,对数据进行了分区和排序。
  • 1、shuffle运行流程:(减少IO操作,一次性写入)
    • 1、map task 收集我们的map()方法输出的kv对,放到内存缓冲区中
    • 2.、从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件
    • 3、多个溢出文件被合并成大的溢出文件
    • 4、在溢出过程中,及合并的过程中,都要调用partitioner进行分组和针对key进行排序
    • 5、reduce task根据自己的分区号,去各个map task 机器上取相应的结果分区数据
    • 6、reduce task会取到同一个分区的来自不同map task的结果文件,reduce task会将这些文件再进行合并(归并排序)
    • 7、合并成大文件后,shuffle过程也就结束了,后面进入reduce task 的逻辑运算过程(从文件中取出一个一个的键值对group,调用用户自己定义的reduce()方法
  • 2.Shuffle的运行机制(Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle)
    • 1、map端输出文件进入环形缓冲区(80% 100M 为阈值),就溢出文件
    • 2、分区
    • 3、排序
    • 4、combine 对多次溢出的文件进行归并排序,对每个mapTask的输出进行局部的汇总
    • 5、groupingComparator 分组(辅助排序) 对reduce端的shuffle根据某一个或者某几个进行分组

7.yarn三种调度器及其原理

  • 1、FIFO Scheduler 将所有的application放到队列中,先按照作业的优先级高低,再按照到达时间的先后,为每个app分配资源。一个app需要的资源被满足了,如果还剩下了资源并且满足第二个app需要的资源,那么就为第二个app分配资源。不适合共享集群,如果有大的app需要很多资源,那么其它app可能会一直等待.如果有一个很大的job1,它先提交,并且占据了全部的资源。那么job2提交时发现没有资源了,则等待job1执行结束,才能获得资源执行。
  • 2、Capacity Scheduler 用于一个集群中运行多个application的情况,目标是最大化吞吐量和集群利用率。capacity scheduler 允许将整个集群的资源分成多个部分,每个组织使用其中的一部分,即每个组织有一个专门的队列,每个组织的队列还可以进一步划分成层次结构,从而允许组织内部的不同用户组使用
    每个队列内部,按照FIFO的方式调度Application.
  • 3、Fair Scheduler 允许应用在一个集群中公平的共享资源。默认情况下,fair scheduler的公平调度只基于内存,也可以配置成基于memory和cpu。当集群中只有一个app提交时,他独占集群资源。当有新的app提交时,空闲的资源被新的app使用,这样最终每个app就会得到大约相同的资源。可以为不同的app设置优先级,决定每个app占用的资源百分比。fair scheduler可以让短的作业在合理的时间内完成,而不必一直等待长作业的完成

8.sqoop的使用

  • 1、将数据库的数据导入到hdfs上
    sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 --table trade_detail --columns ‘id, account, income, expenses’
    根据个人设置不同修改对应属性
    –connect ip地址,主机名,
    –username用户名,
    –password用户密码,
    –table表名,
    –columns 表中字段,
    –target-dir 输出路径,
    –fields-terminated-by 指定数据分隔符,
    eg:sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 --table trade_detail --target-dir ‘/sqoop/td’ --fields-terminated-by ‘\t’
    –m 指定map数量,
    eg:sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 --table trade_detail --target-dir ‘/sqoop/td1’ --fields-terminated-by ‘\t’ -m 2
    –where 增加where条件,条件用引号扩住,
    eg:sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 --table trade_detail --where ‘id>3’ --target-dir ‘/sqoop/td2’
    –query 增加query语句
    eg:sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123
    –query ‘SELECT * FROM trade_detail where id > 2 AND $CONDITIONS’ --split-by trade_detail.id --target-dir ‘/sqoop/td3’
  • 2、将hsfs上的数据导出到数据库
    sqoop export --connect jdbc:mysql://192.168.8.120:3306/bigdata30 --username root --password 123 --export-dir ‘/td3’ --table td_bak -m 1 --fields-terminated-by ‘,’
  • 重点:不管是从hsfs上导出数据到数据库,还是从数据库导入数据到hdfs,sqoop所用属性相同,可根据需要自行修改添加。

9.hdfs常用操作命令

  • ls,-cat,-mkdir,-put,-get,-copyFromLocal,-copyToLocal,-mvFromLocal,-mv,-cp
    -appendToFile,-chgrp,-chown,-chmod,-tail

10.HDFS HA 高可用

  • 通过双NameNode消除单点故障
    Hdfs HA 通过配置active/standby 两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如果机器崩溃或机器需要升级维护,这是可通过此种方法将NameNode很快的切换到另一台机器

    • 1、元数据管理方式需要改变
      内存中各自保存一份元数据
      Edits日志只有active状态的NameNode节点可以做写操作
      两个NameNode都可以读取Edits
      共享的Edits放在一个共享存储中管理
    • 2.需要一个状态管理功能模块
      实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover切换,切换时需要放置brain split现象的发生
    • 3、必须保证两个NameNode之间可以ssh无密登录
    • 4、隔离(Fence),即同一时刻只有一个NameNode对外服务

11.hadoop数据压缩

  • 压缩是提高hadoop运行效率的一种优化策略
    通过对Mapper,Reducer运行过程的数据进行压缩,以减少磁盘IO,提高MR程序运行速度
    注意:采用压缩技术减少了磁盘IO,但同时也增加了CPU运算负担。所以,压缩特性运用得当能提高性能,但运用不当也可能降低性能
    压缩基本原则:
    • 1、运算密集型的job,少用压缩
    • 2、IO密集型的job,多用压缩

12.MapReduce优化方法

  • MapReduce优化方法主要从六个方面考虑:
    数据输入,Map阶段,Reduce阶段,IO传输,数据倾斜问题和常用的参数调优
    数据输入:(1)合并小文件,在执行mapreduce之前进行小文件的合并,大量的小文件会产生大量的Map任务,增大Map任务的装在次数,而任务的装载比较耗时,会导致MR运行较慢(2)采用CombineTextInputFormat所谓输入,解决输入端大量小文件
Map阶段:
  • 1、减少溢写次数,从而减少磁盘IO
  • 2、减少合并次数,增大merge的文件数目,减少Merge的次数,从而缩短MR处理时间
  • 3、在map之后,不影响业务逻辑的前提下,先进行combine处理,减少磁盘IO
Reduce阶段:
  • 1、合理设置Map和Reduce数,均不能设置太少,会导致Task等待,延长处理时间,太多,会导致Map,Reduce竞争资源,造成处理超时等错误
  • 2、设置Map,Reduce共存,使Map运行一段时间后,Reduce也开始运行,减少Reduce的等待时间
  • 3、规避使用Reduce,因为reduce在用于链接数据集的时候将会产生大量的网络消耗
IO传输:
  • 1、采用数据压缩的方式,减少网络io的时间。安装Snapy和LZO压缩编码器
  • 2、使用SequenceFile二进制文件
    数据倾斜:数据频率倾斜,某个区域的数据量要远远大于其他地区
    数据大小倾斜:部分记录的大小远远大于平均值
    解决方法:
  • 1)、抽样和范围分区,可以通过对源数据进行抽样得到的结果来预设分区边界值
  • 2)、自定义分区
  • 3)、combine可以大量减少数据倾斜,在可能的情况下,combine的作用就是聚合精简数据集
  • 4)、采用Map join ,尽量避免Reduce Join

13.ZooKeeper工作机制

  • 高可用的分布式数据管理和协调框架,并且能够很好的保证分布式环境中数据的一致性
    ZooKeeper负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,ZooKeeper就将负责通知已经在ZooKeeper上注册的观察者做出相应的反映
    ZooKeeper = 文件系统+通知机制
    应用场景:统一命名服务,统一配置管理,统一集群管理,服务器节点动态上下线,软负载均衡等等

14.ZooKeeper特点

  • 1、ZooKeeper:一个领导者(Leader),多个跟随者(Follow)
  • 2、集群中只要有半数以上的节点存活,ZooKeeper集群就能正常服务
  • 3、全局数据一致,每个Server保存一份相同的数据副本,客户端无论连接到哪一个Server,数据都是一致的
  • 4、更新请求顺序进行,来自同一个客户端的更新请求按其发送顺序依次进行
  • 5、数据更新原子性,依次数据更新要么成功,要么失败
  • 6、实时性,在一定时间范围内,客户端能读到最新数据

15.ZooKeeper选举机制

16.什么是大数据

  • 大数据是指在一定时间内无法用软件进行捕捉,管理,处理的数据集合
    主要解决的是海量数据的存储和计算问题

17.大数据特点

  • 大量,高速,多样,价值密度低

18.hadoop是什么

  • 主要解决,海量数据的存储和海量数据的分析计算问题

19.hadoop的优势(4高)

  • 1、高可靠性:hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失
  • 2、高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点
  • 3、高效性:在MapReduce的思想下,hadoop是并行工作的,以加快任务处理速度
  • 4、高容错性:能够自动将失败的任务重新分配

20. hadoop1.x和hadoop2.x的区别

  • Hadoop1.x由mapreduce,hdfs和common(辅助工具)组成,mapreduce负责计算+资源调度,hdfs负责数据存储。在hadoop2.x新增了yarn负责资源调度,mapreduce只负责计算

21.什么是hdfs

  • Hdfs 是一个分布式文件系统,用来存储文件,通过目录树来定位文件
    Hdfs适合一次写入,多次写出的文件场景,且不支持文件的修改,适合用来做数据分析,并不适合用来做网盘应用

22.hdfs的优点

-1、高容错性
数据自动保存多个副本,他通过增加副本的形式,提高容错性。当某一个副本丢失后,他可以自动恢复

  • 2、适合处理大数据
    数据规模:能够处理数据达到GB,TB,甚至PB级别的数据
    文件规模:能够处理百万以上的文件数量,数量相当之大
  • 3、可构建在廉价机器上,通过多副本机制,提高可靠性

23.hdfs的缺点

  • 1、不适合低延迟数据的访问,比如毫秒级别的存储数据是做不到的
  • 2、无法高效的对大量小文件进行存储。存储大量小文件的话,会占用NameNode大量内存来存储文件目录和块信息。这是不可取的,因为NameNode的内存总是有限的
    小文件的存储的寻址时间会超过读取时间
  • 3、不支持并发写入,文件随机修改。一个文件只能有一个写,不能由多个线程同时写
  • 4、仅支持数据追加,不支持数据随机修改

24.hdfs中块的大小为什么设置成128M?

  • Hdfs中平均寻址时间为10ms
    寻址时间是传输时间的1%时为最佳状态,所以最佳传输时间为1s,目前磁盘的传输速率普遍为100mb/s,因此100mb/s*1s=100mb,因此设置块大小为128mb

25.hdfs中块为什么不能设置太大,为什么也不能设置太小

  • 如果块设置过大,传输时间过大超过寻址时间,导致处理数据是变得非常缓慢
    一方面,从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢。另一方面,mapreudce中的map任务通常一次只处理一个块中的数据,如果块过大,运行速度也会变慢
    如果块设置过小,会增大寻址时间
    一方面,存储大量小文件会占用NameNode大量内存来存储文件目录和块信息,而namenode的内存是有限的,不可取
    另一方面,文件块过小,寻址时间增大,导致 程序在找block

26.集群安全模式

  • 查看安全模式状态:hdfs dfsadmin –safemode get
    进入安全模式:hdfs dfsadmin –safemode enter
    离开安全模式:hdfs dfsadmin –safemode leave
    等待安全模式:hdfs dfsadmin –safemode wait

27.什么是mapreduce

  • Mapreduce是分布式运算程序的编程框架,它的核心功能是将用户编写的业务逻辑代码和自带默认组件组合成完整的分布式运算框架,并发运行在hadoop集群上

28.mapreduce优点

  • 1、preduce易于编程,他简单的实现一些接口,就可以完成一个分布式程序
  • 2、良好的扩展性,当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展他的计算能力
  • 3、高容错性,其中一台机器挂掉了,它可以把这上面的计算任务转移到另一个节点上运行,不至于这个任务失败
  • 4、适合PB级别以上海量数据的离线处理

29.Mapreduce的缺点

  • 1、不擅长实时计算
  • 2、不擅长流式计算
  • 3、不擅长有向图计算

30.mapreduce的运行原理

  • 输入,map,shuffle,reduce,输出
    输入文件会被切分成多个块,每一个块都有一个maptask
    Map阶段的输出结果会先写到内存缓冲区,然后由缓冲区写到磁盘上,当缓冲区达到一个阈值的时候就会往磁盘上写,在磁盘上写的时候会进行分区和排序
    相同的分区的数据会进入同一个reduce,这一步中会从map中抓取某一分区的数据,在抓取的过程中伴随着排序合并
    Reduce输出

31.什么是yarn

  • Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台

32.什么是hbase

  • Hbase是一个高可靠性,高性能,面向列,可伸缩的分布式存储

33.hbase的特点

  • 海量存储、极易扩展、高并发、稀疏
    列式存储:hbase是根据列族储数据的,列族下面可以有很多的列,列族在创建表的时候就必须指定

34.Spark的内置项目

  • Spark core:实现了spark的基本功能,包含任务调度,内存管理,错误恢复与存储系统交互等模块。Spark core中还包含了对弹性分布式数据集(RDD)的API定义
    Spark sql:是spark用来操作结构化数据的程序包。通过spark sql,我们可以使用sql或者hive版本的sql来查询数据,spark支持多种数据源,比如hive表、parquet以及Jason
    Spark streaming:是spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API,并与spark core中的API高度匹配
    Spark mllib:提供常见的机器学习(ML)功能的程序库,包括分类,回归,聚类,协同过滤等。
    还提供了模型评估,数据导入等额外的支持功能

35.spark特点

  • 快,与mapreduce相比,spark基于内存的运算要快100倍左右
    易用,spark支持java、python和scala的api,还支持超过80种的算法,使用户可以快速构建不同的应用。而spark支持交互式的python和scala的shell,可以非常方便的在这些shell中使用spark解决验证问题
    通用,spark提供统一的解决方案。Spark可以用于批处理,交互式查询,实时流处理,机器学习和图计算。这些不同类型的处理都可以在同一个应用中无缝使用。
    兼容性,spark可以非常方便的与其他开源产品进行融合,可以使用yarn作为资源调度器,可以处理所有Hadoop支持的数据

36.什么是RDD

  • Rdd是分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可进行并行计算的集合。在spark中,对数据的所有操作都不外乎创建rdd,转化已有rdd,
    以及调用rdd操作进行求值。每个rdd都分为多个分区,这些分区运行在集群中的不同节点上。
    RDD支持两种操作,转化操作和行动操作。转化操作是返回一个新的RDD的操作,比如map和filter,而行动操作则是向驱动程序返回结果或把结果写入外部系统的操作,比如count和first.
    Spark采用惰性计算模式,RDD只有第一次在一个行动操作中用到时,才会真正计算

37.什么是hive

  • 用于解决海量结构化日志的数据统计
    .hive 是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类sql查询功能
    本质是将hql转化为mapreduce

38.Hive中的 order by、sort by 、 Disrtubutited by 、 Cluster by 区别

  • 1、Order by 会对输入做全局排序,因此只有一个reducer,会导致当数据规模较大时,需要较长的计算时间
  • 2、Sort by 局部排序(区内排序)会在数据进入reducer前进行排序
  • 3、Distribute by 分区,(输入时便进行了分区)按照指定的字段对数据进行划分输出到不同的reducer中
  • 4、Cluster by 除了具有distribute by 的功能还具有sort by 的功能,但排序只能是升序排序。
    当distribute by 和sort by 字段相同时,可以使用cluster by 方式

39. 将文件导入到hive表中

  • Load data local inpath “xxxxxxx” overwrite into table 表名 partition(xx=”xx”)
  • 1、将查询的结果导出到本地
    hive (default)> insert overwrite local directory ‘/opt/module/datas/export/student’
    select * from student;
  • 2、将查询的结果格式化导出到本地
    hive(default)>insert overwrite local directory ‘/opt/module/datas/export/student1’
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’ select * from student;
  • 3、将查询的结果导出到HDFS上(没有local)
    hive (default)> insert overwrite directory ‘/user/hadoop/student2’
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’
    select * from student;

40. Hive的排序方式

  • Group by 通常与聚集函数使用
  • 1、RANK() 排序相同时会重复,总数不会变 ,跳跃排序的,两个第二名后面是第四名
  • 2、DENSE_RANK() 排序相同时会重复,总数会减少,连续排列,两个第二名仍然跟着第三名
  • 3、ROW_NUMBER() 会根据顺序计算,没有重复值的排序(即使两条记录相等,也是不重复的)

41.hive 的分桶

  • 1、创建分桶表 create table stu_buck(id int) clustered by(id) into 4 buckets row format delimited fields Ternminaled by ‘\t’;
  • 2、创建对应的子表
    create table stu(id int, name string) row format delimited fields terminated by ‘\t’;
  • 3、设置对应的属性 set hive.enforce.bucketing=true;
    set mapreduce.job.reduces=-1;
  • 4、通过子查询方式插入
    Insert into table stu_ buck select id from stu

42. hive内部表和外部表的区别

  • 1、创建表:
    外部表创建表的时候,不会移动数据到数据仓库目录中,只会记录表数据存放的路径
    内部表会把数据复制或剪切到表的目录下
  • 2、删除表:
    外部表在删除表的时候只会删除表的元数据信息,不会删除表数据
    内部表删除时会将元数据信息和表数据同时删除
  • 3、相互转换
    Alter table student set tblpropertities(‘EXTERNAL’=’TRUE’); or EXTERNAL=FALSE

43.hive有哪些复合数据类型

  • Map:提供了key-value存储
    Struct:不同数据类型元素的集合
    Array:同类型元素的集合
    Uniontype:它代表一个可以具有属于你所选择的任何数据类型的值的列

44.hive分区的好处

  • 可以更快的执行查询,当使用where子句查询时只扫描特定的子目录,而不是扫描整个
    Hive的分区实质就是对文件进行分目录,大文件切分,where查询方便,提高查询效率

45. hive 分区跟分桶的区别

  • 分区针对的是数据的存储路径;分桶针对的是数据文件。

46. 不进入hive的交互窗口执行sql语句

  • Hive –e

47. 执行脚本中sql语句

  • Hive –f

48.hive 命令

  • 创建表
    Create table test() row format delimated fields terminated by ‘\t’
    导入文本数据到测试表
    load data local inpath ‘/opt/module/datas/test.txt’into table test
    显示数据库
    Show databases
    切换当前数据库
    use db_hive;
    删除空数据库
    drop database db_hive2;
    根据查询结果创建表
    Create table表名 as select xx,xx from 表名
    根据已经存在的表结构创建表
    Create table 表名 like 表名
    查询表的类型
    Desc formatted 表名
    创建分区表
    Create table 表名()partitioned by (xx,数据类型)
    查询分区表中数据
    Select * from 表名 where 分区名=“xxx”
    增加分区
    Alter table 表名 add partition(xx=”xx”),partiotion(xx=”xx”)
    删除单个分区
    Alter table 表名 drop partition(xx=”xx”)
    查看分区表有多少分区
    Show partitions 表名
    查看分区表结构
    Desc formatted 表名
    重命名表
    Alter table 旧表名 rename to 新表名
    删除表
    Drop table 表名
    基本插入数据
    Insert into|overwrite table 表名 partition(xx=’xx’) values(xx,xx)
    基本模式插入(根据单张表查询结果)
    Insert into|overwrite table 表名 partition(xx=’xx’) select xx,xx from student where….
    将查询的结果导出到本地
    Insert overwrite local directory ‘xxxxxx’ select * from xxx

49.k-means算法

  • 1、k-means算法流程
    从数据集中任意选择k个对象作为初始簇的中心
    根据数据到聚类中心的位置,对每个对象进行分配
    更新聚类中心的位置,即计算每个簇中所有对象的质心,将聚类中心移动到质心位置
    直到聚类中心不再发生变化
  • 2、k值的选择
    K值是聚类结果中子集的数量,k为几,就有几个质心
    • 1)手肘法:
      手肘法的核心是SSE,误差平方和
      Ci 是第i个簇,p是Ci中的样本点,mi是ci的质心(ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏
      手肘法的思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE会逐渐变小。并且当k小于真实聚类数时,K的增大会大幅度增加每个簇的聚类程度,故SSE的下降幅度会很大,而当K到达真实聚类数时,再增加k得到的聚合程度回报会迅速变小,故SSE的下降幅度会骤减,然后随着k的继续增大而趋于平缓。也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。
    • 2)轮廓系数法
      该方法的核心指标是轮廓系数,某个样本点xi的轮廓系数定义如下:
      其中 a是xi与同簇的其它样本的平均距离,成为凝聚度,b是xi与最近簇的所有样本的平均距离,称为分离度。而最近簇的定义为用xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择xi最近的一个簇作为最近簇
      求出所有样本的轮廓系数后再求均值就得到了平均轮廓系数,平均轮廓系数的取值为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。平均轮廓系数最大的k值便是最佳聚类数
  • 3、初始质心的选择
    • 1)将全部数据随机的分为k类,计算各类的重心,将这些重心作为每类的代表点

    • 2)密度法选择代表点。这里的密度是指具有统计学性质的样本密度。一种求法是对每个样本确定大小相等的邻域(如同样半径的超球体),统计落在其邻域的样本数,成为该点的“密度”。在得到样本“密度”后,选“密度”最大的样本点作为第一个样本点,然后人为规定在该代表点多远距离外的区域内寻找次高“密度”的样本点作为第二个代表点,依次选择其它代表点。使用这种方法的目的是避免代表点过分集中在一起

    • 3)从k-1个子集的聚类划分问题的解中产生k子集聚类划分问题的代表点。其具体做法是先从1个子集聚类的解中寻找2个子集聚类划分的代表点,再依次增加一个聚类代表点,将样本首先看做一个聚类,计算其均值,然后寻找与该均值相距最远的点,由该点及原均值点构成两个聚类的代表点。以此类推,对已有k-1个聚类代表点寻找一个样本点,使该样本点距所有这些均值点的最小距离为最大,这样就得到了第k个代表点

    • 4)距离的计算方法

      • 1、欧式距离
      • 2、 马氏距离
      • 3、余弦相似度
        余弦相似性通过测量两个向量的夹角的余弦值来度量他们之间相似性。0度角的余弦值是1,而其他任何度角的余弦值都不大于1,并且最小值是-1.从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦的相似度为1,两个向量的夹角为90度时,余弦相似度的值为0,两个向量指向完全相反的方向时,余弦相似度的值为-1.这结果与向量的长度无关,仅仅与向量的指向方向相关。

50.Hdfs – HA

  • 内存中各自保存一份元数据
    Edits日志只有active状态的namenode节点可以做写操作
    两个namenode都可以读取edits
    共享的edits放在一个共享存储中管理
    实现了一个zkfailer,常驻在每一个namenode节点中,每一个zkfailer负责控制自己所在的namenode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailer来负责切换,切换时需要防止溢出现象的发生

51.HDFS-HA自动故障转移工作

  • 自动故障转移为HDFS部署了两个新组件,zookeeper和ZKFailerController(ZKFC),zookeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转移依赖于zookeeper的以下功能:

  • 故障检测:集群中的每个namenode在zookeeper中维护了一个持久会话,如果机器崩溃,zookeeper中的会话将终止,zookeeper会通知另一个namenode需要出发故障转移
    现役namenode选择:zookeeper提供了一个简单的机制用于唯一的选择一个节点为active状态,如果目前现役namenode崩溃,另一个节点可能从zookeeper获得排外锁以表明它成为现役namenode

  • ZKFC是自动故障转移的另一个新组件,是zookeeper的客户端,也监视和管理namenode的运行状态。每个namenode节点也运行了一个zkfc进程,zkfc负责:
    健康检测:zkfc使用一个健康检查命令定期的ping与之在相同主机的namenode,只要该namenode及时的回复健康状态,zkfc认为该namenode是健康的。如果该节点崩溃,冻结或进入不健康状态,健康检测器标识该节点为非健康的
    Zookeeper会话管理:当本地namenode是健康的,zkfc保持一个在zookeeper中打开的会话,如果本地namenode处于active状态,zkfc也保持一个特殊的znode锁。该锁使用了zookeeper对短暂节点的支持,如果会话终止,锁节点将自动删除
    基于zookeeper的选择:如果本地namenode是健康的,且zkfc发现没有其他的节点持有znode锁,它将为自己获取锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地namenode为active。

52.选择排序

  • 第一次从待排序的数据元素中选出最小(或最大的一个元素)放在序列的起始位置。然后再从剩余的未排序元素中寻找最小(大)元素,然后放到已排序的队列末尾。一次类推,知道全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法

53.冒泡排序

  • 两两排序待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止

54.快速排序

  • 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的数据都比另一部分的所有数据都要小。然后再按照此方法对这两部分的数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

55.HA namenode是如何工作的

ZKFailoverController主要职责

健康检测:定期的向它监控的nn发送健康探测命令,从而来确定某个nn是否处于健康状态,如果机器宕机,心跳失败,那么skfc就会标记它处于一个不健康的状态
会话管理:如果nn是健康的zkfc就会在zookeeper中保持一个打开的会话,如果namenode同时还是active状态的,那么zkfc还会在zookeeper中占有一个类型为短暂类型的znode,当这个nn挂掉时,这个znode将会被删除,然后备用的nn,会得到这把锁,升级为主nn,同时标记状态为active
当宕机的nn重新启动时,它会再次注册zookeeper,发现已经有znode锁了,便会自动变为standby状态,如此循环往复,保证高可需,需要注意,目前仅仅支持最多两个nn
Master选举:如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断哪个nn为active状态

56.HDFS Federation的原理结构

HDFS Federation 意味着集群中将会有多个namenode/namespace,多namespace的方式可以直接减轻单一namenode的压力
Hdfs deferation 是解决namenode单点问题的水平横向扩展
在 hdfs deferation 的情况下,只有元数据的管理与存放被分开了,但真实数据的存储还是共用的。
有多个namenode,每个namenode都有自己的命名空间(namespace),每个namenode 存贮不同的数据信息,N1(元数据),N2(日志信息),N3(其他)等,而且各个namenode 之间互不干扰,具有高并发机制
优势:

命名空间的扩展:随着集群使用时间的加长,hdfs上存放的数据也将会越来越多。这个时候如果还是将所有的数据都往一个namenode上存放,这个文件系统会显得非常庞大。这时候我们可以进行横向扩展,把一些大的目录分离出去,使得每个namenode下的数据看起来更加精简
性能的提升:当namenode所持有的数据量达到了一个非常大规模的量级的时候,这个时候namenode的处理效率可能会有影响,他可能比较容易的陷入一个繁忙的状态。而整个集群将会受限于一个单点namenode的处理效率,从而影响集群整体的吞吐量。这个时候多namenode机制显然可以减轻很多这部分的压力
资源的隔离:通过多个命名空间,我们可以将关键数据文件目录移到不同的namenode上,一次不让这些关键数据的读写操作受到其它普通文件读写操作的影响

57.mapreduce什么导致数据倾斜,怎么解决

数据倾斜就是数据的key的分化严重不均,造成一部分数据很多,一部分数据很少的局面

59.zookeeper监听原理

60.mapreduce是怎么和yarn连接到一起的

MapReduce中的Driver相当于是YARN的客户端,将整个job任务提交到YARN集群上
提交的是封装MapReduce程序相关运行参数的job对象

61.linux常用的命令

参考答案:find、df、tar、ps、top、netstat等。(尽量说一些高级命令)

62. Linux查看内存、磁盘存储、io 读写、端口占用、进程等命令

1、查看内存:top
2、查看磁盘存储情况:df -h
3、查看磁盘IO读写情况:iotop(需要安装一下:yum install iotop)、iotop -o(直接查看输出比较高的磁盘读写程序)
4、查看端口占用情况:netstat -tunlp | grep 端口号
5、查看进程:ps aux

63. linux文件的查看

less ,more ,cat 的使用
less ,more 的区别

64. linux查看磁盘的分区,磁盘,内存使用情况

df: disk free 空余硬盘
free /top查看内存使用情况
fdisk –l 查看分区

65. linux查看当前系统进程状态

ps:process status 进程状态
1.进程状态基本语法
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)
2.选项说明
-a 选择所有进程
-u 显示所有用户的所有进程
-x 显示没有终端的进程
2.网络统计信息和端口占用情况基本语法
netstat -anp |grep 进程号 (功能描述:查看该进程网络信息)
netstat -nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
2.选项说明
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在listen(监听)的服务状态
-p 表示显示哪个进程在调用

66.linux压缩文件打包

1.gzip/gunzip 压缩
1.基本语法
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
2.经验技巧
(1)只能压缩文件不能压缩目录
(2)不保留原来的文件
2.zip/unzip 压缩
1.基本语法
zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
3.tar 打包
1.基本语法
tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
2.选项说明
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件
4. RPM软件包管理
1.查询命令(rpm -qa)
2.卸载命令(rpm -e)
3.安装命令(rpm -ivh)

67.hive和数据库的比较

1.查询语句 HQL:SQL
2.数据存贮位置 HDFS:块设备或者本地文件系统
3.数据更新 读多写少,不建议修改:经常修改
4.索引 没有索引,暴力扫描整个表,由于MapReduce的并行机制,也较快 :有索引
5.执行 hadoop的mapreduce来执行的:自己的执行引擎
6.执行延迟 延迟较高,且mapduce也是延迟性较高,
7.可扩展性 与hadoop的可扩展性一致
8.数据规模 hive利用mapreduce 并发机制,因此可以处理大规模的数据:

68.hive 生产环境中为什么建议使用外部表?

1.外部表删除不会删除源数据,只删除表结构
2.因为外部表不会加载到hive上,减少数据传输,数据还能共享
3.hive不会修改原数据,所以无需担心数据的损坏

69.hive 中有哪些方式保存元数据,各有什么特点?

1.默认保存在derby内存数据库中,安装小,但是数据存在内存,不稳定
2.存在MySQL中,数据存贮模式可以自己查看,持久化好,查看方便

70.hive 中的行转列或列转行

1.行转列
Contact(string 1,string 2)
Contace_ws(“delimitor”,string 1,string 2)
Concat(col) 将某字段的值进行去重汇总,产生array类型数组
2.列转行

selec tmovie, category_name from movie_info lateral view explode(category) table_tmp as category_name;
1

71. flume管道内存,flume宕机了数据丢失怎么解决

1.java数据的基本数据类型
2.基本数据类型和引用数据类型的差别
3.深拷贝和钱拷贝
4.线程的连接池
5.hashMap
6.修改写权限,并判断是否有写权限
7.查找出选的单词并显示行号
grep -niR ‘想要查找的字符’ xxx

注:n,显示行号 R,查找所有文件包含子目录 i,忽略大小写 最后的“xxx”表示想要查找的文件名
8.文件内所有的:替换成;
1.HDFS写数据流程
hdfs 常用的命令
2.一个Data Node宕机了,会发生什么,该Datanode的数据会如何分配
3.除了hadoop生态圈意外的组件,ozine?
4.hive 分区,分桶是什么,以及她们的区别
5.hive的数据存储格式有哪些,哪些可以update?
6.hbase Api是怎么实现之间的通信的?

72.Kafka 数据传输的事务定义有哪三种?

有以下三种级别:
(1) 最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次也不传输。
(2) 最少一次:消息不会被漏发送,最少被传输一次,但也有可能重复传输。
(3) 精确地一次:不会漏传输也不会重复传输,每个消息都被被传输且仅仅一次

73.Kafka 判断一个节点是否存活有哪两个条件?

1.通常使用zookeeper 进行通信,zookeeper 通过心跳机制检查每个节点的连接是否正常
且zookeeper 还帮助选举Controller,Controller 主要是管理整个集群所有分区和副本的状态,选举leader ,如果leader 出现故障,选举新的leader
2. Kafka动态维护了一个同步状态的副本的集合(a set of in-sync replicas),简称ISR,在这个集合中的节点都是和leader保持高度一致的,任何一条消息必须被这个集合中的每个节点读取并追加到日志中了,才会通知外部这个消息已经被提交了。因此这个集合中的任何一个节点随时都可以被选为leader.ISR在ZooKeeper中维护。ISR中有f+1个节点,就可以允许在f个节点down掉的情况下不会丢失消息并正常提供服务。ISR的成员是动态的,如果一个节点被淘汰了,当它重新达到“同步中”的状态时,他可以重新加入ISR.这种leader的选择方式是非常快速的,适合kafka的应用场景

74.Kafka 数据存储在硬盘上的消息格式是什么?

消息由一个固定长度的头部和可变长度的字节数组组成。头部包含了一个版本号和 CRC32
校验码。
•消息长度: 4 bytes (value: 1+4+n)
•版本号: 1 byte
•CRC 校验码: 4 bytes
•具体的消息: n bytes

75.Kafka 的数据存储在那个分区?如何确定?

1.发送消息时指定分区号。
2.发送的消息是 Key:Value 格式的数据,则根据 Key的Hash函数对分区数取余分配 一个分区。
3.未指定分区,也没有Key ,将会以循环的方式分配一个分区。

76.Kafka 的数据存储格式

segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀“.index”和“.log”分别表示为segment索引文件、日志存储文件.
producer发message到某个topic,message会被均匀的分布到多个partition上(随机或根据用户指定的回调函数进行分布),kafka broker收到message往对应partition的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息consumer才能消费,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。
存储策略:
无论消息是否被消费,kafka都会保留所有消息。有两种策略可以删除旧数据:
1)基于时间:log.retention.hours=168
2)基于大小:log.retention.bytes=1073741824
需要注意的是,因为Kafka读取特定消息的时间复杂度为O(1),即与文件大小无关,所以这里删除过期文件与提高 Kafka 性能无关。

77.Kafka 的ACK 机制?ISR,AR,OR分别是什么?

0:生产者不会等待 broker 的 ack,这个延迟最低但是存储的保证最弱当 server 挂掉的时候
就会丢数据
1:服务端会等待 ack 值 leader 副本确认接收到消息后发送 ack 但是如果 leader 挂掉后他
不确保是否复制完成新 leader 也会导致数据丢失
-1:同样在 1 的基础上 服务端会等所有的 follower 的副本受到数据后才会受到 leader 发出
的 ack,这样数据不会丢失
ISR: Kafka动态维护了一个同步状态的副本的集合(a set of in-sync replicas),简称ISR,在这个集合中的节点都是和leader保持高度一致的,任何一条消息必须被这个集合中的每个节点读取并追加到日志中了,才会通知外部这个消息已经被提交了。因此这个集合中的任何一个节点随时都可以被选为leader.ISR在ZooKeeper中维护。ISR中有f+1个节点,就可以允许在f个节点down掉的情况下不会丢失消息并正常提供服务。ISR的成员是动态的,如果一个节点被淘汰了,当它重新达到“同步中”的状态时,他可以重新加入ISR.这种leader的选择方式是非常快速的,适合kafka的应用场景
AR: 所有的 follower 节点
OSR: 与 leader 数据落差太大

78.Kafka 的分片和副本机制

分区:为了实现扩展性,当数据量较大时,一个服务器放不下,这是考虑分区放在多个服务器上,主要解决了单台服务器存储容量有限的问题。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序;
副本:每个Topic可以建立多个副本,即数据备份,防止数据丢失,最好副本放置在不同的机架上,如果该机架down 掉,数据也不会丢失

79.kafka 是如何保证数据不丢失的?

79.1、保证生产者端不丢失
  • 1、 消息生产分为同步模式和异步模式
  • 2、 消息确认分为三个状态
    a) 0:生产者只负责发送数据
    b) 1:某个partition的leader收到数据给出响应
    c) -1:某个partition的所有副本都收到数据后给出响应
  • 3、 在同步模式下
    a) 生产者等待10S,如果broker没有给出ack响应,就认为失败。
    b) 生产者重试3次,如果还没有响应,就报错。
  • 4 、 在异步模式下
    a) 先将数据保存在生产者端的buffer中。Buffer大小是2万条。
    b) 满足数据阈值或者数量阈值其中的一个条件就可以发送数据。
    c) 发送一批数据的大小是500条。
    如果broker迟迟不给ack,而buffer又满了。
    开发者可以设置是否直接清空buffer中的数据。
79.2、broker端消息不丢失

broker端的消息不丢失,其实就是用partition副本机制来保证。
Producer ack -1(all). 能够保证所有的副本都同步好了数据。其中一台机器挂了,并不影响数据的完整性。

79.3、消费端消息不丢失

通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset数值,下次继续消费的时候,会接着上次的offset进行消费。

而offset的信息在kafka0.8版本之前保存在zookeeper中,在0.8版本之后保存到topic中,即使消费者在运行过程中挂掉了,再次启动的时候会找到offset的值,找到之前消费消息的位置,接着消费,由于offset的信息写入的时候并不是每条消息消费完成后都写入的,所以这种情况有可能会造成重复消费,但是不会丢失消息。

80.Kafka 的数据写入和数据消费过程?

  • 1、producer先从zookeeper的 "/brokers/…/state"节点找到该partition的leader
  • 2、producer将消息发送给该leader
  • 3、leader将消息写入本地log
  • 4、followers从leader pull消息,写入本地log后向leader发送ACK
  • 5、leader收到所有ISR中的replication的ACK后,增加HW(high watermark,最后commit 的offset)并向producer发送ACK

81.Kafka 高吞吐低延迟的原因?

Kafka 是顺序写磁盘,每次都是写入操作系统页缓存(Page Cache),然后由操作系统决定什么时候将页缓存中的数据写入磁盘。
–操作系统缓存:页缓存是内存中分配的,kafka 不直接参与物理的I/O 操作哦,而交给操作系统来完成
–顺序读: Kafka 采用追加的方式,皮面了磁盘的随机读写操作。
–零拷贝: 使用sendFile 为代表的的零拷贝技术加强网络间的数据传输效率。

82、Hive的自定义函数

  • 1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。

  • 2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。

  • 3)根据用户自定义函数类别分为以下三种:

    • UDF:User-Defined-Function,用户自定义函数,数据是一进一出,功能类似于大多数数学函数或者字符串处理函数;
    • UDAF:User-Defined Aggregation Function,用户自定义聚合函数,数据是多进一出,功能类似于 count/max/min;
    • UDTF:User-Defined Table-Generating Functions,用户自定义表生成函数,数据是一进多处,功能类似于lateral view explore()
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值