首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Hadoop 资源+配备+性能

2012-06-28 
Hadoop 资源+配置+性能Hadoop 资源?淘宝Hadoop的技术分享http://rdc.taobao.com/blog/dw/archives/categor

Hadoop 资源+配置+性能

Hadoop 资源

?

淘宝Hadoop的技术分享

http://rdc.taobao.com/blog/dw/archives/category/hadoop

http://rdc.taobao.com/blog/dw/archives/244

?

Hadoop基本流程与应用开发

http://www.infoq.com/cn/articles/hadoop-process-develop

?

Hadoop性能调优

http://wiki.apache.org/hadoop/PerformanceTuning

?

HBase性能调优

http://wiki.apache.org/hadoop/Hbase/PerformanceEvaluation

?

?

hadoop中使用lzo压缩格式

http://code.google.com/p/hadoop-gpl-compression/wiki/FAQ

http://blog.csdn.net/workhardupc100/archive/2010/03/04/5345013.aspx

http://www.cloudera.com/blog/2009/11/hadoop-at-twitter-part-1-splittable-lzo-compression/

?

给MR加jar

hadoop jar hadoop-examples.jar wordcount -files cachefile.txt -libjars mylib.jar input output

?

Hadoop DFS Used是如何计算的? (集群中所有dfs.data.dir目录相加)

bin/hadoop fs -du /

http://hadoop.hadoopor.com/redirect.php?tid=562&goto=lastpost

?

-----------------------------

Hadoop 集群参数配置

hadoop-0.20.2\docs\cluster_setup.html

?

MapReduce的同时?,(DFS Used : 8.21 GB ?)大小会增加,因为被使用。默认存放Job中间文件的路径是dfs.data.dir(/tmp目录,由Hadoop自动清理,或者手动hadoop fs -rmr /tmp )

?

默认提交的Job,都会在后台执行,即使前台停止。

?

Kiss不要的Job

bin/hadoop job -kill? job_201004141024_0002

?

配置每个Task对应的Map和Reduce数量

conf/mapred-site.xml

(The maximum number of Map/Reduce tasks, which are run simultaneously on a given TaskTracker, individually. )

mapred.tasktracker.map.tasks.maximum=2

mapred.tasktracker.reduce.tasks.maximum=2

默认为2,如果有3台hadoop机器,则同时最多6个Map在执行。

?

mapred.map.tasks (The default number of map tasks per job.)

配置MapReduce的大小

?

关于多少Map和Reduce的建议

Map的数目通常是由输入数据的大小决定的,一般就是所有输入文件的总块(block)数。

?

Reduce的数目建议是0.95或1.75乘以 (<no. of nodes> * mapred.tasktracker.reduce.tasks.maximum)。

用0.95,所有reduce可以在maps一完成时就立刻启动,开始传输map的输出结果。用1.75,速度快的节点可以在完成第一轮reduce任务后,可以开始第二轮,这样可以得到比较好的负载均衡的效果。

?

http://wiki.apache.org/hadoop/HowManyMapsAndReduces

?

-----------------------------

Hadoop + Hbase 性能

?

?-----------------------------

Hadoop 性能测试

?

1千万条记录,3台机器,每台机器最多并行10个Map

/home/bmb/jdk1.6.0_16/bin/java? -cp examples.zip examples.CreateLogFile? test.log 10000000

1KW=350.74MB =5.46 Block

?

bin/hadoop fs -put test.log hadoop-performance-test

?

计算文件中,同一时间生成的行数

/home/iic/hadoop-0.20.2/bin/hadoop jar?hadoop-examples.zip examples.HadoopMRTest hadoop-performance-test? hadoop-performance-test-out? 1

?

第一次启动,Hadoop自动分配 map6, reduce 1

1KW/39=25W/s

10/04/14 13:43:36

10/04/14 13:44:15

?

从Job的Complet Map中,可以看到,每台机器运行2个Map

?

查看结果

bin/hadoop fs -cat hadoop-performance-test-out/part-r-00000

1271222992947?349

验证:

grep 1271222992947 test.log |wc -l

删除目录,方便重新测试

bin/hadoop fs -rmr hadoop-performance-test-out

bin/hadoop fs -rmr hadoop-performance-test

??

?

1亿条记录==3.61GB=58 Block

/home/bmb/jdk1.6.0_16/bin/java? -cp examples.zip examples.CreateLogFile? test_10KW.log 100000000

bin/hadoop fs -put test_10KW.log hadoop-performance-test

?

/home/iic/hadoop-0.20.2/bin/hadoop jar hadoop-examples.zip examples.HadoopMRTest hadoop-performance-test? hadoop-performance-test-out 6

?

指定reduce 6,Hadoop自动分配 map 58?

10KW/197=50.76W/s

10/04/14 14:14:40

10/04/14 14:17:57??

?

?

?-----------------------------

