如何在java客户端中获取HDFS服务器元数据信息?

2024-01-09

我需要构建一个实用程序类来测试与 HDFS 的连接。测试应显示 HDFS 的服务器端版本和任何其他元数据。虽然有很多可用的客户端演示,但没有关于提取服务器元数据的内容。有人可以帮忙吗?

请注意,我的客户端是远程 java 客户端,没有 hadoop 和 HDFS 配置文件来初始化配置。我需要通过使用 URL 动态连接到 HDFS 名称节点服务来完成此操作。


Hadoop 通过 HTTP 公开一些您可以使用的信息。看Cloudera http://www.cloudera.com/blog/2009/08/hadoop-default-ports-quick-reference/的文章。 可能最简单的方法是连接到NNUI 和解析内容 服务器返回:

URL url = new URL("http://myhost:50070/dfshealth.jsp");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
...

另一方面,如果您知道 NN 和 JT 的地址,则可以连接到它们 使用像这样的简单客户端(Hadoop 0.20.0-r10​​56497):

import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hdfs.DFSClient;
import org.apache.hadoop.hdfs.protocol.ClientProtocol;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.apache.hadoop.hdfs.protocol.FSConstants.DatanodeReportType;
import org.apache.hadoop.mapred.ClusterStatus;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.util.VersionInfo;

public class NNConnTest {

    private enum NNStats {

        STATS_CAPACITY_IDX(0, 
                "Total storage capacity of the system, in bytes: ");
        //... see org.apache.hadoop.hdfs.protocol.ClientProtocol 

        private int id;
        private String desc;

        private NNStats(int id, String desc) {
            this.id = id;
            this.desc = desc;
        }

        public String getDesc() {
            return desc;
        }

        public int getId() {
            return id;
        }

    }

    private enum ClusterStats {

        //see org.apache.hadoop.mapred.ClusterStatus API docs
        USED_MEM {
            @Override
            public String getDesc() {
                String desc = "Total heap memory used by the JobTracker: ";
                return desc + clusterStatus.getUsedMemory();
            }
        };

        private static ClusterStatus clusterStatus;
        public static void setClusterStatus(ClusterStatus stat) {
            clusterStatus = stat;
        }

        public abstract String getDesc();
    }


    public static void main(String[] args) throws Exception {

        InetSocketAddress namenodeAddr = new InetSocketAddress("myhost",8020);
        InetSocketAddress jobtrackerAddr = new InetSocketAddress("myhost",8021);

        Configuration conf = new Configuration();

        //query NameNode
        DFSClient client = new DFSClient(namenodeAddr, conf);
        ClientProtocol namenode = client.namenode;
        long[] stats = namenode.getStats();

        System.out.println("NameNode info: ");
        for (NNStats sf : NNStats.values()) {
            System.out.println(sf.getDesc() + stats[sf.getId()]);
        }

        //query JobTracker
        JobClient jobClient = new JobClient(jobtrackerAddr, conf); 
        ClusterStatus clusterStatus = jobClient.getClusterStatus(true);

        System.out.println("\nJobTracker info: ");
        System.out.println("State: " + 
                clusterStatus.getJobTrackerState().toString());

        ClusterStats.setClusterStatus(clusterStatus);
        for (ClusterStats cs : ClusterStats.values()) {
            System.out.println(cs.getDesc());
        }

        System.out.println("\nHadoop build version: " 
                + VersionInfo.getBuildVersion());

        //query Datanodes
        System.out.println("\nDataNode info: ");
        DatanodeInfo[] datanodeReport = namenode.getDatanodeReport(
                DatanodeReportType.ALL);
        for (DatanodeInfo di : datanodeReport) {
            System.out.println("Host: " + di.getHostName());
            System.out.println(di.getDatanodeReport());
        }

    }

}

确保您的客户应该使用sameHadoop 版本与您的集群不同EOFException可能会发生。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在java客户端中获取HDFS服务器元数据信息? 的相关文章

