前言

使用Hadoop进行离线分析或者数据挖掘的工程师,经常会需要对Hadoop集群或者mapreduce作业进行性能调优。也许你知道通过浏览器访问http://master:18088/conf来查看配置信息,如下图所示:

但是当Linux工程师们只面对命令行时,如何查看呢?而且如果运维工程师根据集群状况及运行历史使用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\n", 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\n", 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:核心思想与源码分析》一书现在已经正式出版上市,目前京东、当当、天猫等网站均有销售,欢迎感兴趣的同学购买。

京东:http://item.jd.com/11846120.html

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

Hadoop2.6.0配置参数查看小工具的更多相关文章

  1. Hadoop2.6.0配置參数查看小工具

    前言 使用Hadoop进行离线分析或者数据挖掘的project师,常常会须要对Hadoop集群或者mapreduce作业进行性能调优. 或许你知道通过浏览器訪问http://master:18088/ ...

  2. C#使用 SQLite 数据库 开发的配置过程及基本操作类,实例程序:工商银行贵金属行情查看小工具

    --首发于博客园, 转载请保留此链接  博客原文地址 本文运行环境: Win7 X64, VS2010 1. SQLite 的优点: SQLite 是一款轻型数据库,开发包只有十几M, 相对于 MSS ...

  3. PHP Log时时查看小工具

    以前Log都是打印在一个文档中,然后打开文件夹,最后打开文档查看里面的内容,每次打开文件夹感觉很烦. 前些日子看到同事开发.NET的时候,用他自己的一个小工具能够时时查看到Log的内容,非常方便,所以 ...

  4. DXF结构查看小工具,DXF表格导出工具,CAD文档查看

    用C#写了个查看DXF结构的工具,另做了个DXF表格(普通直线画的)导出为CSV表格工具发出来方便各位机械工程师,上几个图: 程序下载: 程序,需要.NET 4.0执行环境 https://pan.b ...

  5. JSON查看小工具

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...

  6. 写个C#命令行参数解析的小工具

    最近测试工作做的比较多因此时常要创建一些控制台类型的应用程序.因为程序有不同的参数开关,需要在程序启动的时候通过命令行来给程序传递各种开关和参数.直接操作args有些不方便,所以就写了个解析参数的小工 ...

  7. hadoop2.6.0+eclipse配置

    [0]安装前的声明 0.1) 所用节点2个 master : 192.168.119.105 hadoop5 slave : 192.168.119.101 hadoop1 (先用一个slave,跑成 ...

  8. hadoop2.2.0集群安装和配置

    hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA.YARN等. 注意:apache提供的hadoop-2.2.0的安装包是在32位操作系统编译的,因为hadoop依赖一些C+ ...

  9. Hadoop2.2.0安装过程记录

    1    安装环境1.1    客户端1.2    服务端1.3    安装准备    2    操作系统安装2.1.1    BIOS打开虚拟化支持2.1.2    关闭防火墙2.1.3    安装 ...

随机推荐

  1. 读《JavaScript DOM编程艺术》

    国庆假期花了三四天看了这本书,书很薄,因为是入门书,干货也不是很多. 4. childNodes nodeType nodeValue firstChild lastChild childNodes返 ...

  2. 灵活运用 SQL SERVER FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  3. CloudStack系统部署系列教程-KVM

    之前培训时获得的资料,以防丢失,故发布此以做备份.

  4. Django中载入javascript、css的操作

    url.py中的设置:  导入模块 from django.conf import settings (r'^js/(?P<path>.*)$','django.views.static. ...

  5. poj 1691 图方块 end

    #include<iostream> int m,n; typedef struct node { int upx,upy; int dox,doy; int c; }node; node ...

  6. eclipse导入PIL报错

    有些模块,比如PIL,已经装入过,但是在pydev中无法自动提示,甚至有报 unresolved import的问题,虽然不会引起运行时问题,但是无法实现自动提示,还是一件很麻烦的事情. 下面有个解决 ...

  7. asp.net 对数据库表增加,删除,编辑更新修改

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  8. 抽象类&接口

    抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 在Java中抽象 ...

  9. JQuery Mobile入门——设置后退按钮文字(转)

    http://www.tuicool.com/articles/AZnYVz JQuery Mobile入门——设置后退按钮文字 时间 2013-01-09 20:24:28  CSDN博客原文  h ...

  10. HDU 4831 Scenic Popularity

    Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...