您的位置:首页 > 运维架构

玩转Hadoop的几个小技巧

2013-03-01 09:49 316 查看
Hadoop添加节点的方法

自己实际添加节点过程:

1. 先在slave上配置好环境,包括ssh,jdk,相关config,lib,bin等的拷贝;

2. 将新的datanode的host加到集群namenode及其他datanode中去;

3. 将新的datanode的ip加到master的conf/slaves中;

4. 重启cluster,在cluster中看到新的datanode节点;

5. 运行bin/start-balancer.sh,这个会很耗时间

备注:

1. 如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mr的工作效率;

2. 也可调用bin/start-balancer.sh 命令执行,也可加参数 -threshold 5

threshold 是平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长。

3. balancer也可以在有mr job的cluster上运行,默认dfs.balance.bandwidthPerSec很低,为1M/s。在没有mr job时,可以提高该设置加快负载均衡时间。

其他备注:

1. 必须确保slave的firewall已关闭;

2. 确保新的slave的ip已经添加到master及其他slaves的/etc/hosts中,反之也要将master及其他slave的ip添加到新的slave的/etc/hosts中

mapper及reducer个数

url地址: http://wiki.apache.org/hadoop/HowManyMapsAndReduces
较好的建议:

The right number of reduces seems to be 0.95 or 1.75 multiplied by (<no. of nodes> * mapred.tasktracker.reduce.tasks.maximum).increasing the number of reduces increases the framework overhead, but increases load balancing and lowers the cost of failures.

<property>

<name>mapred.tasktracker.reduce.tasks.maximum</name>

<value>2</value>

<description>The maximum number of reduce tasks that will be run

simultaneously by a task tracker.

</description>

</property>
单个node新加硬盘

1.修改需要新加硬盘的node的dfs.data.dir,用逗号分隔新、旧文件目录

2.重启dfs

同步hadoop 代码

hadoop-env.sh

# host:path where hadoop code should be rsync'd from. Unset by default.

# export HADOOP_MASTER=master:/home/$USER/src/hadoop

用命令合并HDFS小文件

hadoop fs -getmerge <src> <dest>

重启reduce job方法

Introduced recovery of jobs when JobTracker restarts. This facility is off by default.

Introduced config parameters "mapred.jobtracker.restart.recover", "mapred.jobtracker.job.history.block.size", and "mapred.jobtracker.job.history.buffer.size".

还未验证过。

HDFS退服节点的方法

目前版本的dfsadmin的帮助信息是没写清楚的,已经file了一个bug了,正确的方法如下:

1. 将 dfs.hosts 置为当前的 slaves,文件名用完整路径,注意,列表中的节点主机名要用大名,即 uname -n 可以得到的那个。

2. 将 slaves 中要被退服的节点的全名列表放在另一个文件里,如 slaves.ex,使用 dfs.host.exclude 参数指向这个文件的完整路径

3. 运行命令 bin/hadoop dfsadmin -refreshNodes

4. web界面或 bin/hadoop dfsadmin -report 可以看到退服节点的状态是 Decomission in progress,直到需要复制的数据复制完成为止

5. 完成之后,从 slaves 里(指 dfs.hosts 指向的文件)去掉已经退服的节点

附带说一下 -refreshNodes 命令的另外三种用途:

2. 添加允许的节点到列表中(添加主机名到 dfs.hosts 里来)

3. 直接去掉节点,不做数据副本备份(在 dfs.hosts 里去掉主机名)

4. 退服的逆操作——停止 exclude 里面和 dfs.hosts 里面都有的,正在进行 decomission 的节点的退服,也就是把 Decomission in progress 的节点重新变为 Normal (在 web 界面叫 in service)

distribute cache使用

类似一个全局变量,但是由于这个变量较大,所以不能设置在config文件中,转而使用distribute cache

具体使用方法:(详见《the definitive guide》,P240)

1. 在命令行调用时:调用-files,引入需要查询的文件(可以是local file, HDFS file(使用hdfs://xxx?)), 或者 -archives (JAR,ZIP, tar等)

% hadoop jar job.jar MaxTemperatureByStationNameUsingDistributedCacheFile \

-files input/ncdc/metadata/stations-fixed-width.txt input/ncdc/all output

2. 程序中调用:

public void configure(JobConf conf) {

metadata = new NcdcStationMetadata();

try {

metadata.initialize(new File("stations-fixed-width.txt"));

} catch (IOException e) {

throw new RuntimeException(e);

}

}

另外一种间接的使用方法:在hadoop-0.19.0中好像没有

调用addCacheFile()或者addCacheArchive()添加文件,

使用getLocalCacheFiles() 或 getLocalCacheArchives() 获得文件

hadoop的job显示web

There are web-based interfaces to both the JobTracker (MapReduce master) and NameNode (HDFS master) which display status pages about the state of the entire system. By default, these are located at [WWW] http://job.tracker.addr:50030/and
[WWW] http://name.node.addr:50070/ .

hadoop监控

OnlyXP(52388483) 131702

用nagios作告警,ganglia作监控图表即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: