java API访问hadoop(含HA)--FileSystem

namenode HA hadoop client API写数据操作配置 背景 由于项目需要,需要把数据写入大数据平台的HDFS,大数据平台使用kerberos认证,且做了HA。由于之前没有使用过这种场景,在网上找了一圈,并且踩了几个坑,终于搞定。以下是代码和注释。 代码 public Configuration getConfig() throws Exception { // 设置java安全krb5配置,根据实际情况配置 System.s... 阅读详情

文章目录

1 非HA

直接在URI中写明hdfs地址即可。如:

    static FileSystem fs;

    static {
        try {
            fs = FileSystem.get(new URI("hdfs://cluster-host1:9000"),new Configuration(),"hadoop");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void mkdir() throws IOException {
        String path = "/test/fs";
        fs.mkdirs(new Path(path),new FsPermission("755"));//绝对路径,相对路径会在每个用户下
    }
    public static void listFiles(String dirName)throws IOException {
        Path f = new Path(dirName);
        FileStatus[] status =fs.listStatus(f);
        System.out.println(dirName +" has all files:");
        for (int i = 0; i<status.length; i++) {
            System.out.println(status[i].getPath().toString());
            System.out.print("  | 是否目录:"+status[i].isDirectory());
            System.out.print("  | 是否文件:"+status[i].isFile());
            System.out.print("  | permission:"+status[i].getPermission());
            System.out.print("  | owner:"+status[i].getOwner());
            System.out.println();
        }
    }
    

2 HA

在使用Hadoop Java API访问HDFS集群时,在创建FileSystem对象时,直接指定NameNode的IP以及端口号即可。但是在HA模式下,访问HDFS集群却有一些不同,需要指定NameSpace和主备NameNode的IP以及端口等信息,具体操作方式见如下代码:

public class FileSystemHA {

    //方式一:这种方式测试通过
    @Test
    public void test1() throws Exception{
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://hadoop-ns1");//nameservices地址
        conf.set("dfs.nameservices", "hadoop-ns1");
        conf.set("dfs.ha.namenodes.hadoop-ns1", "nn1,nn2");
        conf.set("dfs.namenode.rpc-address.hadoop-ns1.nn1", "hadoop-master1:8020");
        conf.set("dfs.namenode.rpc-address.hadoop-ns1.nn2", "hadoop-master2:8020");
        conf.set("dfs.client.failover.proxy.provider.ns1", "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
        FileSystem fs = FileSystem.get(URI.create("hdfs://hadoop-ns1"), conf, "hadoop");

        String dirName = "/";
        Path f = new Path(dirName);
        FileStatus[] status =fs.listStatus(f);
        System.out.println(dirName +" has all files:");
        for (int i = 0; i<status.length; i++) {
            System.out.println(status[i].getPath().toString());
            System.out.print("  | 是否目录:"+status[i].isDirectory());
            System.out.print("  | 是否文件:"+status[i].isFile());
            System.out.print("  | permission:"+status[i].getPermission());
            System.out.print("  | owner:"+status[i].getOwner());
            System.out.println();
        }
    }

    //方式二:这种方式ok了。配置文件是从hadoop-master1上复制的
    //有用的配置参考方式一的k-v
    @Test
    public void test2() throws Exception{
        Configuration conf = new Configuration();
        conf.addResource(new Path("core-site.xml"));
        conf.addResource(new Path("hdfs-site.xml"));
        FileSystem fs = FileSystem.get(conf);
        String dirName = "/";
        Path f = new Path(dirName);
        FileStatus[] status =fs.listStatus(f);
        System.out.println(dirName +" has all files:");
        for (int i = 0; i<status.length; i++) {
            System.out.println(status[i].getPath().toString());
            System.out.print("  | 是否目录:"+status[i].isDirectory());
            System.out.print("  | 是否文件:"+status[i].isFile());
            System.out.print("  | permission:"+status[i].getPermission());
            System.out.print("  | owner:"+status[i].getOwner());
            System.out.println();
        }
    }

}
Java 操作 Hadoop 集群之 HDFS 的应用案例详解 对应hadoop 命令:-mv 或 hdfs dfs -moveFromLocal 和 hdfs dfs -moveToLocal。移动是删除源文件的,也就是把一个文件从一个位置搬运到另一个位置,不是复制!对应 hadoop 命令:hdfs dfs -touchz /path/to/hdfs/newfile.txt。对应 Hadoop 命令:hdfs dfs -copyFromLocal 本地文件 /目录。文件移动是指从本地移动文件到 hdfs 服务器或从 hdfs 移动文件到本地。 阅读详情

相关推荐

动力锂电池-二阶RC模型等效电路-RLS参数辨识-Simulink

1.锂电池二阶RC等效电路模型

QQ1978009424的博客 1万+

hdfs fssystem线程安全问题及分布式客户端应用

fssystem的实现类DistributedFileSystem 1根据url(建立链接)创建fssystem的时候会先在cache中查找,如果没有就create,close的时候会关闭并清空缓存 2缓存的key是根据conf和url来构建的 3.1读文件(读取了一个block后,在调用getBlockLocations获取下一个数据的存储位置,如果数据跨block会不会有性能...

zhuwentaolove的专栏 757

Qt+OpenGL+Cesium三件套:打造高性能3D GIS桌面应用的5个关键点

本文深入探讨了如何利用Qt、OpenGL和Cesium数据规范构建高性能桌面级3D GIS应用。文章聚焦于五个关键点:架构选型、OpenGL渲染优化、3D Tiles数据解析与调度、内存与多线程管理,以及高级特性实现,旨在帮助开发者在C++生态中打造不依赖网络、运算能力更强的重型3D地理信息客户端。

weixin_28197941的博客 381

hadoop抽象文件系统filesystem框架介绍

为了提供对不同数据访问的一致接口,Hadoop借鉴了Linux虚拟文件系统的概念,引入了Hadoop抽象文件系统,并在Hadoop抽象文件系统的基础上,提供了大量的具体文件系统的实现,满足构建于Hadoop上应用的各种数据访问需求。 通过Hadoop抽象文件系统,MapReduce目前可以运行在基于HDFS的集群上,也可以运行在基于Amazon S3的云计算环境里。 Hadoop文件系统API java.io.FileSystem是java.io包的私有抽象类,不能被包以外的类引用。也就是说,不能像类

cyq6239075的博客 3662

文石NoteX3国行版安装 Google Play经验分享

文石NoteX3国行版安装 Google Play经验分享。

2301_80693261的博客 7619

树莓派+STM32+激光雷达:大学生工训赛智能物流小车全栈开发实录(附避坑指南)

本文详细记录了基于树莓派、STM32和激光雷达的智能物流小车全栈开发过程。文章从系统架构设计、硬件集成、软件框架搭建到机械臂控制与视觉辅助定位,系统阐述了如何构建一个完整的机器人系统,并分享了在电源管理、通信延迟、里程计误差等关键环节的实战避坑指南,为嵌入式与机器人开发提供了宝贵经验。

kotlin6android的博客 748

java连接hdfs一直等待_java api如何判断hdfs已经连接或者能够连接

本帖最后由 czs208112 于 2017-10-29 19:15 编辑写了个hdfs管理的图形化工具,遇到了一个比较麻烦的问题。工具在连接不存在的hdfs时,会卡死,日志显示有一个线程每隔一段时间就会尝试连接hdfs。[mw_shl_code=applescript,true][QC] INFO [main] org.apache.hadoop.ipc.Client$Connection.ha...

weixin_30444625的博客 992

LangGraph实战:用Python异步构建智能客服多轮对话系统(附完整代码)

本文详细介绍了如何使用LangGraph框架和Python异步编程构建一个高性能的智能客服多轮对话系统。通过将对话流程建模为有向图,结合thread_id实现多用户对话隔离,并利用异步节点提升系统并发处理能力,有效解决了传统客服系统上下文遗忘与高并发瓶颈问题。文章提供了从环境搭建、状态管理、异步优化到复杂业务逻辑与部署的完整实战代码。

weixin_29055137的博客 152

Hadoop FIleSystem API JAVA操作。

1.FileSystem的获取。我们可以在Hadoop中使用FileSystem API来打开一个文件的输入流,然后我们可以对文件进行各种的操作实现。FileSystem是一个通用的文件系统API,FileSystem的获取方法有以下几种(以下所有相关代码接口实现均为手打,不保证完全正确,如有出错敬请谅解。):public statis FileSystem get(Configuration co

繁城落叶 7482

Aras Innovator系统配置-01对象类(一)

对象类配置-对象类属性说明

企业信息化(PLM,ERP.MES) 2032

微信小程序 - 实现人脸识别对比+人脸相似度数据,用户从相册选择或拍照上传两张图片进行人脸对比得到人脸相似度及判断是否是同一个人,微信小程序检测人脸相似度(免费纯前端方案+调用第三方API接口方案)

微信小程序实现人脸识别对比,微信小程序人脸对比 人脸对比识别 人脸对比相似度,实现获取手机摄像头权限,调用相机拍照实现人脸识别相似度对比,小程序人脸相似度对比,快速识别两张照片的相似程度(用百分比)图片相似度对比在线测试,图片相似度对比,微信小程序人脸相似度对比分析,计算两张人脸的相似度,从而判断是否同一个人,并给出相似度评分。小程序如何实现人脸相似度比对,小程序纯前端怎么对比两张图片的相似度,计算两幅图像的相似度,图像相似度对比方法,调用百度AI的人脸识别,微信小程序中实现人脸识别认证,实现人脸检测、人脸

🏆 前端领域优质创作者 4865

Hadoop:文件操作之Java接口(FileSystem类)

目录 通过java.net.URL读取数据 通过FlieSystem API读写数据 读取数据 写入数据 新建目录 新建文件并写入 追加写入 一致模型 修改配置信息 通过FileStatus查询文件系统 查看文件系统信息 查看块信息 查看datanode信息 通过java.net.URL读取数据 让java程序能够识别hadoop的hdfs URL需要先通过FsUrl...

Jodness' Blogs 2886

SAP-ABAP:ABAP 开发基础概念入门:写给刚踏入 SAP 开发世界的新人

本文介绍了 ABAP 开发语言的基础概念,帮助 SAP 开发新人快速入门。主要内容包括: ABAP 的发展历程与核心优势 - 作为 SAP 平台的专属语言,ABAP 在企业级应用开发中具有深度集成、数据处理高效和长期稳定的特点 ABAP 开发环境概览 - 介绍了 SE38、SE80 等关键事务码,以及 ABAP 工作台的核心组件和开发权限管理 基础语法入门 - 重点讲解了 ABAP 特有的数据类型体系(特别是结构体和内表),并通过 Hello World 示例展示程序基本结构 文章通过对比 ABAP 与 J

baidu_35680696的博客 511

hadoop hdfs HA 场景下JAVA API Client访问 HDFS

同事在用hdfs api 写入hdfs文件,2年前没有成功,这次一起解决了这个问题。详细代码如下: 客户端需要指定ns名称,节点配置,ConfiguredFailoverProxyProvider等信息。 代码示例: package cn.itacst.hadoop.hdfs; import java.io.FileInputStream; import java.io.InputS...

张伟的专栏 822

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基于Hadoop HA集群部署HBase HA集群(详细版)

本文介绍Hadoop高可用(HA)集群的部署方法,重点阐述ZooKeeper在Hadoop及HBase高可用架构中的核心作用。文章首先说明ZooKeeper通过临时节点机制实现主从选举,为Hadoop NameNode和HBase Master提供故障转移支持。随后详细讲解ZooKeeper集群的配置步骤,包括myid文件设置和环境变量配置。在Hadoop HA配置部分,文章展示了core-site.xml和hdfs-site.xml的关键参数,特别是ZooKeeper服务地址和nameservice的配置

pysense的博客 5386

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hadoop 使用HA后java api连接获取 FileSystem

所需要配置的参数:    Configuration conf = new Configuration();   conf.set("fs.defaultFS", "hdfs://hadoop2cluster");   conf.set("dfs.nameservices", "hadoop2cluster");   conf.set("dfs.ha.name

ArmandXu的专栏 3578

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java hdfs ha_Java API操作HA方式下的Hadoop

通过java api连接Hadoop集群时,如果集群支持HA方式,那么可以通过如下方式设置来自动切换到活动的master节点上。其中,ClusterName是可以任意指定的,跟集群配置无关,dfs.ha.namenodes.ClusterName也可以任意指定名称,有几个master就写几个,后面根据相应的设置添加master节点地址即可。static String ClusterName = "...

weixin_42510460的博客 306

Java API访问HDFS集群(HA)

title: Java API访问HDFS集群(HA) date: 2021-06-23 17:06:11 tags: HDFS hadoopV2版本及以后都是HA架构,active namenode和standby namenode, 当前active namenode 出现问题之后,zkfc会切换standby namenode 为active 状态保证hadoop集群正常运行,所以java api需要通过配置HA的方式来访问hdfs集群 对于namenode是HA高可用集群时,客户端远程www

LAZKUQZA的博客 456

hadoop java访问_hadoop笔记三:java访问HDFS

1.HDFS的java访问接口1)org.apache.hadoop.conf.Configuration读取、解析配置文件(如core-site.xml/hdfs-default.xml/hdfs-site.xml等),或添加配置的工具类。2)org.apache.hadoop.fs.FileSystem代表分布式文件系统的一个实例,是一个通用的文件系统API,提供了不同文件系统的统一访问方式。...

weixin_42165712的博客 723

java hdfs ha_JAVA HDFS API Client 连接HA

如果Hadoop开启HA,那么用Java Client连接Hive的时候,需要指定一些额外的参数package cn.itacst.hadoop.hdfs;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.URI;import org.apach...

weixin_30857403的博客 240

hadoop No FileSystem for scheme: file

用hadoop api 编写的文件读写demo,用maven打包后运行,报错 Exception in thread "main" java.io.IOException: No FileSystem for scheme: file 然后找找找,找到下面的文章,讲的好像很有道理,记录下。 http://stackoverflow.com/questions/1726

wzm112358的专栏 1011

java 访问hdfs_Java程序中不通过hadoop jar的方式访问hdfs

一般情况下,我们使用Java访问hadoop distributed file system(hdfs)使用hadoop的相应api,添加以下的pom.xml依赖(这里以hadoop2.2.0版本为例):org.apache.hadoophadoop-common2.2.0org.apache.hadoophadoop-mapreduce-client-core2.2.0在其中使用FileSyst...

weixin_39700215的博客 310

使用FileSystem API读取数据

有时不能在应用中设置URLStreamHandlerFactory。这时,我们需要用FileSystem API来打开一个文件的输入流。 文件在Hadoop文件系统中显示为一个Hadoop Path对象(不是一个java.io.File对象,因为它的语义与本地文件系统关联太紧密)。我们可以把一个路径视为一个Hadoop文件系统URI,如hdfs://localhost/user/tom/quan

569

Hadoop系统操作类FileSystem

FileSystem类,Hadoop文件API的起点,是一个一个与文件系统交互的抽象类,其对HDFS的操作由不同的具体实现子类来实现。 通过下面的方法来获取一个具体的FileSystem实例: 获取用于HDFS系统的实例:public static FileSystem get(Configuration conf) throws IOException 获取用于本地文件系统的实例:pu

wangkjs的博客 639

hadoop中的filesystem和localfilesystem

在这一节我们要深入了解Hadoop的FileSystem类——这是与与hadoop的文件系统交互的重要接口。虽然我们只是着重于HDFS的实现,但我们在编码时一般也要注意代码在FileSystem不同子类文件系统之间的可移植性。这是非常有用的,比如说你可以非常方便的直接用同样的代码在你的本地文件系统上进行测试。 使用hadoop URL读数据 从hadoop文件系统中读取文件的最简单的方法之一便

春华秋实 6559
上一篇: FileSystem、Path与Configure
下一篇: MapReduce计算模型和编程接口
王小禾
博客等级 码龄11年 80粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值