• 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 


  • 相关阅读:
    Linux关闭You have new mail in /var/spool/mail/root提示
    表单验证提交内容不能为空的几种方法
    CSS选择器的优先级
    SQL Server BCP 资料导入导出
    软考数据库-系统开发与软件工程
    软考数据库-无损联接分解
    软考数据库-数据结构
    反转字符串, 以单词反转句子
    数组中是否存在两数之和等于目标值
    栈 (Swift数组实现栈)
  • 原文地址:https://www.cnblogs.com/llguanli/p/8436348.html
Copyright © 2020-2023  润新知