Hadoop Java 常用Api

Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://week01:9000/aa/test. hadoop程序问题,出现 Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://week01:9000/aa/test.txt,expected:file:/// 解决方法是: ①把core-site.xml文件和hdfs-site.xml文件放到src下即可。 ②在代码中设... 阅读详情
package com.ws;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;

public class JavaApi {
    FileSystem fs;
    String temp = "C:/Users/Wsong/Desktop/test/";

    private Path path(String path){
        return new Path(path);
    }
    @Before
    public void init() throws IOException {
        System.setProperty("HADOOP_USER_NAME","root");
        Configuration entries = new Configuration();
        entries.set("fs.defaultFS","hdfs://dream1:9000");
        fs = FileSystem.get(entries);
    }
    @Test
    public void testDelete() throws IOException {
        // 第二个参数是否递归
        fs.delete(path("/app1"),true);
    }
    // 创建目录
    @Test
    public void testMkdir() throws IOException {
        fs.mkdirs(path("/webapp/log"));
        fs.close();
    }
    // 移动,改名
    @Test
    public void testMvRename() throws IOException {
        // 只是针对最后一级目录
        fs.rename(path("/app/1"),new Path("/app1"));
        fs.close();
    }
    @Test
    public void testCopyFromLocal() throws IOException {
        // 不存在也不会报错
        // 从本地复制到hdfs上,注意 一定要写完整目录, 这样是复制到app1里
        fs.copyFromLocalFile(path(temp+"copy.txt"),path("/app1/copy.txt"));
        fs.close();
    }
    @Test
    public void testCopyFromLocalErro1() throws IOException {
        // 不存在也不会报错
        // 下面这种写法是复制并改名为app1文件 不管带不带/都是直接变成文件而不是目录
        fs.copyFromLocalFile(path(temp+"copy.txt"),path("/app1/"));
        fs.close();
    }
    @Test
    public void testCopyFromLocalErro2() throws IOException {
        // 不存在也不会报错
        // 下面这种写法是复制并改名为app1文件 不管带不带/都是直接变成文件而不是目录
        fs.copyFromLocalFile(path(temp+"copy.txt"),path("/app1"));
        fs.close();
    }
    @Test
    public void testCopyFromLocalErro3() throws IOException {
        // 不存在也不会报错
        fs.copyFromLocalFile(path(temp+"copy.txt"),path("/app1/copy.txt"));
        // 第一个true 这是说删除本地文件并上传也就是剪切,第二个true是说如果有重复文件直接覆盖,否则重复文件就会报错,另外hdfs默认是覆盖的
        // 如果不overwrite 如果重复文件会报错
        fs.copyFromLocalFile(true,false,path(temp+"copy.txt"),path("/app1/copy.txt"));
        // 再次执行的时候就会报错,本地文件不存在
        fs.copyFromLocalFile(true,true,path(temp+"copy.txt"),path("/app1/copy.txt"));
        fs.close();
    }
    // 下载
    @Test
    public void testCopyToLocal() throws IOException {
//        fs.copyToLocalFile(src,dst);
//        fs.copyToLocalFile(deleteSrc,src,dst);
//        fs.copyToLocalFile(delSrc,src,dst,useRawLocalFileSystem);
        /*
        这里有个大坑。
        src 肯定是从hdfs读取,没有问题,
        dst写到本地(当前本地就是我们的windows) 写到windows的时候,hdfs就默认调用hadoop为windows写的C语言操作库来操作生成本地文件(用C语言写的,专门供hadoop操作windows系统用的一套程序)
        这套hadoop-windows程序 我们电脑肯定不会默认安装,所以需要我们安装好,并且配置好环境变量,主要是哪个bin目录
        如果我们实在是不想配置这个程序 我们可以采用第三个方法 fs.copyToLocalFile(delSrc,src,dst,useRawLocalFileSystem);
        useRawLocalFileSystem 是否采用JAVA_HADOOP_API生成文件,而不用hadoop操作windows写的原生程序 我们设置为true就可以
         */
        // java.lang.RuntimeException: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see
        fs.copyToLocalFile(path("/app1/copy.txt"),path(temp+"download_Hadoop_Windows.txt"));
        fs.copyToLocalFile(false,path("/app1/copy.txt"),path(temp+"download.txt"),true);
        fs.close();
    }

