zoukankan      html  css  js  c++  java
  • Hadoop2.6.0配置參数查看小工具

    前言

    使用Hadoop进行离线分析或者数据挖掘的project师,常常会须要对Hadoop集群或者mapreduce作业进行性能调优。

    或许你知道通过浏览器訪问http://master:18088/conf来查看配置信息。例如以下图所看到的:



    但是当Linuxproject师们仅仅面对命令行时,怎样查看呢?并且假设运维project师依据集群状况及运行历史使用shell、Python、ruby等脚本写些运维代码,甚至动态调整集群參数时,该怎么办呢?性能调优的前提是须要能准确知道眼下针对Hadoop集群或者mapreduce作业配置的參数。在MySQL中能够通过下面命令查询參数值:

    SHOW VARIABLES LIKE 'some_parameter'
    也能够使用下面命令查询參数值:

    SELECT @@session.some_parameter
    SELECT @@global.some_parameter
    或者直接查询information_schema.GLOBAL_VARIABLES得到參数值。

    可惜的是Hadoop没有提供相似的方式,这对于在Linux系统下查看參数进而改动參数添加了成本和负担。

    虽然我们能够

    本文将针对这一需求,基于Hadoop开发一个简单有用的工具查询查看各种參数。

    准备工作

    首先在Hadoop集群的Master节点的个人文件夹下创建workspace文件夹用于存储开发的Hadoop应用代码,命令例如以下:

    mkdir workspace
    进入workspace文件夹,開始编辑HadoopConfDisplay.java代码:


    为便于大家使用。我把代码都列出来,这事实上也是借鉴了网上别人的一些内容:

    import java.util.Map.Entry;
    
    import org.apache.hadoop.conf.*;
    import org.apache.hadoop.util.*;
    
    public class HadoopConfDisplay extends Configured implements Tool {
    
      static {
        Configuration.addDefaultResource("core-site.xml");
        Configuration.addDefaultResource("hdfs-site.xml");
        Configuration.addDefaultResource("mapred-site.xml");
        Configuration.addDefaultResource("yarn-site.xml");
      }
    
      @Override
      public int run(String[] args) throws Exception {
        Configuration conf = getConf();
        for (Entry<String, String> entry: conf) {
          System.out.printf("%s=%s
    ", entry.getKey(), entry.getValue());
        }
        return 0;
      }
    
      public static void main(String[] args) throws Exception {
        int exitCode = ToolRunner.run(new HadoopConfDisplay(), args);
        System.exit(exitCode);
      }
    }

    在Hadoop的根文件夹下创建myclass,此文件夹用于存储个人开发的Hadoop应用代码编译后的class或者jar包。我本地的文件夹为/home/jiaan.gja/install/hadoop-2.6.0/myclass/

    因为HadoopConfDisplay中使用了hadoop-common-2.6.0.jar中的类。所以编译HadoopConfDisplay.java时须要指定classpath。同一时候将编译后的class输出到/home/jiaan.gja/install/hadoop-2.6.0/myclass/文件夹下。运行命令例如以下:


    进入myclass文件夹,将编译好的HadoopConfDisplay的class打到jar包里:

    jar cvf mytest.jar *
    运行步骤例如以下:


    成果验证

    经过以上准备。终于我们生成了mytest.jar包文件。如今到了验证输出Hadoop配置參数的时候。

    输入下面命令:

    hadoop jar mytest.jar HadoopConfDisplay
    输出结果例如以下图:


    因为參数的确非常多,这里仅仅展示了当中的一部分信息。

    这里显示的信息虽然非常多,但是会发现非常多參数并没有包含进来。比方:

    mapreduce.job.ubertask.enable

    mapreduce.job.ubertask.maxreduces

    mapreduce.job.ubertask.maxmaps

    完好

        还记得本文刚開始说的通过web界面查看Hadoop集群參数的内容吗?我在我个人搭建的集群(有关集群的搭建能够參照《Linux下Hadoop2.6.0集群环境的搭建》)上訪问http://master:18088/conf页面时,能够找到以上缺失的參数例如以下所看到的:

    <configuration>
      <property>
        <name>mapreduce.job.ubertask.enable</name>
        <value>false</value>
        <source>mapred-default.xml</source>
      </property>
      <!-- 省略其他參数属性 -->
      <property>
        <name>mapreduce.job.ubertask.maxreduces</name>
        <value>1</value>
        <source>mapred-default.xml</source>
      </property>
      <!-- 省略其他參数属性 -->
      <property>
        <name>mapreduce.job.ubertask.maxmaps</name>
        <value>9</value>
        <source>mapred-default.xml</source>
      </property>
      <!-- 省略其他參数属性 -->
    </configuration>
    从以上内容我们能够看见缺失的參数都配置在mapred-default.xml中,而我之前编写的HadoopConfDisplay类的代码中并未包含此配置。此外。未包含进来的配置文件还有yarn-default.xml、core-default.xml(说明Hadoop參数默认是从*-default.xml的几个文件里读取的

    最后我们将这些内容也编辑进去,代码例如以下:

    import java.util.Map.Entry;
    
    import org.apache.hadoop.conf.*;
    import org.apache.hadoop.util.*;
    
    public class HadoopConfDisplay extends Configured implements Tool {
    
      static {
        Configuration.addDefaultResource("core-default.xml");
        Configuration.addDefaultResource("yarn-default.xml");
        Configuration.addDefaultResource("mapred-default.xml");
        Configuration.addDefaultResource("core-site.xml");
        Configuration.addDefaultResource("hdfs-site.xml");
        Configuration.addDefaultResource("mapred-site.xml");
        Configuration.addDefaultResource("yarn-site.xml");
      }
    
      @Override
      public int run(String[] args) throws Exception {
        Configuration conf = getConf();
        for (Entry<String, String> entry: conf) {
          System.out.printf("%s=%s
    ", entry.getKey(), entry.getValue());
        }
        return 0;
      }
    
      public static void main(String[] args) throws Exception {
        int exitCode = ToolRunner.run(new HadoopConfDisplay(), args);
        System.exit(exitCode);
      }
    }

    最后我们依照之前的方式编译打包为mytest.jar。再运行命令验证的结果例如以下图所看到的:

    之前缺失的參数都出来了,呵呵!

    这下大家能够愉快的进行性能调优了。


    后记:个人总结整理的《深入理解Spark:核心思想与源代码分析》一书如今已经正式出版上市。眼下京东、当当、天猫等站点均有销售,欢迎感兴趣的同学购买。


    京东(现有满150减50活动))http://item.jd.com/11846120.html 

    当当:http://product.dangdang.com/23838168.html 


  • 相关阅读:
    unexpected inconsistency;run fsck manually esxi断电后虚拟机启动故障
    centos 安装mysql 5.7
    centos 7 卸载mysql
    centos7 在线安装mysql5.6,客户端远程连接mysql
    ubuntu 14.04配置ip和dns
    centos7 上搭建mqtt服务
    windows eclipse IDE打开当前类所在文件路径
    git 在非空文件夹clone新项目
    eclipse中java build path下 allow output folders for source folders 无法勾选,该如何解决 eclipse中java build path下 allow output folders for source folders 无法勾选,
    Eclipse Kepler中配置JadClipse
  • 原文地址:https://www.cnblogs.com/llguanli/p/8436348.html
Copyright © 2011-2022 走看看