二、JAVA API实现HDFS
前文
hdfsdemo通过HDFS上传下载文件
HDFS_CRUD
windows环境下需要使用uitls.exe
可从github下载,并且要设置环境变量 HADOOP_HOME=Location 【安装解压的位置】 PATH添加:%HADOOP_HOME%\bin 和 %HADOOP_HOME%\sbin
Hadoop集群是3.3,建议pom.xml的hadoop依赖包也是3.3
为pom.xml增加依赖
<!--    hadoop依赖库-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>3.3.1</version>
        </dependency>
新建java文件HDFS_CRUD
/**
 * @author LEHOSO
 * @date 2021/10/18
 * @apinote
 */
public class HDFS_CRUD {
    FileSystem fs = null;
    //初始化客户端对象
    @Before
    public void init() throws Exception {
        //构造一个配置参数对象,设置一个参数:要访问的HDFS的URI
        Configuration conf = new Configuration();
        //这里指定使用的是HDFS
        conf.set("fs.defaultFS", "hdfs://192.168.142.10:9000");
        //通过如下的方式进行客户端身份的设置
        System.setProperty("HADOOP_USER_NAME", "root");
        //通过FileSystem的静态方法获取文件系统客户端对象
        fs = FileSystem.get(conf);
    }
    //上传文件到HDFS
    @Test
    public void testAddFileToHdfs() throws IOException {
        //要上传的文件所在本地路径
        Path src = new Path("D:/test.txt");
        //要上传到HDFS目标路径
        Path dst = new Path("/testFile");
        //上传文件方法调用
        fs.copyFromLocalFile(src, dst);
        //关闭资源
        fs.close();
    }
    //从HDFS中复制文件到本地系统
    @Test
    public void testDownloadFileToLocal() throws IllegalArgumentException, IOException {
        //下载文件
        /**
         * 在windows平台开发HDFS项目时候,不设置Hadoop开发环境,会报错
         * 安装hadoop环境,需要重启IDEA或者重启电脑才能生效
         * 需要相关依赖:winuitls.exe、winutis.pdb、hadoop.dll
         */
        fs.copyToLocalFile(false,
                new Path("/testFile"),
                new Path("E:/x.txt"),
                true);
        /**
         * delSrc参数设置为False
         * useRawLocalFileSystem参数设置为true
         * 下载的文件就没有 带.crc的校验文件
         */
        fs.close();
    }
    //创建、删除、重命名文件
    @Test
    public void testMkdirAndDeleteAndRename() throws Exception {
        //创建项目
        fs.mkdirs(new Path("/a/b/c"));
        fs.mkdirs(new Path("/a2/b2/c2"));
        //重命名文件或文件夹
        fs.rename(new Path("/a"), new Path("/a3"));
        //删除文件夹,如果是非空文件夹,参数2【recurisive】值必须true
        fs.delete(new Path("/a2"), true);
    }
    //查看目录信息,只显示文件
    @Test
    public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
        //获取迭代器对象
        /**ListFile方法
         * param pathstring:为路径
         * param recursive:为是否为递归查询
         */
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
        while (listFiles.hasNext()) {
            LocatedFileStatus fileStatus = listFiles.next();
            //打印当前文件名
            System.out.println(fileStatus.getPath().getName());
            ///打印当前块大小
            System.out.println(fileStatus.getBlockSize());
            //打印当前文件权限
            System.out.println(fileStatus.getPermission());
            //打印当前文件内容长度
            System.out.println(fileStatus.getLen());
            //获取该文件块信息(包含长度,数据块,datanode的信息)
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            for (BlockLocation bl : blockLocations) {
                System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());
                String[] hosts = bl.getHosts();
                for (String host : hosts) {
                    System.out.println(host);
                }
            }
            System.out.println("---------分割线---------");
            //若测试显示信息太多,可以删除或者禁用log4j
        }
    }
    // 查看文件及文件夹信息
    @Test
    public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {
        // 获取HDFS系统中文件和目录的元数据等信息
        FileStatus[] listStatus = fs.listStatus(new Path("/"));
        String flag = "d--             ";
        for (FileStatus fstatus : listStatus) {
            // 判断是文件还是文件夹
            if (fstatus.isFile())
                flag = "f--         ";
            System.out.println(flag + fstatus.getPath().getName());
        }
    }
}
GitHub下载地址
二、JAVA API实现HDFS的更多相关文章
- 使用Java API操作HDFS文件系统
		使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ... 
- 使用Java Api 操作HDFS
		如题 我就是一个标题党 就是使用JavaApi操作HDFS,使用的是MAVEN,操作的环境是Linux 首先要配置好Maven环境,我使用的是已经有的仓库,如果你下载的jar包 速度慢,可以改变Ma ... 