    @Test
    public void testListFile() throws IOException {
        /*
        返回元数据信息
         LocatedFileStatus{
             path=hdfs://dream1:9000/app1/copy.txt; 路径
             isDirectory=false;
             length=14; replication=3;
             blocksize=134217728; 大小
             modification_time=1607383763556; 最后修改时间
             access_time=1607383763394;
             owner=root; group=supergroup;
             permission=rw-r--r--;
             isSymlink=false
         }
        */
        // recursive 是否递归  只返回文件信息 不返回目录信息
        RemoteIterator<LocatedFileStatus> files = fs.listFiles(path("/app1/"), true);
        while (files.hasNext()){
            LocatedFileStatus meta = files.next();
            System.out.println(meta);
            BlockLocation[] blockLocations = meta.getBlockLocations();
            for (BlockLocation blockLocation : blockLocations) {
                System.out.println(Arrays.toString(blockLocation.getHosts()));
                System.out.println(Arrays.toString(blockLocation.getNames()));
                System.out.println("偏移量"+blockLocation.getOffset());
            }
        }
        fs.close();
    }
    @Test
    public void listFile2() throws IOException {
        FileStatus[] fileStatuses = fs.listStatus(path("/app1"));
        for (FileStatus fileStatus : fileStatuses) {
            System.out.println((fileStatus.isDirectory()?"文件夹":"文件")+fileStatus.getPath());
        }
        fs.close();
    }

