数据相关常见⾯试题与答案整理
1、hadoop:
1)hadoop是⼤数据分析的完整⽣态系统,从数据采集,存储,分析,转运,再到页⾯展⽰,构成了整个流程
2)采集可以⽤flume,
3)存储⽤hbase,hdfs,mangodb就相当于hbase,
4)分析⽤Mapreduce⾃⼰写算法,
5)还有hive做数据仓库,
6)pig做数据流处理,
7)转储⽅⾯有sqoop,可以将hdfs中的数据转换存储到mysql,oracle等传统数据库,
这就构成了⼀整套⼤数据分析的整个流程
2、Hadoop 集可以运⾏的 3 个模式分别是什么, 都有哪些注意点?
单机模式、伪分布式模式、全分布式模式;
3、Hadoop 的核⼼配置⽂件?
1)以前是l、l
2)现在是l、l、l;都在conf⽬录下;
4、l 的 3 个主要属性?
1)dfs.name.dir 决定的是元数据存储的路径以及 DFS 的存储⽅式(磁盘或是远端)
2)dfs.data.dir 决定的是数据存储的路径
3)fs.checkpoint.dir ⽤于第⼆ Namenode
5、简述HDFS的原理?
1)客户端向 nameNode 发送要上传⽂件的请求
2)nameNode 返回给⽤户是否能上传数据的状态
3)加⼊⽤户端需要上传⼀个 1024M 的⽂件,客户端会通过 Rpc 请求 NameNode,并返回需要上传给那些 DataNode(分配机器的距离以及空间的⼤⼩等),namonode会选择就近原则分配机器。
4)客户端请求建⽴ block 传输管道 chnnel 上传数据
5)在上传时 datanode 会与其他的机器建⽴连接并把数据块传送到其他的机器上
6)dataNode 向 namenode 汇报⾃⼰的储存情况以及⾃⼰的信息
7)当第⼀个快上传完后再去执⾏其他的复制的传送
6、简述MR(MapReduce)的原理?
1)当执⾏mr程序时,会执⾏⼀个Job
2)客户端的jobClick会请求namenode的jobTracker要执⾏任务
3)jobClick会去HDFS端复制作业的资源⽂件
4)客户端的jobClick会向namenode提交作业,让namenode做准备
5)Namenode的jobTracker会去初始化创建的对象
荣耀30价格
6)Namenode会获取hdfs的划分的分区
7)Namenode去检查TaskTracker的⼼跳信息,查看存活的机器
8)当执⾏的datenode执⾏任务时Datenode会去HDFS获取作业的资源的⽂件
9)TaskTracker会去执⾏代码,并登陆JVM的执⾏渠道
10)JVM或执⾏MapTask或者ReduceTask
11)执⾏终结
7、谈谈数据倾斜,如何发⽣的,并给出优化⽅案
数据的倾斜主要是两个的数据相差的数量不在⼀个级别上,在执⾏任务时就造成了数据的倾斜,可以通过分区的⽅法减少reduce数据倾斜性能的⽅法,例如:抽样和范围的分区、⾃定义分区、数据⼤⼩倾斜的⾃定义策略;
8、简单概括安装hadoop的步骤
1)创建 hadoop 帐户。
2)setup.改 IP。
3)安装 java,并修改/etc/profile ⽂件,配置 java 的环境变量。
4)修改 Host ⽂件域名。
5)安装 SSH,配置⽆密钥通信。
6)解压 hadoop。
7)配置 conf ⽂件下 hadoop-env.sh、core-site.sh、mapre-site.sh、hdfs-site.sh。
8)配置 hadoop 的环境变量。
9)Hadoop namenode -format
10)start-all.sh
9、怎样快速的杀死⼀个job
1)执⾏hadoop  job -list  拿到job-id
2)Hadoop job kill hadoop-id
10、简单概述hadoop的combinet与partition的区别
1)combine和partition都是函数,中间的步骤应该只有shuffle!
2)combine分为map端和reduce端,作⽤是把同⼀个key的键值对合并在⼀起,可以⾃定义的;
3)partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以⾃定义的。这⾥其实可以理解归类。
11、hadoop的shuffer的概念
1)Shuffer是⼀个过程,实在map端到reduce在调reduce数据之前都叫shuffer,主要是分区与排序,也就是内部的缓存分分区以及分发(是reduce来拉数据的)和传输;
12、3 个 datanode 中有⼀个个datanode 出现错误会怎样?
这个 datanode 的数据会在其他的 datanode 上重新做备份。
13、简单概述⼀下hadoop1与hadoop2的区别
1)Hadoop2与hadoop1最⼤的区别在于HDFS的架构与mapreduce的很⼤的区别,⽽且速度上有很⼤的提升;
2)hadoop2最主要的两个变化是:namenode可以集的部署了,hadoop2中的mapreduce中的jobTracker中的资源调度器与⽣命周期管理拆分成两个独⽴的组件,并命名为YARN
14、hadoop的⼆次排序
1)Hadoop默认的是HashPartitioner排序,当map端⼀个⽂件⾮常⼤另外⼀个⽂件⾮常⼩时就会产⽣资源的分配不均匀,既可以使⽤setPartitionerClass来设置分区,即形成了⼆次分区。
15、mapreduce的combiner的作⽤是什么,什么时候不应该使⽤?
1)Mapreduce中的Combiner就是为了避免map任务和reduce任务之间的数据传输⽽设置的,Hadoop允许⽤户针对map task 的输出指定⼀个合并函数。即为了减少传输到Reduce中的数据量。它主要是为了削减Mapper的输出从⽽减少⽹络带宽和Reducer之上的负载。
2)在数据量较少时不宜使⽤。
16、你对zookeeper的理解?
1)随着⼤数据的快速发展,多机器的协调⼯作,避免主要机器单点故障的问题,于是就引⼊管理机器的⼀个软件,他就是zookeeper来协助机器正常的运⾏。
2)Zookeeper有两个⾓⾊分别是leader与follower ,其中leader是主节点,其他的是副节点,在安装配置上⼀定要注意配置奇数个的机器上,便于zookeeper快速切换选举其他的机器。
3)在其他的软件执⾏任务时在zookeeper注册时会在zookeeper下⽣成相对应的⽬录,以便zookeeper去管理机器。
17、hive是怎样保存元数据的?
1)保存元数据的⽅式有:内存数据库rerdy,本地mysql数据库,远程mysql数据库;
2)但是本地的mysql数据⽤的⽐较多,因为本地读写速度都⽐较快
18、Hive中外部表与内部表的区别
1)Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。
2)在删除表的时候,内部表的元数据和数据会被⼀起删除,⽽外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,⽅便共享源数据。
19、对于 hive,你写过哪些 UDF 函数,作⽤是什么?
1)UDF: user  defined  function  的缩写,
1)编写hive udf的两种⽅式extends UDF 重写evaluate第⼆种extends GenericUDF重写initialize、getDisplayString、evaluate⽅法
20、Hive 的 sort by 和 order by 的区别
1)order by 会对输⼊做全局排序,因此只有⼀个reducer(多个reducer⽆法保证全局有序)只有⼀个reducer,会导致当输⼊规模较⼤时,需要较长的计算时间。
2)sort by不是全局排序,其在数据进⼊reducer前完成排序.因此,如果⽤sort by进⾏排序,并且设置
21、Hbase 的 rowkey 怎么创建⽐较好?列族怎么创建⽐较好?
1)Rowkey是⼀个⼆进制码流,Rowkey的长度被很多开发者建议说设计在10~100个字节,不过建议是越短越好,不要超过16个字节。在查时有索引会加快速度。
2)Rowkey散列原则、 Rowkey唯⼀原则、针对事务数据Rowkey设计、针对统计数据的Rowkey设计、针对通⽤数据的Rowkey设计、⽀持多3)总结设计列族:
a、⼀般不建议设计多个列族
b、数据块的缓存的设计
c、激进缓存设计
d、布隆过滤器的设计(可以提⾼随机读取的速度)
e、⽣产⽇期的设计
f、列族压缩
g、单元时间版本
22、hive 如何调优?
1)在优化时要注意数据的问题,尽量减少数据倾斜的问题,减少job的数量,同事对⼩的⽂件进⾏成⼤的⽂件,
2)如果优化的设计那就更好了,因为hive的运算就是mapReduce所以调节mapreduce的参数也会使性能提⾼,如调节task 的数⽬。
23、hbase 写数据的原理
1)⾸先,Client通过访问ZK来请求⽬标数据的地址。
危险品
2)ZK中保存了-ROOT-表的地址,所以ZK通过访问-ROOT-表来请求数据地址。
3)同样,-ROOT-表中保存的是.META.的信息,通过访问.META.表来获取具体的RS。
4).META.表查询到具体RS信息后返回具体RS地址给Client。
5)Client端获取到⽬标地址后,然后直接向该地址发送数据请求
24、hbase宕机了如何处理?
1)HBase的RegionServer宕机超过⼀定时间后,HMaster会将其所管理的region重新分布到其他活动
的RegionServer上,由于数据和⽇志都持久在HDFS中,该操作不会导致数据丢失。所以数据的⼀致性和安全性是有保障的。
2)但是重新分配的region需要根据⽇志恢复原RegionServer中的内存MemoryStore表,这会导致宕机的region在这段时间内⽆法对外提供服务。
3)⽽⼀旦重分布,宕机的节点重新启动后就相当于⼀个新的RegionServer加⼊集,为了平衡,需要再次将某些region分布到该server。
4)因此,Region Server的内存表memstore如何在节点间做到更⾼的可⽤,是HBase的⼀个较⼤的挑战。
25、Hbase 中的 metastore ⽤来做什么的?
1)Hbase的metastore是⽤来保存数据的,
冰箱夏天调到什么档位最合适2)其中保存数据的⽅式有有三种第⼀种于第⼆种是本地储存,第⼆种是远程储存这⼀种企业⽤的⽐较多
26、hbase是怎样预分区的?
如何去进⾏预分区,可以采⽤下⾯三步:
1)取样,先随机⽣成⼀定数量的rowkey,将取样数据按升序排序放到⼀个集合⾥
2)根据预分区的region个数,对整个集合平均分割,即是相关的splitKeys.
3)ateTable(HTableDescriptor tableDescriptor,byte[][] splitkeys)可以指定预分区的splitKey,即是指定region间的rowkey临界值
27、怎样将 mysql 的数据导⼊到 hbase 中?
1)不能使⽤ sqoop,速度太慢了,提⽰如下:
A、⼀种可以加快批量写⼊速度的⽅法是通过预先创建⼀些空的 regions,这样当数据写⼊ HBase 时,会按照 region 分区情况,在集内做数据的负载均衡。
B、hbase ⾥⾯有这样⼀个 hfileoutputformat 类,他的实现可以将数据转换成 hfile格式,通过 new ⼀个这个类,进⾏相关配置,这样会在 hdfs 下⾯产⽣⼀个⽂件,这个时候利⽤ hbase 提供的 jruby 的 loadtable.rb 脚本就可以进⾏批量导⼊。
28、Redis, 传统数据库,hbase,hive  每个之间的区别?
1)Redis 是基于内存的数据库,注重实⽤内存的计算,
2)hbase是列式数据库,⽆法创建主键,地从是基于HDFS的,每⼀⾏可以保存很多的列,
3)hive是数据的仓库,是为了减轻mapreduce⽽设计的,不是数据库,是⽤来与hadoop做交互的。
韩国男明星整容29、HBase scan setBatch和setCaching的区别
1)scan可以通过setCaching与setBatch⽅法提⾼速度(以空间换时间),
2)setCaching设置的值为每次rpc的请求记录数,默认是1;cache⼤可以优化性能,但是太⼤了会花费很长的时间进⾏⼀次传输。
3)setBatch设置每次取的column size;有些row特别⼤,所以需要分开传给client,就是⼀次传⼀个row的⼏个column。30、flume 不采集 Nginx ⽇志,通过 Logger4j 采集⽇志,优缺点是什么?
1)在nginx采集⽇志时⽆法获取session的信息,然⽽logger4j则可以获取session的信息,
2)logger4j的⽅式⽐较稳定,不会宕机。缺点:不够灵活,logger4j的⽅式和项⽬结合过滤紧密,⽽flume的⽅式就⽐较灵活,便于插拔式⽐较好,不会影响项⽬的性能。
吉林省中考
31、flume 和 kafka 采集⽇志区别,采集⽇志时中间停了,怎么记录之前的⽇志。
1)Flume 采集⽇志是通过流的⽅式直接将⽇志收集到存储层,⽽ kafka 将⽇志缓存在 kafka集,待后期可以采集到存储
层。
2)Flume 采集中间停了,可以采⽤⽂件的⽅式记录之前的⽇志,⽽ kafka 是采⽤ offset(偏移量) 的⽅式记录之前的⽇志。32、kafka 中怎样储存数据结构的,⽬录下有多少个分区,每个分区的存储格式是什么样的?
1)topic 是按照“主题名-分区”存储的
2)分区个数由配置⽂件决定
3)每个分区下最重要的两个⽂件是 0000000000.log 和 000000.index,0000000.log,以默认 1G ⼤⼩回滚。
33、mr 和 spark 区别,怎么理解 spark-rdd
1)Mr 是⽂件⽅式的分布式计算框架,是将中间结果和最终结果记录在⽂件中,map 和 reduce的数据分发也是在⽂件中。  2)spark 是内存迭代式的计算框架,计算的中间结果可以缓存内存,也可以缓存硬盘,但是不是每⼀步计算都需要缓存的。  3)spark-rdd 是⼀个数据的分区记录集合,是利⽤内存来计算的,spark之所以快是因为有内存的模式
名字软件运⾏管理
Hadoop1JDK,hadoop namenode
Hadoop2JDK,hadoop namenode
Hadoop3JDK,hadoop secondaryNamenode
Hadoop4JDK,hadoop secondaryNamenode
Hadoop5JDK,hadoop datanode
Hadoop6JDK,hadoop datanode
Hadoop7JDK,hadoop datanode
Hadoop8JDK,hadoop datanode
Hadoop9JDK,hadoop datanode
Hadoop10JDK,zookeeper,tomcat,mvn,kafka leader
Hadoop11JDK,zookeeper,tomcat,mvn,kafka follower
Hadoop12JDK,zookeeper,tomcat,mvn,kafka follower
Hadoop13JDK,hive,mysql,svn,logstarh hive,mysql,svn
Hadoop14JDK,hbase,mysql备份datanode
Hadoop15JDK,nginx,Log⽇志⼿机datanode
数据就是每天访问的Log⽇志不是很⼤,有的时候⼤有的时候⼩的可怜
35、你在项⽬中遇到了哪些难题,是怎么解决的?
1)在执⾏任务时发现副本的个数不对,经过⼀番的查发现是超时的原因,修改了配置⽂件l:中修改了超时时间。
江苏卫视跨年晚会直播
2)由于当时在分配各个⽬录空间⼤⼩时,没有很好的分配导致有的⽬录的空间浪费,于是整体商量后把储存的空间调⼤了⼀些。