大数据面试5

一、简答说一下hadoop的map-reduce编程模型java

首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合node

使用的是hadoop内置的数据类型,好比longwritable、text等算法

将键值对集合输入mapper进行业务处理过程,将其转换成须要的key-value在输出sql

以后会进行一个partition分区操做,默认使用的是hashpartitioner,能够经过重写hashpartitioner的getpartition方法来自定义分区规则shell

以后会对key进行进行sort排序,grouping分组操做将相同key的value合并分组输出,在这里可使用自定义的数据类型,重写WritableComparator的Comparator方法来自定义排序规则,重写RawComparator的compara方法来自定义分组规则数据库

以后进行一个combiner归约操做,其实就是一个本地段的reduce预处理,以减少后面shufle和reducer的工做量编程

reducetask会经过网络将各个数据收集进行reduce处理,最后将数据保存或者显示,结束整个job数组

二、hadoop的TextInputFormat做用是什么,如何自定义实现缓存

InputFormat会在map操做以前对数据进行两方面的预处理 bash

1是getSplits,返回的是InputSplit数组,对数据进行split分片,每片交给map操做一次 

2是getRecordReader,返回的是RecordReader对象,对每一个split分片进行转换为key-value键值对格式传递给map

经常使用的InputFormat是TextInputFormat,使用的是LineRecordReader对每一个分片进行键值对的转换,以行偏移量做为键,行内容做为值

自定义类继承InputFormat接口,重写createRecordReader和isSplitable方法 

在createRecordReader中能够自定义分隔符

三、hadoop和spark的都是并行计算,那么他们有什么相同和区别

二者都是用mr模型来进行并行计算,hadoop的一个做业称为job,job里面分为map task和reduce task,每一个task都是在本身的进程中运行的,当task结束时,进程也会结束

spark用户提交的任务成为application,一个application对应一个sparkcontext,app中存在多个job,每触发一次action操做就会产生一个job

这些job能够并行或串行执行,每一个job中有多个stage,stage是shuffle过程当中DAGSchaduler经过RDD之间的依赖关系划分job而来的,每一个stage里面有多个task,组成taskset有TaskSchaduler分发到各个executor中执行,executor的生命周期是和app同样的,即便没有job运行也是存在的,因此task能够快速启动读取内存进行计算

hadoop的job只有map和reduce操做,表达能力比较欠缺并且在mr过程当中会重复的读写hdfs,形成大量的io操做,多个job须要本身管理关系

spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操做如join,groupby等,并且经过DAG图能够实现良好的容错

四、为何要用flume导入hdfs,hdfs的构架是怎样的

flume能够实时的导入数据到hdfs中,当hdfs上的文件达到一个指定大小的时候会造成一个文件,或者超过指定时间的话也造成一个文件

文件都是存储在datanode上面的,namenode记录着datanode的元数据信息,而namenode的元数据信息是存在内存中的,因此当文件切片很小或者不少的时候会卡死

五、map-reduce程序运行的时候会有什么比较常见的问题

好比说做业中大部分都完成了,可是总有几个reduce一直在运行

这是由于这几个reduce中的处理的数据要远远大于其余的reduce,多是由于对键值对任务划分的不均匀形成的数据倾斜

解决的方法能够在分区的时候从新定义分区规则对于value数据不少的key能够进行拆分、均匀打散等处理,或者是在map端的combiner中进行数据预处理的操做

六、简单说一下hadoop和spark的shuffle过程

hadoop:map端保存分片数据,经过网络收集到reduce端 

spark:spark的shuffle是在DAGSchedular划分Stage的时候产生的,TaskSchedule要分发Stage到各个worker的executor,减小shuffle能够提升性能

七、Hive中存放是什么? 

表(数据+元数据)。 存的是和hdfs的映射关系,hive是逻辑上的数据仓库,实际操做的都是hdfs上的文件,HQL就是用sql语法来写的mr程序。

八、Hive与关系型数据库的关系? 