- JAVA API连接HDFS HA集群
		使用JAVA API连接HDFS时我们需要使用NameNode的地址,开启HA后,两个NameNode可能会主备切换,如果连接的那台主机NameNode挂掉了,连接就会失败. HDFS提供了names ... 
- JAVA API 实现hdfs文件操作
		java api 实现hdfs 文件操作会出现错误提示: Permission denied: user=hp, access=WRITE, inode="/":hdfs:supe ... 
- 使用JAVA API读取HDFS的文件数据出现乱码的解决方案
		使用JAVA api读取HDFS文件乱码踩坑 想写一个读取HFDS上的部分文件数据做预览的接口,根据网上的博客实现后,发现有时读取信息会出现乱码,例如读取一个csv时,字符串之间被逗号分割 英文字符串 ... 
- Java API 读取HDFS的单文件
		HDFS上的单文件: -bash-3.2$ hadoop fs -ls /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_categor ... 
- hadoop学习笔记(五):java api 操作hdfs
		HDFS的Java访问接口 1)org.apache.hadoop.fs.FileSystem 是一个通用的文件系统API,提供了不同文件系统的统一访问方式. 2)org.apache.hadoop. ... 
- 使用java api操作HDFS文件
		实现的代码如下: import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import ... 
- Hadoop Java API操作HDFS文件系统(Mac)
		1.下载Hadoop的压缩包 tar.gz https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/ 2.关联jar包 在 ... 
随机推荐
- React Native之新架构中的Turbo Module实现原理分析
			有段时间没更新博客了,之前计划由浅到深.从应用到原理,更新一些RN的相关博客.之前陆续的更新了6篇RN应用的相关博客(传送门),后边因时间问题没有继续更新.主要是平时空余时间都用来帮着带娃了,不过还是 ... 
- 洛谷4400 BlueMary的旅行(分层图+最大流)
			qwq 首先,我们观察到题目中提到的每天只能乘坐一次航班的限制,很容易想到建分层图,也就是通过枚举天数,然后每天加入一层新的点. (然而我一开始想的却是erf) 考虑从小到大枚举天数,然后每次新建一层 ... 
- 12. 亿级流量电商系统JVM模型参数二次优化
			亿级流量电商系统JVM模型参数预估方案,在原来的基础上采用ParNew+CMS垃圾收集器 一.亿级流量分析及jvm参数设置 1. 需求分析 大促在即,拥有亿级流量的电商平台开发了一个订单系统,我们应该 ... 
- 【二食堂】Alpha - Scrum Meeting 9
			Scrum Meeting 9 例会时间:4.19 13:00~13:20 进度情况 组员 昨日进度 今日任务 李健 1. "文本区域"栏目完成,可实现实体和关系的添加issue ... 
- Noip模拟44 2021.8.19
			比较惊人的排行榜 更不用说爆零的人数了,为什么联赛会这么难!!害怕了 还要再努力鸭 T1 Emotional Flutter 考场上没切掉的神仙题 考率如何贪心,我们把黑色的条延长$s$,白色的缩短$ ... 
- [luogu2973]driving out the piggies 驱逐猪猡【高斯消元+概率DP】
			看到题面的那一刻,我是绝望的ORZ 图论加概率期望加好像不沾边的高斯消元???我人直接傻掉 还没学过概率期望的我果断向题解屈服了(然后还是傻掉了两节课来找线性方程.. Description 奶牛们建 ... 
- 零基础如何更好的学习Linux
			本节旨在介绍对于初学者如何学习 Linux 的建议.如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Linux 的方法. 如何去学习 学习大多类似庖丁解牛,对事物的认识一般都是由 ... 
- 洛谷 P5785 [SDOI2012] 任务安排
			链接: P5785 弱化版:P2365 题意: 有 \(n\) 个任务待完成,每个任务有一个完成时间 \(t_i\) 和费用系数 \(f_i\),相邻的任务可以被分成一批.从零时刻开始这些任务会被机器 ... 
- 洛谷 P2120 [ZJOI2007] 仓库建设
			链接: P2120 题意: 有 \(n\) 个点依次编号为 \(1\sim n\).给出这 \(n\) 个点的信息,包括位置 \(x_i\),所拥有的的物品数量 \(p_i\),在此建设一个仓库的费用 ... 
- Java并发:重入锁 ReentrantLock(一)
			ReentrantLock 是一种可重入的互斥锁,它不像 synchronized关键字一样支持隐式的重进入,但能够使一个线程(不同的方法)重复对资源的重复加锁而不受阻塞. ReentrantLock ... 