    @Test
    public void testReadFile() throws IOException {
        FSDataInputStream in = fs.open(path("/app1/copy.txt"));
//        BufferedReader br = new BufferedReader(new InputStreamReader(in));
//        String line;
//        if((line = br.readLine())!= null){
//            System.out.println(line);
//        }
        byte[] a = new byte[1024];
        int num;
        while ((num =in.read(a))!=-1){
            System.out.print(new String(a,0,num));
        }
        in.close();
    }
    @Test
    public void testWriteFile() throws IOException {
        FSDataOutputStream out = fs.append(path("/app1/copy.txt"));
        out.write("\n hu shuo ba dao ge 哈哈\n".getBytes(StandardCharsets.UTF_8));
        out.flush();
        out.close();
    }
    @Test
    public void wordCount() throws IOException {
        FSDataInputStream in = fs.open(path("/app1/copy.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line;
        HashMap<String, Integer> countMap = new HashMap<>();
        while((line=br.readLine())!= null){
            for (String s : line.split(" ")) {
                countMap.put(s,countMap.getOrDefault(s,0)+1);
            }
        }
        FSDataOutputStream out = fs.create(path("/app1/wordCount.txt"), true);
        for (String s : countMap.keySet()) {
            out.write((s+":"+countMap.get(s)+"\r\n").getBytes());
        }
        out.flush();
        out.close();
        br.close();
        in.close();
    }
    // 偏移量读
    @Test
    public void testSeek() throws IOException {
        FSDataInputStream in = fs.open(path("/app1/copy.txt"));
        in.seek(14);
        byte[] buf = new byte[3];
        int read = in.read(buf);
        String s = new String(buf, 0, read);
        System.out.println(s);
    }
}

 

Hadoop之HDFS的原理和常用命令及API(java) 阅读详情

相关推荐

java.lang.IllegalArgumentException: Failed to decrypt问题解决

接盘一个老项目,修改完各种配置之后启动,提示此错误,翻译了一下说解密失败。 搜了一下原因是数据库连接配置设置了加密。 应该会有一个地方设置了config.decrypt=true 很多配置文件懒得找就全局搜索了一下,找到地方了 直接true变false,再次启动不飘红了,问题解决。 具体为什么要配置这个我也不太清楚,以后用得到再更吧 ...

马句 5317

java读hdfs上文件报错:java.lang.IllegalArgumentException: Wrong FS: hdfs:/ expected file:///

报错代码如下:FileSystem fs = FileSystem.get(new Configuration()); FSDataInputStream in = fs.open(new Path(filePath)); BufferedReader br = new BufferedReader(new InputStreamReader(in));原因是Configuration没有指定hdf

叫我泽西哥好吗?(手动滑稽 ‾◡◝) 2690

如何通过常规测井曲线识别砂岩、泥岩、碳酸盐岩和煤层

常规测井曲线通过不同岩性的物理性质差异识别砂岩、泥岩、碳酸盐岩和煤层。砂岩表现为低自然伽马(GR)、中等密度(RHOB)和声波时差(DT);泥岩以高GR、高中子(NPHI)和高DT为特征;碳酸盐岩显示低GR、高RHOB和低DT;煤层则具有极低RHOB、极高NPHI和DT的独特组合。综合GR与三孔隙度曲线(RHOB、NPHI、DT)可有效区分岩性,其中密度测井对煤层识别最可靠。电阻率(RT)曲线辅助判断流体性质,但需结合其他参数综合分析。

love code, love life. 2597

hadoop自动故障转移集群搭建详解

web界面传文件报错 proxyserver进程没启动 2022-04-24 18:48:47,598 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Got finalize command for block pool BP-379694539-192.168.103.232-1650785972850 2022-04-24 18:49:35,435 ERROR org.apache.hadoop.hdfs.server.datanode.Da

weixin_40548182的博客 2368

手把手教你给STM32F103移植LVGL触摸驱动(基于野火开发板,附完整代码)

本文详细介绍了如何在野火STM32F103开发板上移植LVGL触摸驱动,提供从环境准备到代码实现的完整指南。通过XPT2046触摸芯片的底层驱动集成和LVGL输入设备接口配置,开发者可以快速实现触摸功能,并解决常见问题如触摸无响应、坐标偏移等。

weixin_30856725的博客 1021

一文读懂 SAP BTP Application Router 的 Resource Files:从 xs-app.json 到本地开发的默认设置

本文详解SAP BTP中Application Router的资源文件配置与本地开发实践。核心包括:xs-app.json定义路由规则与安全策略,package.json声明依赖与启动脚本,resources/存放静态资源,default-services.json和local-destinations.json用于本地模拟云服务。文章通过真实案例展示如何配置静态资源直出、反向代理后端服务,并强调本地开发时的注意事项与常见问题解决路径。关键配置均提供示例代码,帮助开发者快速实现业务应用的部署与联调。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 180

hadoop dfs 保错.IllegalArgumentException: Wrong FS: hdfs://XXX:9000, expected: file:///

Java调用hadoop时出现报错:java.lang.IllegalArgumentException: Wrong FS: hdfs://XXX:9000, expected: file:/// 错误分析: hdfs是一种uri路径,hadoop并不认识hdfs:这种格式,后面提示:file:/// 这是一种本地文件系统,由此可见这里要求我们传入一个本地文件系统。

whb3299065的博客 4054

(6):单相三绕组变压器的拉氏变换数学模型和仿真模型

本节详细推导了基于耦合电路的单相三绕组变压器考虑铁心损耗情况下的拉普拉斯变换数学模型,并据此用Matlab/Simulink的传递函数模块搭建了相应的仿真模型,仿真结果表明所建立的数学模型和仿真模型都是正确的。本文的贡献是建立了考虑铁心损耗的单相三绕组变压器基于拉氏变换象函数的数学模型,为使用Simulink传递函数模块实现单相三绕组变压器的仿真模型提供了一条途径,所采用的建模方法和技巧具有启发作用,值得借鉴。

weixin_45670943的博客 374

大数据实战04-Java操作hadoop的常用的API

在前面的文章中介绍了在windows环境中开发hadoop的入门程序,并实现了在windows环境中连接虚拟机来模拟真实的远程连接的情况,接下来通过同样的连接方式来讲解hadoop的常用api的使用的方式 hadoop的使用方式 package com.kkcl.hadoop; import org.apache.hadoop.conf.Configuration; import org.a...

松花江畔 464

使用Qt Creator自带的Qt Designer构造UI界面流程总结

在本文中,我们将总结使用Qt Creator自带的Qt Designer构造UI界面的流程。在对话框中,您可以选择一个控件的信号,然后将其连接到另一个控件的槽。例如,您可以将按钮的点击信号连接到一个槽函数,以响应按钮的点击事件。右键单击窗口设计器中的空白区域,选择适当的布局管理器,如水平布局、垂直布局或网格布局。在Qt Designer中,您可以使用各种预定义的UI控件来设计应用程序的界面。现在,您可以在应用程序的源代码中使用生成的UI界面。在您的源文件中,包含相应的头文件,然后创建一个UI界面的实例。

cl6789的博客 1394

芯片ATE测试PAT(Part Average Testing)学习总结-20250916

文章摘要:零件平均测试(PAT)是半导体制造中基于统计学的质量控制方法,分为静态和动态两种类型。静态PAT通过预先设定的固定限值(每6-8批次更新)筛选异常芯片,计算采用稳健平均值和四分位间距。动态PAT则根据实时数据调整限值,能更精确识别异常而不误判合格芯片。两种方法均采用"均值±6倍标准差"的计算公式,但动态PAT具有更好的适应性和准确性。该方法通过统计分析提高了芯片产品的质量和可靠性。

歌颂苦难的行为是无耻的; 1192

Hadoop-HDFS的Java常用API

1.首先创建一个maven项目,下面是pom文件所需的jar包 cloudera https://repository.cloudera.com/artifactory/cloudera-repos/ org.apache.Hadoop Hadoop-common 2.6.0-cdh5.14.0

v3424的博客 287

基于Simulink的光伏电站AGC/AVC协调控制仿真

摘要:本文基于Simulink构建光伏电站AGC/AVC协调控制仿真模型,通过分层控制架构实现有功-无功解耦与储能协同。系统包含100kW光伏阵列、50kWh储能及逆变器组件,采用PID控制器实现AGC频率调节(±0.1Hz)和Q-V下垂控制实现AVC电压稳定(±2%)。仿真验证了三种工况下协调控制的有效性:正常调度时储能充电20kW;负荷突增时储能15kW放电维持频率;光照骤降时储能30kW放电并吸收2kVAR无功稳定电压。结果表明,该方案可使频率/电压偏差分别控制在0.1Hz和7.6V内,响应时间&lt

xiaoheshang_123的博客 236

Hadoop系列——HDFS常用和命令,Java API客户端day3-1

HDFS在生产应用中主要是Java客户端的开发,其核心步骤是从HDFS提供的API中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件。首先设置身份,配置对象实例设置HDFS相关属性,然后使用FileSystem的。-p:保留访问和修改时间,所有权,权限信息。-p:保留访问时间、修改时间、所有权和权限。-s:表示显示指定路径文件长度的汇总摘要。我们要关注的是配置的name和value。-h:详细,以人能看懂的方式展现。-f:动态显示文件追加的内容。

qq_51553982的博客 949

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

hadoop的java接口_hadoop java接口及常用api

# java接口及常用apipackage com.yting.hadoop.hdfs;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.URI;import org.apache.hadoop.conf.Configurati...

weixin_28810909的博客 416

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Hadoop学习笔记系列:03-Hadoop-Hdfs的Java Api的常用操作

文章目录概述一、添加pom.xml依赖HDFS的java API 操作创建Hdfs的FileSystem 环境创建目录判断文件或者目录是否存在创建文件上传本地文件到hdfs下载文件到本地删除文件或目录查看文件列表信息使用文件流的方式写hdfs文件使用文件流的方式下载文件完整的代码示例报错:java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.报错解决报错: Permission denied: user=TianTi

925

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Hadoop学习三(java api 对hdfs常用操作)

上文测试通过后,对于其他的一些java api操作hdfs进行了编写和测试,如下: import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Pa

李鑫堂的学习记录 575

【Hadoop】Hadoop生态系列之HDFS常用Shell命令实践及Java API操作HDFS

指路牌HDFS实践HDFS Shell 命令(常用)打印hadoop类路径格式化NameNodedfsadmin命令DFS命令-appendToFile-cat-chmod-copyFromLocal / -copyToLocal-mvToLocal/mvFromLocal-put/getJava API操作HDFS(了解)搭建开发步骤:文件上传文件下载删除文件回收站所有文件所有文件或文件夹 HDFS实践 HDFS Shell 命令(常用) 打印hadoop类路径 [root@CentOS ~]# hdfs

码小白. 2060

hadoop集群:HDFS的Shell命令行操作与Java 常用API操作

hadoop hdfs的shell命令与java 常用api的操作与思想保持一致,故对比,易于理解与记忆 主要区别点: shell命令行,一般在虚拟机集群或者远程连接工具Xshell上操作,被操作对象分别为 Linux文件系统本地 + HDFS文件系统 Java API,一般在Windows系统下idea软件上编写代码操作,被操作对象分别为 Windows文件系统本地 + HDFS文件系统 (一)HDFS的Shell命令行操作: 1,查看所有的hdfs命令 hadoop dfs 或者 hdfs dfs ,

weixin_41300542的博客 4484

[Hadoop 2] 常用 Java API 及应用实例

hadoop java API 及 应用实例

buildcourage的博客 694

Hadoop3:Java客户端常用的HDFS API

Hadoop

Brave_heart4pzj的博客 528

windows本地通过java调用hadoop常用基础api

一、添加pom.xml依赖 <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.12.0</version> </dependency> <dependency...

猿猿不断的博客 401

Hbase/Hadoop Java API编程常用语句

  从scanner获取rowkey: for(Result rr : scanner){ String key =Bytes.toString(rr.getRow())} HBase API - Result object getRow() Method for retrieving the row key that corresponds to the row from which...

weixin_33714884的博客 130

3、调用hadoop API实现HDFS常用Java实例和I/O流操作实例

HDFS常用的java API调用实例1、文件上传2、HDFS文件下载3、HDFS文件夹删除4、HDFS文件名改名5、HDFS文件详情查看6、HDFS文件和文件夹判断7、HDFS的I/O流操作7.1 HDFS文件上传7.2 HDFS文件下载7.3 定位文件读取 1、文件上传 @Test public void testCopyFromLocalFile() throws IOException, ...

STAR GAME 637

Hadoop 第五课 几个文件搞定HDFS常用的Java Api

一、使用Hadoop URL读取数据“` package online.tengxing.hdfs;import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils;import java.io.IOException; import java.io.InputStream;

行走的IT 777
上一篇: HADOOP安装部署说明
下一篇: 分布式wordcount思路
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值