分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)

       分布式系统详解--框架(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和人工智能)

                                                                        获取更过免费书籍资源视频资料

                                                  

知识点超级链接:

 1,分布式系统详解--基础知识(概论

 2,分布式系统详解--基础知识(线程)

 3,分布式系统详解--基础知识(通信)

 4,分布式系统详解--基础知识(CAP)

 5,分布式系统详解--基础知识(安全)

 6,分布式系统详解--基础知识(并发)

 7,分布式系统详解--架构简介(微服务)

 8,分布式系统详解--Linux(权限)

 9,分布式系统详解--框架(Hadoop-单机版搭建)

10,分布式系统详解--架构(Hadoop-克隆服务器)

11,分布式系统详解--框架(Hadoop-集群搭建)

12,分布式系统详解--框架(Hadoop-Ssh免密登陆配置)

13,分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)

猜你喜欢

转载自blog.csdn.net/mcb520wf/article/details/83028801