Hdfs-Java002

配置Hadoop

1. 在 Windows 安装Hadoop.
2. 设置 ``HADOOP_HOME``
3. 将hadoop的bin目录下的hadoop.dll 放置到 C:/Windows/System32 目录下

maven

		<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs-client</artifactId>
            <version>3.1.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.1</version>
        </dependency>

Java接口

Configuration

通过该接口设置HDFS的信息.
例如,类型,以及链接地址

1. Configuration
	封装了Client 或者 Server的配置
2. FileSystem
	该类是文件系统的对象.可以用该对象对文件进行操作.

FileSystem

代表了HDFS的类型.文件系统的类型
例如

FileSystem fs = FileSystem.get(configuration);

get 方法从 configuration 中的一个参数:fs.defaultFS获取该HDFS文件系统的类型.
如果没有设置的话,则使用默认的系统类型
默认的来自 Hadoop 中Jar包的 core-default.xml
默认值是 file:///,是一个本地的文件系统,就不是分布式文件系统

HDFS操作

HDFS创建文件夹

FileSystem fileSystem = FileSystem.get(new URI(Constant.URL),new Configuration(),"root");
fileSystem.mkdirs(new Path("/base_msg"));

遍历所有HDFS文件

API遍历

FileSystem fileSystem = FileSystem.get(new URI(Constant.URL),new Configuration(),"root");
RemoteIterator<LocatedFileStatus> locatedFileStatusRemoteIterator = fileSystem.listFiles(new Path("/"), true);
while (locatedFileStatusRemoteIterator.hasNext()) {
    LocatedFileStatus fileStatus = locatedFileStatusRemoteIterator.next();
    System.out.println("file Path and file Name :: "+fileStatus.getPath()+"---"+fileStatus.getPath().getName());
    BlockLocation[] blockLocations = fileStatus.getBlockLocations();
    System.out.println("block size is :: " + blockLocations.length);
    for (BlockLocation blockLocation : blockLocations) {
        String[] hosts = blockLocation.getHosts();
        for (String host : hosts) {
            System.out.println(host + "--");
        }
    }
}

文件上传

FileSystem fileSystem = FileSystem.get(new URI(Constant.URL),new Configuration(),"root");
fileSystem.copyFromLocalFile(new Path("C:/Users/Administrator/Desktop/周报-XXX.doc"),new Path("/medicalRecord/XXX.doc"));
fileSystem.close();

文件下载

FileSystem fileSystem = FileSystem.get(new URI(Constant.URL),new Configuration(),"root");
FSDataInputStream in = fileSystem.open(new Path("/medicalRecord/XXX病历.doc"));
FileOutputStream out = new FileOutputStream(new File("C:/Users/Administrator/Desktop/XXX病历1.doc"));
IOUtils.copy(in,out);
// 需要关闭
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
System.out.println("-----第二种方法直接下载-------");
fileSystem.copyFromLocalFile(new Path("/medicalRecord/XXX病历.doc"),new Path("C:/Users/Administrator/Desktop/XXX病历22.doc"));
// 第二种只需要关闭这个即可
fileSystem.close();

只是API的调用;均可实现下载

文件合并

将一些小的文件合并上传或者合并下载

上传

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
好的,我可以为您解答有关HDFS-JAVA接口上传文件的问题。 首先,您需要在HDFS-JAVA接口中实现一个上传文件的方法。这个方法可以使用Hadoop中的FileSystem和FSDataOutputStream类来实现。以下是一个示例代码: ``` public void uploadFile(String localFilePath, String hdfsFilePath) { Configuration conf = new Configuration(); try { // 获取HDFS文件系统对象 FileSystem fs = FileSystem.get(URI.create(hdfsFilePath), conf); // 创建HDFS文件输出流 FSDataOutputStream outputStream = fs.create(new Path(hdfsFilePath)); // 创建本地文件输入流 FileInputStream inputStream = new FileInputStream(localFilePath); // 将本地文件内容写入HDFS文件 byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } // 关闭流 inputStream.close(); outputStream.close(); fs.close(); } catch (IOException e) { e.printStackTrace(); } } ``` 在这个方法中,您需要传入本地文件的路径和HDFS文件的路径,然后将本地文件内容写入到HDFS文件中。 接下来,您可以在HDFS-JAVA接口的API中调用这个上传文件的方法。在API中,您需要传入本地文件的路径和HDFS文件的路径。以下是一个示例代码: ``` @PostMapping("/upload") public ResponseEntity<String> uploadFile(@RequestParam("localFilePath") String localFilePath, @RequestParam("hdfsFilePath") String hdfsFilePath) { try { // 调用上传文件的方法 uploadFile(localFilePath, hdfsFilePath); return ResponseEntity.ok("文件上传成功"); } catch (IOException e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败"); } } ``` 在这个API中,我们首先从请求参数中获取本地文件的路径和HDFS文件的路径,然后调用之前实现的上传文件的方法将本地文件内容写入到HDFS文件中。 这样,您就可以在HDFS-JAVA接口中实现上传文件的功能了。希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值