- 1、fsimage和edit的区别?
大家都知道namenode与secondary namenode 的关系,当他们要进行数据同步时叫做checkpoint时就用到了fsimage与edit,fsimage是保存最新的元数据的信息,当fsimage数据到一定的大小事会去生成一个新的文件来保存元数据的信息,这个新的文件就是edit,edit会回滚最新的数据。
- 2、列举几个配置文件优化? --发挥
1)Core-site.xml 文件的优化 a、fs.trash.interval,默认值: 0;说明: 这个是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间。一般开启这个会比较好,以防错误删除重要文件。单位是 分钟。 b、dfs.namenode.handler.count,默认值:10;说明:hadoop系统里启动的任务线程数,这里改为40,同样可以尝试该值大小对效率的影响变化进行最合适的值的设定。 c、mapreduce.tasktracker.http.threads,默认值:40;说明:map和reduce是通过http进行数据传输的,这个是设置传输的并行线程数。
- 3、datanode 首次加入 cluster 的时候,如果 log 报告不兼容文件版本,那需要namenode 执行格式化操作,这样处理的原因是?
1)这样处理是不合理的,因为那么 namenode 格式化操作,是对文件系统进行格式化,namenode 格式化时清空 dfs/name 下空两个目录下的所有文件,之后,会在目录 dfs.name.dir 下创建文件。 2)文本不兼容,有可能时 namenode 与 datanode 的 数据里的 namespaceID、clusterID 不一致,找到两个 ID 位置,修改为一样即可解决。
- 4、MapReduce 中排序发生在哪几个阶段?这些排序是否可以避免?为什么?
1)一个 MapReduce 作业由 Map 阶段和 Reduce 阶段两部分组成,这两阶段会对数据排序,从这个意义上说,MapReduce 框架本质就是一个 Distributed Sort。 2)在 Map 阶段,Map Task 会在本地磁盘输出一个按照 key 排序(采用的是快速排序)的文件(中间可能产生多个文件,但最终会合并成一个),在 Reduce 阶段,每个 Reduce Task 会对收到的数据排序,这样,数据便按照 Key 分成了若干组,之后以组为单位交给 reduce()处理。 3)很多人的误解在 Map 阶段,如果不使用 Combiner便不会排序,这是错误的,不管你用不用 Combiner,Map Task 均会对产生的数据排序(如果没有 Reduce Task,则不会排序,实际上 Map 阶段的排序就是为了减轻 Reduce端排序负载)。 4)由于这些排序是 MapReduce 自动完成的,用户无法控制,因此,在hadoop 1.x 中无法避免,也不可以关闭,但 hadoop2.x 是可以关闭的。
- 5、hadoop的优化?
1)优化的思路可以从配置文件和系统以及代码的设计思路来优化 2)配置文件的优化:调节适当的参数,在调参数时要进行测试 3)代码的优化:combiner的个数尽量与reduce的个数相同,数据的类型保持一致,可以减少拆包与封包的进度 4)系统的优化:可以设置linux系统打开最大的文件数预计网络的带宽MTU的配置 5)为 job 添加一个 Combiner,可以大大的减少shuffer阶段的maoTask拷贝过来给远程的 reduce task的数据量,一般而言combiner与reduce相同。 6)在开发中尽量使用stringBuffer而不是string,string的模式是read-only的,如果对它进行修改,会产生临时的对象,二stringBuffer是可修改的,不会产生临时对象。 7)修改一下配置:以下是修改 mapred-site.xml 文件 a、修改最大槽位数:槽位数是在各个 tasktracker 上的 mapred-site.xml 上设置的,默认都是 2 <property> <name>mapred.tasktracker.map.tasks.maximum</name> <value>2</value> </property> <property> <name>mapred.tasktracker.reduce.tasks.maximum</name> <value>2</value> </property> b、调整心跳间隔:集群规模小于 300 时,心跳间隔为 300 毫秒 mapreduce.jobtracker.heartbeat.interval.min 心跳时间 mapred.heartbeats.in.second 集群每增加多少节点,时间增加下面的值 mapreduce.jobtracker.heartbeat.scaling.factor 集群每增加上面的个数,心跳增多少 c、启动带外心跳 mapreduce.tasktracker.outofband.heartbeat 默认是 false d、配置多块磁盘 mapreduce.local.dir e、配置 RPC hander 数目 mapred.job.tracker.handler.count 默认是 10,可以改成 50,根据机器的能力 f、配置 HTTP 线程数目 tasktracker.http.threads 默认是 40,可以改成 100 根据机器的能力 g、选择合适的压缩方式,以 snappy 为例: <property> <name>mapred.compress.map.output</name> <value>true</value> </property> <property> <name>mapred.map.output.compression.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>
- 6. 请列出你所知道的 hadoop 调度器,并简要说明其工作方法?
解答: 1.FIFO schedular:默认,先进先出的原则 2.Capacity schedular:计算能力调度器,选择占用最小,优先级高的先执行,以此类推。 3.Fair schedular:公平调度,所有的job具有相同的资源。
7.请简述 mapreduce 中,combiner,partition 作用?
解答: combiner是reduce的实现,在map端运行计算任务,减少map端的输出数据。 作用就是优化。 但是combiner的使用场景是mapreduce的map输出结果和reduce输入输出一样。 partition的默认实现是hashpartition,是map端将数据按照reduce个数取余,进行分区,不同的reduce来copy自己的数据。 partition的作用是将数据分到不同的reduce进行计算,加快计算效果。 1、combiner最基本是实现本地key的聚合,对map输出的key排序,value进行迭代。如下所示: map: (K1, V1) → list(K2, V2) combine: (K2, list(V2)) → list(K2, V2) reduce: (K2, list(V2)) → list(K3, V3) 2、combiner还具有类似本地的reduce功能. 例如hadoop自带的wordcount的例子和找出value的最大值的程序,combiner和reduce完全一致。如下所示: map: (K1, V1) → list(K2, V2) combine: (K2, list(V2)) → list(K3, V3) reduce: (K3, list(V3)) → list(K4, V4) 3、如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。 4、对于hadoop自带的wordcount的例子,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,而不必要等到所有的map结束再去进行reduce的value叠加。 combiner使用的合适,可以在满足业务的情况下提升job的速度,如果不合适,则将导致输出的结果不正确。
- 8. 相比于 HDFS1.0,HDFS 2.0 最主要的改进在哪几方面?
- 9.MapReduce 2.0 中,MRAppMaster 主要作用是什么,MRAppMaster如何实现任务容错的?
- 10. mr 的工作原理
解答:
Map—combiner—partition—sort—copy—sort—grouping—reduce
- 11.hive 有哪些方式保存元数据,各有哪些特点?
解答: 1、内存数据库derby,安装小,但是数据存在内存,不稳定 2、mysql数据库,数据存储模式可以自己设置,持久化好,查看方便
- 12.生产环境中为什么建议使用外部表?
解答: 1、因为外部表不会加载数据到hive,减少数据传输、数据还能共享。 2、hive不会修改数据,所以无需担心数据的损坏 3、删除表时,只删除表结构、不删除数据。
- 13.假如一个分区的数据主部错误怎么通过hivesql删除hdfs
解答:
alter table ptable drop partition (daytime='20140911',city='bj');
元数据,数据文件都删除,但目录daytime= 20140911还在
画出你们的大数据架构,并说一下如和做到精准一次、小文件的规避