Hadoop的奇技淫巧

(2-6为性能优化)(7-9为函数介绍)

1.在JobHistory里面可以看到job相关的一些信息,用start-all启动Hadoop时便可以进入端口号8088查看查看信息,但是无法进入端口号19888查看history。

  只需要启动jobhistory即可,命令:mapred historyserver。想停止的话ctrl+c退出即可。

2.如果有很多小文件,单个文件产生一个mapper,资源比较浪费,把小文件预处理为大文件,再将大文件作为输入,可以节省很多的时间。使用CombineFileInputFormat(是Hadoop类库中的一个抽象类)也可以将多个文件打包到一个输入单元中,使性能得到提高。

3.dfs.block.size这个是块大小的设置,也就是说文件按照多大的size来切分块。一般来说,块的大小也决定了你map的数量。dfs.replication是复制数量的设置,不能为0。设置为1,就是在集群中存一份。设置为2,即做一份备份,也就是说数据在集群中有2份。这两项在hdfs-site.xml配置文件中设置。

4.Map阶段的输出首先存储在一定大小的内存缓冲区中,如果Map输出的大小超过一定限度,Map task就会将结果写入磁盘,等Map任务结束后再将它们复制到Reduce任务的节点上,如果数据量大,中间的数据交换会占用很多时间。可以通过将mapred.compress.map.output属性设置为true来对Map的输出数据进行压缩,同时还可以设置Map输出数据的压缩格式,通过设置mapred.map.output.compression.codec属性即可进行压缩格式的设置。

5.mapred.tasktracker.map.tasks.maximum的默认值是2,属性mapred.tasktracker.reduce.tasks.maximum的默认值也为2,可以在mapred-site.xml文件中将其设置为一个较大的值,提高整体性能。

6.mapred.child.java.opts这个参数是配置每个map或reduce使用的内存数量。默认的是200M。对于这个参数,我个人认为,如 果内存是8G,CPU有8个核,那么就设置成1G就可以了。实际上,在map和reduce的过 程中对内存的消耗并不大,但是如果配置的太小,则有可能出现”无可分配内存”的错误。

7.setup函数:在task启动之后只调用一次。可以将Map或Reduce函数中的重复处理放置到setup函数中,可以将Map或Reduce函数处理过程中可能使用的全局变量进行初始化,或从作业信息中获取全局变量,还可以监控task的启动。 setup只是对应task上的全局操作,而不是整个作业的全局操作。

8.cleanup函数:和setup函数正好相反,在task销毁之前执行一次。

9.run函数:如果想更完备的控制Map或者Reduce阶段,可以覆盖此函数,并像普通的Java类中的函数一样添加自己的控制内容,比如增加自己的task启动后和销毁之前的处理。

10.不断更新中…

posted on 2016-03-04 20:00  Satchmo丶  阅读(338)  评论(0编辑  收藏  举报