没有关系,hive是数据仓库,不能和数据库同样进行实时的CURD操做。 

是一次写入屡次读取的操做,能够当作是ETL工具。

九、Flume工做机制是什么? 

核心概念是agent,里面包括source、chanel和sink三个组件。 

source运行在日志收集节点进行日志采集,以后临时存储在chanel中,sink负责将chanel中的数据发送到目的地。 

只有成功发送以后chanel中的数据才会被删除。 

首先书写flume配置文件,定义agent、source、chanel和sink而后将其组装,执行flume-ng命令。

十、Sqoop工做原理是什么? 

hadoop生态圈上的数据传输工具。 

能够将关系型数据库的数据导入非结构化的hdfs、hive或者bbase中,也能够将hdfs中的数据导出到关系型数据库或者文本文件中。 

使用的是mr程序来执行任务,使用jdbc和关系型数据库进行交互。 

import原理:经过指定的分隔符进行数据切分,将分片传入各个map中,在map任务中在每行数据进行写入处理没有reduce。 

export原理:根据要操做的表名生成一个java类,并读取其元数据信息和分隔符对非结构化的数据进行匹配,多个map做业同时执行写入关系型数据库

十一、Hbase行健列族的概念,物理模型,表的设计原则? 

行健:是hbase表自带的,每一个行健对应一条数据。 

列族:是建立表时指定的,为列的集合,每一个列族做为一个文件单独存储,存储的数据都是字节数组,其中的数据能够有不少,经过时间戳来区分。 

物理模型:整个hbase表会拆分为多个region,每一个region记录着行健的起始点保存在不一样的节点上,查询时就是对各个节点的并行查询,当region很大时使用.META表存储各个region的起始点,-ROOT又能够存储.META的起始点。 

rowkey的设计原则:各个列簇数据平衡,长度原则、相邻原则,建立表的时候设置表放入regionserver缓存中,避免自动增加和时间,使用字节数组代替string,最大长度64kb,最好16字节之内,按天分表,两个字节散列,四个字节存储时分毫秒。 

列族的设计原则:尽量少(按照列族进行存储,按照region进行读取,没必要要的io操做),常常和不常用的两类数据放入不一样列族中,列族名字尽量短。

十二、Spark Streaming和Storm有何区别? 

一个实时毫秒一个准实时亚秒,不过storm的吞吐率比较低。

1三、mllib支持的算法? 

大致分为四大类,分类、聚类、回归、协同过滤。

1四、简答说一下hadoop的map-reduce编程模型? 

首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合。 

将键值对集合输入mapper进行业务处理过程,将其转换成须要的key-value在输出。 

以后会进行一个partition分区操做,默认使用的是hashpartitioner,能够经过重写hashpartitioner的getpartition方法来自定义分区规则。 

以后会对key进行进行sort排序,grouping分组操做将相同key的value合并分组输出。 

在这里可使用自定义的数据类型,重写WritableComparator的Comparator方法来自定义排序规则,重写RawComparator的compara方法来自定义分组规则。 

以后进行一个combiner归约操做,其实就是一个本地段的reduce预处理,以减少后面shufle和reducer的工做量。 

reducetask会经过网络将各个数据收集进行reduce处理,最后将数据保存或者显示,结束整个job。

1五、Hadoop平台集群配置、环境变量设置? 

zookeeper:修改zoo.cfg文件,配置dataDir,和各个zk节点的server地址端口,tickTime心跳时间默认是2000ms,其余超时的时间都是以这个为基础的整数倍,以后再dataDir对应目录下写入myid文件和zoo.cfg中的server相对应。

hadoop:修改 

hadoop-env.sh配置java环境变量 

core-site.xml配置zk地址,临时目录等 

hdfs-site.xml配置nn信息,rpc和http通讯地址,nn自动切换、zk链接超时时间等 

yarn-site.xml配置resourcemanager地址 

mapred-site.xml配置使用yarn 

slaves配置节点信息 

格式化nn和zk。

