zoukankan      html  css  js  c++  java
  • 玩转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也可以在有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中
    mapperreducer个数 
    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() 获得文件

    hadoopjob显示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作监控图表即可

  • 相关阅读:
    arm架构与体系结构
    C语言双链表遍历,插入,删除
    C语言实现单链表的遍历,逆序,插入,删除
    C语言函数的变参实用与分析
    DEBUG宏
    运算中的临时匿名变量
    main函数的传参与返回
    存储类、作用域、生命周期、链接属性
    制作动态链接库并使用
    内存管理——进程创建,执行,缺页,终止
  • 原文地址:https://www.cnblogs.com/luwikes/p/2234737.html
Copyright © 2011-2022 走看看