JAVA API 连接 HA(High Available) Hadoop集群

Wesley13
• 阅读 531

使用JAVA API连接HDFS时我们需要使用NameNode的地址,开启HA后,两个NameNode可能会主备切换,如果连接的那台主机NameNode挂掉了,连接就会失败. HDFS提供了nameservices的方式进行访问,这样只要有一个NameNode活着,都可以正常访问.

HDFS NameNode HA

在没有HA的环境中,通常使用NameNode hostname访问HDFS的URL.

hdfs://ochadoop111.jcloud.local:8020

为了保证HDFS服务的高可用,生产环境是必须要开启NameNode HA的,此时应该用nameservices作为统一的logical name连接HDFS.

使用Ambari Enable NameNode HA之后,我的集群在ochadoop112.jcloud.local上增加了一个NameNode, HA相关的配置会自动产生.

使用nameservices访问HDFS的URL:

hdfs://mycluster:8020

JAVA API连接HDFS HA代码如下:

Configuration conf=new Configuration(false);
String nameservices = "mycluster";
String[] namenodesAddr = {"ochadoop111.jcloud.local:8020","ochadoop112.jcloud.local:8020"};
String[] namenodes = {"nn1","nn2"};
conf.set("fs.defaultFS", "hdfs://" + nameservices);
conf.set("dfs.nameservices",nameservices);
conf.set("dfs.ha.namenodes." + nameservices, namenodes[0]+","+namenodes[1]);
conf.set("dfs.namenode.rpc-address." + nameservices + "." + namenodes[0], namenodesAddr[0]);
conf.set("dfs.namenode.rpc-address." + nameservices + "." + namenodes[1], namenodesAddr[1]);
conf.set("dfs.client.failover.proxy.provider." + nameservices,"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
String hdfsRPCUrl = "hdfs://" + nameservices + ":" + 8020;
DistributedFileSystem dfs = new DistributedFileSystem();
try {
    dfs.initialize(URI.create(hdfsRPCUrl),conf);
    Path tmpPath2 = new Path("/tmp2");
    dfs.mkdir(tmpPath2,new FsPermission("777"));
    FileStatus[] list = dfs.listStatus(new Path("/"));
    for (FileStatus file : list) {
        System.out.println(file.getPath());
    }
    dfs.setQuota(tmpPath2,100,1000);
} catch (IOException e) {
    e.printStackTrace();
} finally{
    try {
        dfs.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
2个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi /etc/profile2:按字母键i进入编辑模式,在最底部添加内容: JAVAHOME/opt/jdk1.8.0152 CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar PATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
lix_uan lix_uan
9个月前
Hadoop调优
HDFS核心参数 NameNode,DataNode内存配置 查看NameNode,DataNode占用内存 shell jps jmap heap 2611 jmap heap 2744 经验 shell NameNode最小值1G,每增加100w个block,增加1G内存 DataNode最小值4G,副本总数超过400w时,每增加1
lix_uan lix_uan
9个月前
Hadoop学习总结
HDFS相关 HDFS写数据的流程 首先由客户端向NameNode服务发起写数据请求 NameNode收到请求后会进行基本验证 验证类容包括对请求上传的路径进行合法验证 对请求的用户进行权限验证 验证没有问题后,NameNode会响应客户端允许上传 接下来客户端会对文件按照blocksize大小进行切块,切完后依次以块为单位上传 此时客户端会请求上传
Wesley13 Wesley13
1年前
Java爬虫之JSoup使用教程
title: Java爬虫之JSoup使用教程 date: 2018-12-24 8:00:00 +0800 update: 2018-12-24 8:00:00 +0800 author: me cover: [https://img-blog.csdnimg.cn/20181224144920712](https://www.oschin
Stella981 Stella981
1年前
Hadoop2.7.3完全分布式集群安装过程
需要安装的软件 ------- Hadoop包含HDFS集群和YARN集群。部署Hadoop就是部署HDFS和YARN集群。 机器数量、角色 ------- 4台。 NameNode 1台、DataNode 3台 主机名 IP 角色 amaster 192.168.37.143 Name Node:9000 Resource Manag
Wesley13 Wesley13
1年前
cobol学习之十数据库的增删改查模板
这次连接数据库使用的是ODBC连接access数据库,里面主要是一个增删改查的模板备份,方便以后查询。 000001 IDENTIFICATION DIVISION. 000002 PROGRAM-ID. SAMPLEDB2. 00
Wesley13 Wesley13
1年前
HDFS的升级管理
#### 升级HDFS的概要过程和命令 Hadoop的官方文档中,对于HDFS的升级建议分三个步骤,1,先停掉HDFS服务,再启动,HDFS合并FsEditLog到FsImage之中,再停掉HDFS服务,2,备份namenode的meta文件,在新版本HDFS安装目录的配置文件中,配置namenode的meta文件目录指向旧有的meta文件目录,以-upg
Wesley13 Wesley13
1年前
HDFS是什么?为什么要使用它?
hdfs是hadoop的文件管理系统,主要有两部分: 一个是NameNode:主要作用是负责接收客户端求,告知datanode的blk存储位置,维护hdfs的目录树; 另一个是DateNode:主要是把文件分割成blk存储在不同的服务器上,并且负责产生副本,也能定期向NameNode汇报blk的情况; 使用hdfs的好处是提高系统的高可用性:因为hdf
Stella981 Stella981
1年前
Hadoop 2.7.4 HDFS+YRAN HA删除datanode和nodemanager
当前集群 ==== **主机名称** **IP地址** **角色** **统一安装目录** **统一安装用户** sht-sgmhadoopnn-01 172.16.101.55 namenode,resourcemanager /usr/local/hadoop(软连接) /usr/local/hadoop-2.7.4 /usr/lo