hbase:修改 

hbase-env.sh配置java环境变量和是否使用自带的zk 

hbase-site.xml配置hdfs上数据存放路径,zk地址和通信超时时间、master节点 

regionservers配置各个region节点 

zoo.cfg拷贝到conf目录下

spark: 

安装Scala 

修改spark-env.sh配置环境变量和master和worker节点配置信息

环境变量的设置:直接在/etc/profile中配置安装的路径便可,或者在当前用户的宿主目录下,配置在.bashrc文件中,该文件不用source从新打开shell窗口便可,配置在.bash_profile的话只对当前用户有效。

1六、Hadoop性能调优?

调优能够经过系统配置、程序编写和做业调度算法来进行。 

hdfs的block.size能够调到128/256(网络很好的状况下,默认为64) 

调优的大头:mapred.map.tasks、mapred.reduce.tasks设置mr任务数(默认都是1) 

mapred.tasktracker.map.tasks.maximum每台机器上的最大map任务数 

mapred.tasktracker.reduce.tasks.maximum每台机器上的最大reduce任务数 

mapred.reduce.slowstart.completed.maps配置reduce任务在map任务完成到百分之几的时候开始进入 

这个几个参数要看实际节点的状况进行配置,reduce任务是在33%的时候完成copy,要在这以前完成map任务,(map能够提早完成) 

mapred.compress.map.output,mapred.output.compress配置压缩项,消耗cpu提高网络和磁盘io 

合理利用combiner 

注意重用writable对象

1七、Hadoop高并发? 

首先确定要保证集群的高可靠性,在高并发的状况下不会挂掉,支撑不住能够经过横向扩展。 

datanode挂掉了使用hadoop脚本从新启动。

1八、hadoop的TextInputFormat做用是什么,如何自定义实现? 

InputFormat会在map操做以前对数据进行两方面的预处理。 

1是getSplits,返回的是InputSplit数组,对数据进行split分片,每片交给map操做一次。 

2是getRecordReader,返回的是RecordReader对象,对每一个split分片进行转换为key-value键值对格式传递给map。 

经常使用的InputFormat是TextInputFormat,使用的是LineRecordReader对每一个分片进行键值对的转换,以行偏移量做为键,行内容做为值。 

自定义类继承InputFormat接口,重写createRecordReader和isSplitable方法。 

在createRecordReader中能够自定义分隔符。

1九、hadoop和spark的都是并行计算,那么他们有什么相同和区别? 

二者都是用mr模型来进行并行计算,hadoop的一个做业称为job,job里面分为map task和reduce task,每一个task都是在本身的进程中运行的,当task结束时,进程也会结束。 

spark用户提交的任务成为application,一个application对应一个sparkcontext,app中存在多个job,每触发一次action操做就会产生一个job。 

这些job能够并行或串行执行,每一个job中有多个stage,stage是shuffle过程当中DAGSchaduler经过RDD之间的依赖关系划分job而来的,每一个stage里面有多个task,组成taskset有TaskSchaduler分发到各个executor中执行,executor的生命周期是和app同样的,即便没有job运行也是存在的,因此task能够快速启动读取内存进行计算。 

hadoop的job只有map和reduce操做,表达能力比较欠缺并且在mr过程当中会重复的读写hdfs,形成大量的io操做,多个job须要本身管理关系。 

spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操做如join,groupby等,并且经过DAG图能够实现良好的容错。

20、为何要用flume导入hdfs,hdfs的构架是怎样的? 

flume能够实时的导入数据到hdfs中,当hdfs上的文件达到一个指定大小的时候会造成一个文件,或者超过指定时间的话也造成一个文件。 

文件都是存储在datanode上面的,namenode记录着datanode的元数据信息,而namenode的元数据信息是存在内存中的,因此当文件切片很小或者不少的时候会卡死。

2一、map-reduce程序运行的时候会有什么比较常见的问题? 

好比说做业中大部分都完成了,可是总有几个reduce一直在运行。 