此例子3台机器, replication=2 , 默认块大小64M,功能,把表mrtest的列content的值反转到列text里面

?

初始100W数据,执行Map Reduce,只有1个Map.

(重新清理Hadoop后,统计得:刚开始DFS Used : 100.03 KB ,创建完后DFS Used : 234.27 MB,Replication=2,

一次MR后,DFS Used : 345.88 MB ,同时HBase中表mrtest的内容被重新分布(原因是Hbase是Readonly,当执行Update操作,必然导致重新创建),DFS Used之所以增大,是因为Hadoop保存数据默认3个时间版本,所以一次MR后,多了一个版本的数据

重启Hadoop,DFS Used : 262.87 MB

第二次MR后,DFS Used : 537.04 MB ,重启Hadoop,DFS Used : 358.61 MB

第三次MR后,DFS Used : 431.89 MB ?,重启Hadoop,DFS Used : 454.35 MB

?

/home/iic/hadoop-0.20.2/bin/hadoop jar? examples.zip? examples.TestTableMapReduce?examples.TestTableMapReduce

?

时间执行 (100W /?(8*60) ) = 2083个记录/每秒

10/04/13 14:08:33

10/04/13 14:16:25

?

cd /home/iic/hadoop-0.20.2/examples

./run_test.sh 生成900W的数据

/home/iic/bmb/jdk1.6.0_16/bin/java? -cp .: com.test.hadoop.hbase.HBaseTest? 1 10000000

?

同样环境,测试1000W数据

出现java.lang.ClassNotFoundException: org.apache.hadoop.hbase.mapreduce.TableOutputFormat

原因:新增的Hadoop机器:5.12类路径没有包含HBase,在conf/hadoop-env.sh中,加入类库引用

export HBASE_HOME=/home/iic/hbase-0.20.3
export HADOOP_CLASSPATH=$HBASE_HOME/hbase-0.20.3.jar:$HBASE_HOME/hbase-0.20.3-test.jar:$HBASE_HOME/conf:${HBASE_HOME}/lib/zookeeper-3.3.0.jar

?

??

1000W的数据,大小达到3个Block,?执行Map Reduce,这时Map数量为3,由于是对Hbase进行MapReduce,而HBase最多的Map值是通过以下计算(for the list of regions and makes a map-per-region or mapred.map.tasks maps, whichever is smaller )。

?

时间执行 (1000W /?(33*60) ) = 5050个记录/每秒

10/04/13 18:48:52

10/04/13 19:20:06??

?

修改Map为6(实际Hadoop Job自动生成5)和Reduce的数量3

从5.11拷贝到2.79

cd? /home/iic/hadoop-0.20.2

scp examples.zip iic@192.168.2.79:/home/iic/hadoop-0.20.2/

?

时间执行 (1000W /?(21*60) ) = 7936个记录/每秒

10/04/13 19:43:55

10/04/13 20:04:17

?

修改map为9(Hadoop自动转成16,同时把/hbase/mrtest分成17个目录,17个Block),Reduce为9

(注:Hadoop会缓存mapred.map.tasks,除非出现新的参数)

mapred-site.xml

? <property>
??? <name>mapred.map.tasks</name>
??? <value>9</value>
? </property>

时间执行 (1000W /?(18*60) ) = 9259个记录/每秒

10/04/14 09:27:36

10/04/14 09:45:55

?

按照上面的配置,再次执行一遍,Map变成17(Hadoop和Hbase会自动根据Block大小,增加Map数量)。

从日志看,Reduce会存在网络的Block复制,如果网速快,也会增加MR的速率

当Map为17的时候,每台机器的CPU从Map为3的20%增加到100%多。

但是执行到最后,2.79和5.11的Hbase,region server当掉。导致执行失败。

?

重启Hadoop和Hbase,再执行

Map自动变成18,Reduce 9

时间执行 (1000W /?(18*60) ) = 9259个记录/每秒

10/04/14 10:27:39

10/04/14 10:45:48

?

每次执行后,Block数量一直在增加

虽然Map是18,但是由于只有3台机器,而且默认mapred.tasktracker.map.tasks.maximum=2,每个TaskTracker最多同时并行2个Map,所以18个Map不是全部并行执行。

最多同时6个Map。同理最多同时6个Task。

?

修改3台机器的参数mapred-site.xml,重启Hadoop

?<property>
??<name>mapred.tasktracker.map.tasks.maximum</name>
??<value>10</value>
?</property>

?<property>
??<name>mapred.tasktracker.reduce.tasks.maximum</name>
??<value>10</value>
?</property>

?

时间执行 (1000W /?(15*60) ) = 11111个记录/每秒

10/04/14 11:36:49

10/04/14 11:51:56

?

?

?测试的时候,2.79的region server 挂了,用以下命令重启

bin/hbase-daemon.sh start regionserver

?

热点排行