Hadoop三种运行方式:
- 单机模式。优点:安装配置简单,运行在本地文件系统,便于调试和查看运行效果;缺点:数据量大时较慢,不能模拟分布式模式;
- 伪分布式模式。优点:运行在本地HDFS文件系统上,能够模拟完全分布模式,看到一些分布式处理的效果;
- 完全分布式模式。优点:运行在多台机器的HDFS之上,体现出分布式的优点;缺点:调试麻烦;
Hadoop网络用户界面:
- JobTracker:(http://jobtracker-host:50030),方便跟踪Job工作进程,查看工作统计和日志;
- NameNode: (http://jobtracker-host:50070),查看NameNode的基本情况,HDFS中的内容,NameNode日志;
性能调优:
- 合并小文件为大文件或使用CombineFileInputFormat
- 压缩文件:压缩Map输出文件,减少磁盘IO和网络传输
- 过滤数据:对数据进行预处理,过滤掉不需要的数据;例如使用Bloom Filter算法:Bloom Filter可以用在内连接,它每次检测返回值是“在集合内(可能错误)”和“不在集合内(绝对不在)”,这样可以保证不会把有用的数据过滤掉,虽然有少许无用数据漏网,确换来了时间和空间上的性能提升 。
- 修改map和reduce最大任务数设置;
可以重载下列方法实现复杂MapReduce函数:
- setup函数(Called once at the start of the task),类似于单元测试的setup
- cleanup函数(called once at the end of the task),类似于单元测试的teardown
- run函数(for more complete control over the execution of the Mapper).run函数类似于一个模板方法,它内部描述了setup,map,reduce,cleanup的执行先后顺序及过程参数,重载它就可以完全控制任务的执行过程,可以添加自己的控制内容(是否可以在这里实现链接MapReduce Job,类似于map之前还是一个map之类的?)。
MapReduce Job中全局共享数据:
- 通过HDFS文件做全局共享数据媒介。优点:可读可写;缺点:占用系统资源
- 任务启动之初将数据set到Job配置属性。优点:资源消耗小;缺点:不适合比较大的共享数据; 只读?
- 使用DistributedCache。优点:适合大量共享数据;缺点:只读;
链接MapReduce Job:
- 线性MapReduce Job流:将Job的启动代码设置成只有上一个Job结束才执行,将Job的输入设置成上一个Job的输出路径(如何设置?利用Run函数还是文件标志位等其他方法?)
- 复杂MapReduce Job流:利用ControlledJob类和JobControl类:正常配置各个Job,封装到ControlledJob,设置依赖关系,注入JobControl,JobControl.run)
- Job设置预处理和后处理过程:利用ChainMapper和ChainReducer(只支持旧API)