- 浏览: 588056 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
maleking:
太感谢了。新手搭建hadoop集群环境,dat ...
启动hadoop后没有datanodes的问题 -
system_mush:
NoClassDefFoundError: com/google/common/collect/Maps -
di1984HIT:
呵呵,我学习一下。
Katta源码分析 -
di1984HIT:
呵呵, 不管怎么说,挺好的。
zookeeper3.3学习笔记2:配置参数介绍 -
zoezhang:
谢谢了,可以解决
maven2报cannot be cast to javax.servlet.Filter错误解决
从三个方面着手优化 :
1. hadoop配置
2. 设计mapred/job
3. 代码级别.
一. conf/hadoop-site.xml配置.
经验要求高, 特别需要结合实际情况.
典型参数如
复制因子,
mapred.child.java.opts,
mapred.tasktracker.map.tasks.maximum,
mapred.tasktracker.reduce.tasks.maximum,
mapred.map.tasks,
mapred.reduce.tasks,
fs.inmemory.size.mb,
dfs.block.size
等等
二. 在同一个job内完成尽可能多的计算任务, 主要是设计key和自定义OutputFormat, 将能合并的计算任务合并.
举例 : 用户访问行为(userid, ip, cookie), 分别统计每个用户的ip数和cookie数.
最简单的设计, 是使用量个job, 分别计算ip数和cookie数.但是我们可以按照下面的思路, 在一个job中完成这两项计算 :
(a). 把userid和字段存储到key中
public class UserKey implements WritableComparable<UserKey>{
int userId;//useridbyte field;//0代表ip, 1代表cookie@Overridepublic int compareTo(UserKey o) {if(userId > o.userId)return 1;if(userId < o.userId)return -1;if(field > o.field)return 1;if(field < o.field)return -1;return 0;}@Overridepublic void readFields(DataInput in) throws IOException {// TODO Auto-generated method stub}@Overridepublic void write(DataOutput out) throws IOException {// TODO Auto-generated method stub}
}
(b). 实现自定义的OutputFormat, 下面是两处关键代码如下 :
(x).
SequenceFile.Writer[] writers = new SequenceFile.Writer[2];
writers[0] = SequenceFile.createWriter(FileSystem.get(conf), conf, "ip", IntWritable.class, IntWritable.class, CompressionType.BLOCK, new DefaultCodec());
writers[1] = SequenceFile.createWriter(FileSystem.get(conf), conf, "field", IntWritable.class, IntWritable.class, CompressionType.BLOCK, new DefaultCodec());
(xx).
writers[key.field].append(key.userId, value.get());
三. 避免不必要的reduce任务.
(1). 假定要处理的数据是排序且已经分区的. 或者对于一份数据, 需要多次处理, 可以先排序分区.
(2). 自定义InputSplit, 将单个分区作为单个mapred的输入.
(3). 在map中处理数据, Reducer设置为空.
这样, 既重用了已有的 "排序", 也避免了多余的reduce任务.
四. 使用自定义的MapRunnable.
hadoop自带了两个MapRunnable,
(1). 一个是默认的单线程MapRunnable, org.apache.hadoop.mapred.MapRunner
(2).另一个是多线程的, org.apache.hadoop.mapred.lib.MultithreadedMapRunner.
根据特定情况, 可以自定义MapRunnable,
(1). 启用多线程, 比如web爬行时, 可启用多线程抓取网页.
(2). 避免map时, 单台tasktracker上辅助数据冗余, 比如在多模匹配时, 避免生成多份DFA.
五. 在某些情况下, 利用数据分布特性设计PARTITIONER的分区算法, 避免单个mapred消耗时间过长.
这跟木桶原理有些神似.
比如处理大量字符串时,
(1). 已知首字不同的字符串之间不存在任何关联关系
(2). 原始数据在某些 "首字" 上分布密集, 另一些 "首字" 上分布稀疏.
例如, 原始数据中, 1亿个以3开头, 1亿个以7开头, 3个以6开头.
那么,
(1). 如果以首字对4求余分区, 则 "1亿个以3开头" 和 "1亿个以7开头"将落在同一分区.若hadoop群集只支持同时2个map任务, 则...
(2). 如果以首字对3求余分区, 则 "1亿个以3开头" 和 "1亿个以7开头"将落在不同分区.
六. 最大限度地重用对象, 避免对象的生成/销毁开销.
该点在hadoop自带的org.apache.hadoop.mapred.MapRunner中尤为突出,
它使用同一个key对象和同一个value对象不停读取原始数据, 再将自身交给mapper处理.
(此处注意, 若要保留该对象的即时状态, 需要clone, 深克隆或浅克隆.)
七. 在逻辑意义上, 合并同一对象. 如dotnet和java中的字符串INTERN技术.
八. 根据已有条件, 简化循环判定.
比如, for(int i = 0; i < end && i < size; i++);
可以改成 :
end = end < size ? end : size;
for(int i = 0; i < end; i++);
九. 降低多线程数目, 而让固定数目的线程循环处理.
比如, 一台机器8个CPU, 现在需要处理80亿个数据,
那么下面两个方案 :
(1). 启动800个线程, 每个线程处理80亿/800个数据.
(2). 启动8个线程(注意, 此处是8个), 每个线程循环处理, 每次循环处理100万个.
通常我个人选择方案(2).因为 :
(1). 最大限度利用了CPU.
(2). 避免了线程调度.
(3). 在java中, 可以使用AtomicInteger控制线程循环, AtomicInteger的效率很高.
(4). 有时, 还可以避免单个线程消耗时间过长.
十. 使用位移替代浮点数计算. 比如用 100 >> 3替代100 * 0.125.
(另外, 我们会需要将某个中间值乘以一个调节因子(经验值), 比如乘以0.12,
如果乘以0.12和0.124 "差不多" 时, 可以考虑直接使用位移).
十一. 避免循环体内不必要的判断逻辑, 与第八条不同.
比如, 处理10亿个数据, 每遇到一个有效数据时, 需要同前一个有效数据进行关联处理(或与前一个中间值进行关联处理),
for(int i = 0; i < size; i++)
{
//1. 判定是否存在前一个有效数据
//2. 如果不存在前一个有效数据, 则continue;
//3. 如果存在前一个有效数据, 则进行关联处理, 再continue.
}
通常在此种需求下, 一旦遇到一个有效数据, 必定会产生一个可供后续紧邻数据关联的值,
那么 :
int i = 0;
for(int i = 0; i < size; i++)
{
//1. data[i]是否有效?
//2. data[i]无效, continue;
//3. data[i]有效, break;
}
for(; i < size; i++)
{
//与前一个有效数据进行关联处理, 再continue.
}
十二. 方法调用过程, 辅助数据尽量放在方法体内, 避免使用全局辅助数据, 一来节省内存, 二来提高对象可重用性.
十三. 尽量不要生成转瞬即逝的对象, 或者专门构建专属对性来完成这一任务. 比如提供直接使用构造函数参数进行序列化的静态方法, 避免先使用参数构造对象再进行序列化.
十四. 利用-1 和 1的关联性, 减少内存使用量.
十五. 对于方方正正的多位数组Arr[d0][d1][d2]..[dn], 且di >> d(i+1)时, 可以考虑使用一维数组替代.
这是因为java中多位数组实际上使用 "数组的数组" 实现的.
发表评论
-
apache hadoop 2
2012-06-14 00:54 1179apache hadoop 2.x 是在1.x版本上做了重 ... -
hadoop乱码
2011-12-12 14:36 2055文件存入hadoop出现乱码,尤其是在windows下的c ... -
Partitioner, SortComparator and GroupingComparator in Hadoop
2011-12-12 14:15 1354hadoop 0.20.2 api里面,作业被重新定义 ... -
HDFS Federation设计动机与基本原理
2011-12-06 10:50 1300HDFS Federation是Hadoop最新发布版本H ... -
Apache Hadoop 0.23 MapReduce 2.0 (MRv2 or YARN) 介绍
2011-12-05 15:27 2732MapReduce 在hadoop 0.23版本中经历了一次大 ... -
Apache Hadoop 0.23 HDFS Federation介绍
2011-12-04 23:31 2884HDFS Federation 为了 ... -
读hadoop0.23源码(1):Job
2011-11-23 10:47 1246每次配置job的时候,最后一步总是 System.ex ... -
MapReduce名词解释
2011-11-08 10:23 1501在网上收集了一些mapreduce中常用的一些名词的解释, ... -
hadoop问题汇总
2011-11-02 09:39 11221.系统时钟。zookeeper会根据系统时钟判断两台机器多久 ... -
进程间通信IPC、LPC、RPC
2011-09-06 11:20 998进程间通信(IPC,I ... -
hadoop的一个恶心错误
2011-09-02 10:17 929今早机器被网管重启了,启动hadoop发现节点都启动不了 s ... -
Hadoop的配置类 Configuration
2011-08-04 14:11 1979Hadoop的配置类是由资源指定 ... -
hadoop错误:"failed to report status for 600 seconds"
2011-07-19 14:39 2711<property> <name ... -
Hadoop传递参数的方法总结
2011-07-07 14:39 3225写MapReduce程序通常要传递各种各样的参数,选择合 ... -
hadoop hdfs的一些用法
2011-07-04 09:25 1471Example 3-1. Displaying files f ... -
Changes of Hadoop 0.20笔记
2011-07-01 13:21 1128最近学习hadoop 0.20.1,网上找到一篇文章《Wh ... -
hadoop0.18.3 到 0.20.2
2011-07-01 13:10 1813以前用的是0.18.3,现在改用0.20.2,結果发现ma ... -
自定义hadoop map/reduce输入文件切割InputFormat
2011-07-01 11:17 2499hadoop会 ... -
Hadoop开发常用的InputFormat和OutputFormat
2011-07-01 11:02 1527Hadoop中的Map Reduce框架依赖InputFo ... -
hadoop inputformat
2011-07-01 10:09 2329作业的输入 InputFormat 为Map/Red ...
相关推荐
在Linux环境下配置Hadoop的伪分布式模式是学习和测试Hadoop功能的重要步骤。...但请记住,这只是Hadoop学习旅程的起点,实际生产环境中还需要考虑更多因素,如安全性、性能优化、容错性和集群管理。
以上只是一部分属性的简要介绍,实际上,mapred-default.xml文件中包含了更多的配置项,这些配置项可以根据实际需求进行调整以优化MapReduce作业的性能。在使用Hadoop进行大数据处理时,合理配置这些参数是十分关键...
- Reducer:源代码在`hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/Reducer.java`,对Mapper输出的中间结果进行聚合和处理。...
`etc/hadoop/hadoop-env.sh`中设置环境变量,`etc/hadoop/core-site.xml`和`etc/hadoop/hdfs-site.xml`配置HDFS参数,`etc/hadoop/yarn-site.xml`和`etc/hadoop/mapred-site.xml`配置YARN和MapReduce参数。...
- 编辑`/usr/local/hadoop/etc/hadoop/mapred-site.xml`,指定MapReduce框架使用YARN。 8. **格式化NameNode** 使用`hdfs namenode -format`命令首次启动时对NameNode进行格式化。 9. **启动Hadoop服务** 启动...
最后,配置MapReduce,在`/opt/hadoop/etc/hadoop/mapred-site.xml`中: ```xml <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> ``` 启动Hadoop服务,首先格式化...
Hadoop 2.2.0 是 Apache Hadoop 的一个关键版本,它包含了众多改进和优化,使得这个分布式计算框架在处理大数据集时更加高效和稳定。在这个配置文件中,我们将会探讨Hadoop 2.2.0 在4台CentOS 6.4系统上运行所需的...
4. 修改`etc/hadoop/mapred-site.xml`模板文件,指定MapReduce框架: ```xml <name>mapreduce.framework.name</name> <value>yarn</value> </property> ``` 5. 修改`etc/hadoop/slaves`文件,列出所有工作节点的...
# scp core-site.xml hdfs-site.xml mapred-site.xml hadoop3:/home/hadoop/hadoopinstall/hadoop-0.20.2/conf/ ``` 通过以上步骤,您可以成功搭建一个由一个NameNode和两个DataNodes组成的Hadoop集群。这为进行...
- 修改`$HADOOP_HOME/etc/hadoop/mapred-site.xml`,设置MapReduce运行模式为YARN: ```xml <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> ``` - 同时,...
5. 配置Hadoop配置文件:修改`etc/hadoop/core-site.xml`、`etc/hadoop/hdfs-site.xml`、`etc/hadoop/mapred-site.xml`和`etc/hadoop/yarn-site.xml`,指定集群的相关参数,如namenode和datanode地址,以及YARN的...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和存储。它的设计目标是能够高效地处理和存储海量数据,使得企业可以...在实践中,不断优化配置和理解Hadoop的工作原理,将有助于提升大数据处理效率。
1. 修改配置文件:主要修改`etc/hadoop/core-site.xml`、`etc/hadoop/hdfs-site.xml`、`etc/hadoop/mapred-site.xml`和`etc/hadoop/yarn-site.xml`。这些文件中需要设置包括HDFS、MapReduce和YARN的相关参数,如...
- 修改`etc/hadoop/mapred-site.xml`,配置MapReduce的相关参数,如JobHistoryServer地址等。 4. **格式化NameNode**: 在NameNode节点上执行`hdfs namenode -format`命令,初始化HDFS文件系统。 5. **启动...
### Hadoop 2.7 配置详解 #### 一、环境搭建与配置流程 **解压安装** 在Linux环境下,首先需要下载并解压Hadoop的安装包。...需要注意的是,在实际生产环境中,还需要根据实际情况对集群进行更细致的配置和优化。
此外,还可以进一步配置Hadoop的安全性和性能优化等高级功能。 通过本教程,你应该能够成功地在Ubuntu 16.04虚拟机环境中搭建一个基本的Hadoop完全分布式集群。如果在安装过程中遇到任何问题,欢迎随时交流学习。
配置Hadoop的主要文件包括`core-site.xml`,`hadoop-env.sh`,`yarn-env.sh`,`hdfs-site.xml`,`mapred-site.xml`和`yarn-site.xml`。 - **配置core-site.xml**: 设置Hadoop临时目录和默认文件系统: ```xml ...
【Hadoop集群环境搭建】 Hadoop是一个开源的分布式计算框架,它允许在大规模...在实际生产环境中,还需要考虑更多的配置和优化,如配置Hadoop的日志聚合、安全认证(如Kerberos)、YARN以替换旧版的MapReduce框架等。
3. 修改Hadoop配置文件:主要修改`etc/hadoop/core-site.xml`(核心配置)、`etc/hadoop/hdfs-site.xml`(HDFS配置)和`etc/hadoop/mapred-site.xml`(MapReduce配置)。 三、虚拟集群设置 1. 使用虚拟化软件,如...
例如,`org.apache.hadoop.mapred.MapTask`和`org.apache.hadoop.mapreduce.ReduceTask`分别对应Map和Reduce任务的实现,开发者可以通过阅读这些源码了解任务执行的详细流程。 7. **工具集成**:有许多开源工具可以...