java查看hdfs文件是否已打开_java实现HDFS上文件的判断,添加,查询

这篇博客介绍了如何在Java中连接HDFS,包括检查文件是否存在、向HDFS插入文件及读取文件内容的步骤。通过配置Hadoop的依赖,使用FileSystem API进行操作,并展示了具体的Java代码示例。
摘要由CSDN通过智能技术生成

(一)在eclipse中新建一个java项目,就普通建一个java项目就可以,然后添加hadoop的依赖包

98e886d362e45c0657c42e214b7f6cc9.png

(二)打开后选择add Exernal jars

添加hadoop的包,包的位置如下(/usr/local/hadoop/是我的hadoop路径)

/usr/local/hadoop/share/hadoop/common下所有jar包

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

/usr/local/hadoop/share/hadoop/hdfs下所有jar包

/usr/local/hadoop/share/hadoop/hdfs/lib下所有jar包

f722c326ccf719436cde96bf40b5f140.png

(三)现在就可以开始编码了但是一定要先把hadoop打开,命令是在你的hadoop路径下./sbin/start-all.sh,输入jps可以验证是否打开了hadoop

(1)判断hdfs上是否存在某文件代码如下

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

public class HDFS_Judge_exist {

public static void main(String[] args){

try{

String fileName = "input/test";

Configuration conf = new Configuration();

conf.set("fs.defaultFS", "hdfs://localhost:9000");

conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

FileSystem fs = FileSystem.get(conf);

if(fs.exists(new Path(fileName))){

System.out.println("文件存在");

}else{

System.out.println("文件不存在");

}

}catch (Exception e){

e.printStackTrace();

}

}

}

(2)往HDFS中插入某一个文件代码如下

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.Path;

public class HDFS_insert {

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

Configuration conf = new Configuration();

conf.set("fs.defaultFS","hdfs://localhost:9000");

conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");

FileSystem fs = FileSystem.get(conf);

byte[] buff = "Hello world".getBytes(); // 要写入的内容

String filename = "input/test1.txt"; //要写入的文件名

FSDataOutputStream os = fs.create(new Path(filename));

os.write(buff,0,buff.length);

System.out.println("Create:"+ filename);

os.close();

fs.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

(3)查询hdfs的文件内容

import java.io.BufferedReader;

import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.fs.FSDataInputStream;

public class HDFS_readFile {

public static void main(String[] args) {

try {

Configuration conf = new Configuration();

conf.set("fs.defaultFS","hdfs://localhost:9000");

conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");

FileSystem fs = FileSystem.get(conf);

Path file = new Path("input/test.txt");

FSDataInputStream getIt = fs.open(file);

BufferedReader d = new BufferedReader(new InputStreamReader(getIt));

String content = d.readLine(); //读取文件一行

System.out.println(content);

String content1 = d.readLine(); //读取文件一行

System.out.println(content1);

String content2 = d.readLine(); //读取文件一行

System.out.println(content2);

d.close(); //关闭文件

fs.close(); //关闭hdfs

} catch (Exception e) {

e.printStackTrace();

}

}

}

(四)下面介绍如何把Java应用程序生成JAR包,部署到Hadoop平台上运行。首先,在Hadoop安装目录下新建一个名称为myapp的目录,存放jar包。命令:kdir myapp

(1)点击eclipse导航条中File-Export

f3ef48b44249f18e6047cc186fdf14ac.png

(2)点击next

7eeda19e1ea7518a2c62b870290f5650.png

第一个Launch Configuration用于设置生成的JAR包被部署启动时运行的主类,点击三角形在下拉列表中选择就好了。

第二个是让我们填入包存放的路径,选择我们刚才新建的myapp路径

(3)点击finish

点击finish的过程中会出现报错,不要管他直接点确认,哪两个错误提示不影响后面操作

(4)在hadoop的路径下输入:./bin/hadoop jar ./myapp/HDFS_Judge_exist.jar

这条命令是指我们要使用hadoop,通过jar包的方式,jar包的位置在当前目录下/myapp/HDFS_Judge_exist.jar的地方

b4c6c8e56674d00782d4b1568fb47e21.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,要在Java中下载HDFS文件文件夹,可以使用Hadoop API中的FileSystem类。 以下是下载HDFS文件的示例代码: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.IOException; import java.io.OutputStream; import java.net.URI; import java.net.URISyntaxException; public class HDFSFileDownload { public static void main(String[] args) throws IOException, URISyntaxException { String hdfsUri = "hdfs://localhost:9000"; String filePath = "/user/hadoop/example.txt"; String localPath = "example.txt"; Configuration config = new Configuration(); // 设置HDFS的URI config.set("fs.defaultFS", hdfsUri); // 创建HDFS文件系统对象 FileSystem fs = FileSystem.get(new URI(hdfsUri), config); // 创建HDFS文件路径对象 Path hdfsPath = new Path(filePath); // 创建本地文件路径对象 Path localPathObj = new Path(localPath); // 打开HDFS文件输入流 OutputStream outputStream = fs.create(localPathObj); // 从HDFS文件中复制数据到本地文件 fs.copyToLocalFile(hdfsPath, localPathObj); // 关闭输出流和文件系统 outputStream.close(); fs.close(); } } ``` 要下载HDFS文件夹,可以使用递归函数来遍历文件夹中的所有文件并下载它们。以下是示例代码: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; public class HDFSFolderDownload { public static void main(String[] args) throws IOException, URISyntaxException { String hdfsUri = "hdfs://localhost:9000"; String folderPath = "/user/hadoop/example"; String localPath = "example"; Configuration config = new Configuration(); // 设置HDFS的URI config.set("fs.defaultFS", hdfsUri); // 创建HDFS文件系统对象 FileSystem fs = FileSystem.get(new URI(hdfsUri), config); // 创建HDFS文件夹路径对象 Path hdfsFolderPath = new Path(folderPath); // 创建本地文件夹路径对象 Path localFolderPath = new Path(localPath); // 如果本地文件夹不存在,则创建它 if (!localFolderPath.exists()) { localFolderPath.mkdir(); } // 遍历HDFS文件夹并下载所有文件 downloadFolder(fs, hdfsFolderPath, localFolderPath); // 关闭文件系统 fs.close(); } public static void downloadFolder(FileSystem fs, Path hdfsFolderPath, Path localFolderPath) throws IOException { // 获取HDFS文件系统中的所有文件文件夹 Path[] pathList = fs.listPaths(hdfsFolderPath); // 遍历文件文件夹 for (Path path : pathList) { if (fs.isDirectory(path)) { // 如果是文件夹,则递归下载它 Path localPath = new Path(localFolderPath, path.getName()); downloadFolder(fs, path, localPath); } else { // 如果是文件,则下载它 Path localPath = new Path(localFolderPath, path.getName()); fs.copyToLocalFile(path, localPath); } } } } ``` 希望这些代码能够帮助到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值