分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)
前面的文章介绍了怎么将整个集群系统搭建起来,并进行了有效的测试。为了解决登录一台服务器登录其他服务器需要多次输入密码的问题,提供了SSH免密码登录解决方案。还有一些hadoop的简单操作shell命令。今天我们就结合eclipse来用JAVA语言来读取和操作我们的hadoop文件系统中的文件。
一、POM文件
1.1 让我们来先看一下mvnrepository里面关于hadoop中的JAR包
1.2 需要引进的JAR包。
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
二、代码
2.1 前提我先在hdfs dfs 系统根目录下建立一个test文件夹,将README.txt复制了进去。
2.2 查看文件
/**
*
*/
package com.yuyi.hadoop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
/**
* @author mcb
*
* 2018年10月11日 下午5:49:28
*/
public class ReadFileToConSoleTest {
public static void main(String[] args) throws Exception {
// 该路径为你想获取的文件的路径,就是想着读取那一个文件
String filePath = "/test/README.txt";
readFileToConSole(filePath);
// readFileToLocal(filePath);
localToHDFS();
}
static FileSystem fs = null;
static {
Configuration conf =new Configuration();
try {
fs = FileSystem.get(new URI("hdfs://192.168.71.233:8020"), conf, "root");
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (URISyntaxException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
// 文件读取
public static void readFileToConSole(String filePath) throws Exception {
// 获取配置
Configuration conf = new Configuration();
// 配置
conf.set("fs.defaultFS", "hdfs://192.168.71.233:8020");
// 获取hdfs文件系统的操作对象
FileSystem fs = FileSystem.get(conf);
// 具体对文件操作
FSDataInputStream fin = fs.open(new Path(filePath));
// 输入流读取,读出到何处,读出大小和是否关闭
IOUtils.copyBytes(fin, System.out, 4096, true);
}
// 文件下载到本地
public static void readFileToLocal(String filePath) throws Exception {
FSDataInputStream fin = null;
OutputStream out = null;
try {
// 获取配置
Configuration conf = new Configuration();
// 配置
// conf.set("fs.defaultFS", "hdfs://192.168.71.233:8020");
// 获取hdfs文件系统的操作对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.71.233:8020"), conf, "root");
// 具体对文件操作
fin = fs.open(new Path(filePath));
out = new FileOutputStream(new File("F:\\hadoop\\testout\\a.txt"));
// 输入流读取,读出到何处,读出大小和是否关闭
IOUtils.copyBytes(fin, out, 4096, true);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} finally {
fin.close();
out.close();
}
}
// 文件从本地上传到hdfs系统中
public static void localToHDFS() throws IllegalArgumentException, IOException {
String localPath="F:\\hadoop\\testout";
String hdfsPath="/test/b.txt";
fs.copyFromLocalFile(new Path(localPath), new Path(hdfsPath));
System.out.println("传输完成~~");
}
}
欢迎订阅公众号(JAVA和人工智能)
获取更过免费书籍资源视频资料
知识点超级链接: