分享

hadoop使用小技巧

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也可以在有mrjob的cluster上运行,默认dfs.balance.bandwidthPerSec很低,为1M/s。在没有mr job时,可以提高该设置加快负载均衡时间。
其他备注:
1. 必须确保slave的firewall已关闭;
2. 确保新的slave的ip已经添加到master及其他slaves的/etc/hosts中,反之也要将master及其他slave的ip添加到新的slave的/etc/hosts中
mapperreducer个数
url地址: http://wiki.apache.org/hadoop/HowManyMapsAndReduces
较好的建议:
The right number of reduces seems to be 0.95 or 1.75 multiplied by (<no. ofnodes> * mapred.tasktracker.reduce.tasks.maximum).increasing the number ofreduces increases the framework overhead, but increases load balancing andlowers the cost of failures.
<property>
  <name>mapred.tasktracker.reduce.tasks.maximum</name>
  <value>2</value>
  <description>The maximum number of reduce tasks that will berun
  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 bydefault.
# export HADOOP_MASTER=master:/home/$USER/src/hadoop

用命令合并HDFS小文件
hadoopfs -getmerge<src><dest>

重启reduce job方法
Introduced recovery of jobs when JobTracker restarts. This facility is off bydefault.
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/hadoopdfsadmin -refreshNodes
4. web界面或 bin/hadoopdfsadmin-report 可以看到退服节点的状态是Decomission in progress,直到需要复制的数据复制完成为止
5. 完成之后,从slaves 里(指dfs.hosts指向的文件)去掉已经退服的节点

附带说一下 -refreshNodes命令的另外三种用途:
2. 添加允许的节点到列表中(添加主机名到dfs.hosts里来)
3. 直接去掉节点,不做数据副本备份(在dfs.hosts里去掉主机名)
4. 退服的逆操作——停止 exclude 里面和dfs.hosts里面都有的,正在进行decomission的节点的退服,也就是把Decomission inprogress 的节点重新变为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/alloutput
2. 程序中调用:
   public void configure(JobConfconf) {
      metadata = new NcdcStationMetadata();
      try {
        metadata.initialize(newFile("stations-fixed-width.txt"));
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
   }
另外一种间接的使用方法:在hadoop-0.19.0中好像没有
调用addCacheFile()或者addCacheArchive()添加文件,
使用getLocalCacheFiles() 或getLocalCacheArchives() 获得文件

hadoopjob显示web
There are web-based interfaces to both the JobTracker (MapReduce master) andNameNode (HDFS master) which display status pages about the state of the entiresystem. 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作监控图表即可
更多精彩内容请关注超人学院微信公众号: 超人学院微信.jpg

已有(2)人评论

跳转到指定楼层
xuliang123789 发表于 2016-6-22 09:31:08
谢谢楼主,学习一下,赞~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条