HDFS编程实践-从HDFS中下载指定文件到本地

news/2025/2/21 9:27:40/

前言:Hadoop采用java语言开发,提供了Java Api与HDFS进行交互

先要把hadoop的jar包导入到idea中去

为了能编写一个与hdfs交互的java应用程序,一般需要向java工程中添加以下jar包

1)/usr/local/hadoop/share/hadoop/common目录下的所有jar包

2)/usr/local/hadoop/share/hadoop/common/lib下的所有jar包

3)/usr/local/hadoop/share/hadoop/hdfs目录下的所有jar包

4)/usr/local/hadoop/share/hadoop/hdfs/lib中的所有jar包

1、先从本地上传个文件到HDFS中去

命令

hdfs dfs -cp -f file:///usr/local/hadoop/a b

2、在idea中创建项目

HDFSAPI.java


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.io.File;
import java.io.IOException;//从HDFS中下载指定文件,如果本地文件与要下在文件名相同,则自动对下载的文件重命名
public class HDFSAPI {public static void copyToLocal(Configuration conf , String remoteFilePath, String localFilePath)throws IOException{FileSystem fs = FileSystem.get(conf);Path remotePath = new Path(remoteFilePath);File f = new File(localFilePath);//如果文件名存在,自动重命名(在文件后面加上_0,_1if (f.exists()){System.out.println(localFilePath+"已存在!");Integer i = 0;while (true){f=new File(localFilePath+"_"+i.toString());if (!f.exists()){localFilePath=localFilePath+"_"+i.toString();}i++;System.out.println("将文件重命名"+localFilePath);break;}}//下载到本地Path localPath=new Path(localFilePath);fs.copyToLocalFile(remotePath,localPath);fs.close();}}

Main.java

import org.apache.hadoop.conf.Configuration;public class Main{public static void main(String[] args) {Configuration configuration = new Configuration();configuration.set("fs.default.name","hdfs://localhost:9000");//本地路径String localFilePath="/home/hadoop/text.txt";//hdfs路径String remoteFilePath="/user/hadoop/b";try {HDFSAPI.copyToLocal(configuration,remoteFilePath,localFilePath);System.out.println("下载完成!");}catch (Exception e){e.printStackTrace();}}
}

3、将该项目打包成jar包

File->Project Structure

打包的文件在idea当前项目的out文件夹里面

4、将打包好的jar包移动到hadoop的安装目录下

我这里在hadoop的安装目录下新建了个myapp的文件夹

5、运行

./bin/hadoop jar ./myapp/HDFS_API.jar


http://www.ppmy.cn/news/1122364.html

相关文章

vue3+ts+java使用WebSocket传输数据

一、环境 系统:win11 IDE:vscode 框架:electron22.0.0vite2vue3typescript4.8.4springboot2.2.5jdk1.8 二、websocket介绍 2.1 由来 WebSocket未出现之前,浏览器和服务器之间的通信是通过Web的poll技术进行通信,就…

相机有俯仰角时如何将像素坐标正确转换到其他坐标系

一般像素坐标系转相机坐标系都是默认相机是水平的,没有考虑相机有俯仰角的情况,大致的过程是:像素坐标系统-->图像坐标系-->相机坐标系 ->世界坐标系或雷达坐标系: 像素坐标系 像素坐标系(u,v)是…

RestTemplate发送HTTPS请求

RestTemplate发送HTTPS请求 基础知识: Https原理与工作流程及证书校验:https://www.cnblogs.com/zjdxr-up/p/14359904.html 忽略ssl证书的方式配置: import lombok.extern.slf4j.Slf4j;import org.springframework.http.client.SimpleClien…

Flutter性能监控与优化实践

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的,可以用一套代码同时构建Android和iOS应用,性能可以达到原生应用一样…

【AI视野·今日Robot 机器人论文速览 第三十六期】Tue, 19 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 19 Sep 2023 (showing first 100 of 112 entries) Totally 112 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚In-Hand Object Rotation, RotateIt 提出了一种基于视觉与触觉的物体旋转朝向的方法…

PRT(Precomputed Radiance Transfer【2002】)原理实现

声明 本文源自对Games202课程,作业2的总结。 参考 手把手教你写GAMES202作业:GAMES202-作业2: Precomputed Radiance Transfer(球谐函数)GAMES 202 作业2Games202课程个人Blog 课程总结:Games202(P6、P7…

Nginx之error_page模块解读

目录 error_page的概念 使用举例 跳转到指定页面 跳转到指定网址 使用location的符合完成错误信息展示 ​更改反馈状态码 error_page配置小提示 实战应用解读 限流应用 寻找错误码对应的文件 error_page的概念 error_page是nginx一个重要的指令,作用是…

【MySQL】 MySQL索引事务

文章目录 🛫索引🎍索引的概念🌳索引的作用🎄索引的使用场景🍀索引的使用📌查看索引📌创建索引🌲删除索引 🌴索引保存的数据结构🎈B树🎈B树&#x…