这是由于这几个reduce中的处理的数据要远远大于其余的reduce,多是由于对键值对任务划分的不均匀形成的数据倾斜。 

解决的方法能够在分区的时候从新定义分区规则对于value数据不少的key能够进行拆分、均匀打散等处理,或者是在map端的combiner中进行数据预处理的操做。

1六、简单说一下hadoop和spark的shuffle过程? 

hadoop:map端保存分片数据,经过网络收集到reduce端。 

spark:spark的shuffle是在DAGSchedular划分Stage的时候产生的,TaskSchedule要分发Stage到各个worker的executor。 

减小shuffle能够提升性能。

2二、RDD机制? 

rdd分布式弹性数据集,简单的理解成一种数据结构,是spark框架上的通用货币。 

全部算子都是基于rdd来执行的,不一样的场景会有不一样的rdd实现类,可是均可以进行互相转换。 

rdd执行过程当中会造成dag图,而后造成lineage保证容错性等。 

从物理的角度来看rdd存储的是block和node之间的映射。

1八、spark有哪些组件? 

(1)master:管理集群和节点,不参与计算。 

(2)worker:计算节点,进程自己不参与计算,和master汇报。 

(3)Driver:运行程序的main方法,建立spark context对象。 

(4)spark context:控制整个application的生命周期,包括dagsheduler和task scheduler等组件。 

(5)client:用户提交程序的入口。

2三、spark工做机制? 

用户在client端提交做业后,会由Driver运行main方法并建立spark context上下文。 

执行add算子,造成dag图输入dagscheduler,按照add之间的依赖关系划分stage输入task scheduler。 

taskscheduler会将stage划分为task set分发到各个节点的executor中执行。

2四、spark的优化怎么作? 

经过spark-env文件、程序中sparkconf和set property设置。 

(1)计算量大,造成的lineage过大应该给已经缓存了的rdd添加checkpoint,以减小容错带来的开销。 

(2)小分区合并,太小的分区形成过多的切换任务开销,使用repartition。

2五、kafka工做原理? 

producer向broker发送事件,consumer从broker消费事件。 

事件由topic区分开,每一个consumer都会属于一个group。 

相同group中的consumer不能重复消费事件,而同一事件将会发送给每一个不一样group的consumer。

2六、ALS算法原理? 

答:对于user-product-rating数据,als会创建一个稀疏的评分矩阵,其目的就是经过必定的规则填满这个稀疏矩阵。 

als会对稀疏矩阵进行分解,分为用户-特征值,产品-特征值,一个用户对一个产品的评分能够由这两个矩阵相乘获得。 

经过固定一个未知的特征值,计算另一个特征值,而后交替反复进行最小二乘法,直至差平方和最小,便可得想要的矩阵。

2七、kmeans算法原理? 

随机初始化中心点范围,计算各个类别的平均值获得新的中心点。 

从新计算各个点到中心值的距离划分,再次计算平均值获得新的中心点,直至各个类别数据平均值无变化。

2八、canopy算法原理? 

根据两个阈值来划分数据,以随机的一个数据点做为canopy中心。 

计算其余数据点到其的距离,划入t一、t2中,划入t2的从数据集中删除,划入t1的其余数据点继续计算,直至数据集中无数据。

2九、朴素贝叶斯分类算法原理? 

对于待分类的数据和分类项,根据待分类数据的各个特征属性,出如今各个分类项中的几率判断该数据是属于哪一个类别的。

30、关联规则挖掘算法apriori原理? 

一个频繁项集的子集也是频繁项集,针对数据得出每一个产品的支持数列表,过滤支持数小于预设值的项,对剩下的项进行全排列,从新计算支持数,再次过滤,重复至全排列结束,可获得频繁项和对应的支持数。--------------------- 做者:Zzreal 来源:CSDN 原文:https://blog.csdn.net/Zonzereal/article/details/80735906 版权声明:本文为博主原创文章,转载请附上博文连接!

相关文章
相关标签/搜索