随机推荐

  • knitr Rnw Latex:如何在横向模式下获取全页宽度的图形和标题

    我正在尝试以横向模式制作一个整页图和标题 如果我省略 fig cap Caption Trial 下面的 Rnw 文件可以正常工作 但如果使用了标题 则不行 任何帮助将不胜感激 documentclass article usepackag
  • 如何检测 iOS 版 SwiftUI 中的 TextField 何时失去焦点?

    TextField Name text name 我找到了这个方法 func focusable isFocusable Bool true onFocusChange escaping Bool gt Void in gt some Vi
  • 我可以设置 ~/.ssh/config 来查找动态 EC2 主机名吗?

    我有一个动态 IP 上的 EC2 实例 它没有执行任何类型的 DDNS 来保持指向它的公共主机名 我想在我的应用程序中设置一个快捷方式ssh config对于服务器 并询问awsCLI 告诉我 IP 或主机名是什么 aws ec2 desc
  • 在 Grails 中将映射和属性列表持久保存为 JSON

    编辑 onload 方法更改为 afterLoad 否则对象可能无法正确传递到地图 我目前正在使用一些具有大量动态 复杂属性的域类 我需要保留并定期更新它们 我将它们保存在每个类的 Map 结构中 因为这使得在我的控制器等中引用变得容易 但
  • 检测flask是否正在通过gunicorn运行?

    有没有办法检查我的 Flask 应用程序是否正在 Gunicorn 容器内运行 目前 我设置了一个环境变量来告诉我的应用程序这一点 但我希望它是自动的 另外 我可以通过某种方式检查正在使用的工人阶级吗 由于几个不同的原因 我需要检测到这一点
  • getWidth() 和 getHeight() 在 RecyclerView/Fragment 中返回 0

    我正在调用填充方法RecyclerView在 的里面OnCreateView方法在几个片段中 然后它们被定向到填充提要的适配器 取决于context of the Fragment 目前 我正在向提要上用户上传的图像添加标签 这些标签需要一
  • 即使提到了我朋友的 ID,您也无权使用此命令

    我对编码很陌生 但我试图创建一个只有选定的用户 id 才能使用的命令 这是我的代码 const DiscordCommand require contracts DiscordCommand const admins 44595206862
  • npx React-Native 链接 React-Native-Vector-icons 命令它抛出错误

    我正在尝试将 React Native 与 React Native 矢量图标链接起来 如文档中所示https reactnativeelements com docs 3 4 2 getting started install react
  • 如何对 >2 个表进行外连接 (Oracle)

    我不知道如何描述我的表结构 所以希望这是有道理的 我有 3 个具有层次关系的表 其中 A 与 B 具有一对多关系 而 B 又与 C 具有一对多关系 诀窍是 B 和 C 中的外键允许为空 即没有父级 定义 我还有 D 和 E 与 A B 或
  • 带有 UI-Bootstrap 选项卡和 UI-Router 的 Angularjs 导航菜单

    In 这个笨蛋 http plnkr co edit ki2hCUDkxYVL3atPtEba p preview 我无法使菜单链接和选项卡正常工作 如您所见 我需要单击两次 路线 1 才能从选项卡 路线 2 返回 此外 当我单击两次 路线
  • Cygwin/vim Windows 7 文件访问问题

    看来在 Windows 7 上 Cygwin vim 认为所有文件都是只读的 您可以在文本板 记事本中很好地编辑文件 但 vim 认为它们是只读的 有数量发生 但我看不到解决方案 Update 根据接受的答案 创建了文件C cygwin e
  • 将图像存储在CloudKit中作为CKAsset,图像颠倒

    我正在开发一个使用 CloudKit 来存储和检索图像文件的应用程序CKAsset对象 通常情况下 这效果很好 而且我喜欢 CloudKit 的小学习曲线 不过 我偶尔会遇到一个特殊的问题 即图像要么完全颠倒 要么向左或向右 90 存储 以
  • 在 iOS 应用程序中捕获签名

    我们需要从 iOS 应用程序捕获签名 用例是让用户用手指直接在屏幕上绘制签名 我更喜欢网络 所以我的默认方法是嵌入网络视图并使用画布让用户绘图 然后捕获 PNGtoDataURL 不过 原生 Cocoa 控件可能会更好 是否有任何预构建的解
  • 如何根据 radioGroupButton 选择在闪亮的仪表板主体中隐藏或显示图表

    我正在尝试创建具有以下结构的仪表板 它的基本结构有 3 个级别 菜单 子菜单和单选组按钮选择 侧边栏 Menu1 有2个子菜单 子菜单1和子菜单2 Menu2 有 2 个子菜单 子菜单 3 和子菜单 4 主体有 radioGroupButt
  • 正则表达式从 XSLT 中删除单词

    我需要帮助编写正则表达式以使用 XSLT 删除单词 我需要将 XML 文件的 详细路径 的输出更改为 活动 262 26207 简单地说 262 26207 XSL 是
  • 为什么进程终止后异步读取仍未完成?

    我编写了一个进程 它从作为参数给出的文件中读取数据 我已异步读取 StandardOutput 和同步读取 StandardError public static string ProcessScript string command st
  • 删除水晶报表中数字字段的小数

    我有一个字段年份 它是来自数据库端的字符串类型 因此我将其转换为数字 并在其中添加 1 年以显示如下 Year 2014 2015 下面是公式 Year tonumber FocusOnCustomer YEAR tonumber Focu
  • Android原生浏览器的引擎是什么?

    Android原生浏览器的引擎是什么 维基说 https en wikipedia org wiki WebKit UseAndroid 在 4 4 之前使用 WebKit 且Blink https en wikipedia org wik
  • C++中的反斜杠是什么意思?

    这段代码的作用是什么 特别是反斜杠 的作用是什么 s23 foo s8 foo s16 bar 我添加了数据类型 因为它们可能是相关的 感谢您的帮助 反斜杠在 C 中表示两种不同的事物 具体取决于上下文 作为行的延续 在引号字符串之外 见下
  • 如何在java客户端中获取HDFS服务器元数据信息?

    我需要构建一个实用程序类来测试与 HDFS 的连接 测试应显示 HDFS 的服务器端版本和任何其他元数据 虽然有很多可用的客户端演示 但没有关于提取服务器元数据的内容 有人可以帮忙吗 请注意 我的客户端是远程 java 客户端 没有 had