CentOS系统下简单的分布式(HDFS)文件夹创建,文件上传、下载等简单操作

版权声明:转载请标明出处: https://blog.csdn.net/gaofengyan/article/details/86103015

目录

Linux中eclipse创建分布式普通项目的基本操作

创建工具类及测试类


       这里基于上一篇博客(https://blog.csdn.net/gaofengyan/article/details/85790825)进行学习,hadoop和开发工具eclipse都已经安装好并配置好了,接下来就简单的文件夹创建、文件上传、下载、更改等操作简单体验一下分布式的普通项目玩法。因为也是初步学习,所以就以工具类创建为依托,以后也可以在这上面进行更改使用。

       首先打开Linux桌面的eclipse,看到 eclipse 左边的目录是 Package Explorer ,这个目录看不到我们的分布式(DFS Localtions)文件目录,需要打开:Windows --> Show View --> Project Explorer ,启动这个视角的目录才能看到分布式的目录结构:

         

Linux中eclipse创建分布式普通项目的基本操作

     New --> others --> Map/Reduce Project -- next

    

  填写工程名:project name --> next --> finish --> yes  

   

  创建的hdfs001分布式项目如下图所示,下面还有很多jar包(增加jar包,新建的mapreduce 项目带所有jar包):

   

      在工程下面创建一个资源文件 右键工程名 --> new --> source floder -->floder name --> finish:

 

       增加配置文件:log4j.properties (日志的配置文件)、core-site.xml(分布式的工作主机等信息配置文件)  这两个配置文件在hadoop目录下都有(这里有个常识,有大部分配置文件一般都在我们安装的程序 【主目录/etc/程序命令/下】下面可以直接找到,不用自己去写,也可以直接引用):

[hduser@node1 hadoop]$ cp etc/hadoop/log4j.properties  /home/hduser/workspace/hdfs001/resources/
[hduser@node1 hadoop]$ cp etc/hadoop/core-site.xml  ~/workspace/hdfs001/resources/

这里是第一次,展示一下core-site.xml配置文件的信息:

      core-site.xml(主要有分布式的主机工作名node1及端口号9000和分布式的目录以及临时文件存放路径)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
   <property>
       <name>fs.defaultFS</name>
       <value>hdfs://node1:9000</value>
   </property>
   <property>
       <name>hadoop.tmp.dir</name>
       <value>file:/home/hduser/hadoop/tmp</value>
   </property>
</configuration>

创建工具类及测试类

          这里的操作跟在Windows下面的操作是大同小异的,没多大区别,创建目录,创建类,我这里直接给代码。

       HdfsUtils.java 工具类

package org.kgc1803.netdisk.util;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

/**
 * hdfs 的 io 操作工具类
 * @author hduser
 *
 */
public class HdfsUtils {
	//提取公共的全局静态变量
	private static FileSystem fs;
	//静态代码快(类第一次调用的时候产生对象)
	static{
		Configuration conf = new Configuration();
		try {
			fs = FileSystem.get(conf);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//查询一个目录下的所有字文件信息 hadoop  dfs  -ls /
	public static FileStatus[] getFileInfo(Path rootPath){
		//FileStatus 显示当前目录子文件信息
		FileStatus[] files = null;
		try {
			//listStatus 显示当前目录子文件信息
				files = fs.listStatus(rootPath);
			 }catch (IOException e) {
				e.printStackTrace();
			}
		return files;
	}
	
	//新建一个目录  hadoop fs  -mkdir /**
	public static void mkdir(Path p){
		try {
			if(!fs.exists(p)){
				fs.mkdirs(p);
			}else{
				System.out.println("目录已存在");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//上传本地文件到hdfs上
	//hadoop  dfs  -put  本地文件  hdfs目录
	//hadoop  dfs  -copyFromLocal  本地文件  hdfs目录
	public static void copyFromLocal(Path localPath,Path hdfsPath){
		try {
			fs.copyFromLocalFile(localPath, hdfsPath);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//下载hdfs上的文件到本地
	//hadoop  dfs  -get  本地文件  hdfs目录
	//hadoop  dfs  -copyToLocal  hdfs文件  本地文件
	public static void copyToLocal(Path hdfsPath,Path localPath){
		try {
			fs.copyToLocalFile(hdfsPath, localPath);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//删除 文件或目录
	//hadoop  dfs  -rmr hdfs文件
	public static void remove(Path p){
		try {
			fs.delete(p, true);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//重命名文件或目录
	public static void rename(Path oldPath,Path newPath){
		try {
			fs.rename(oldPath, newPath);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

   测试类:

package cn.hdfs.demo;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;

import cn.hdfs.demo.utils.HdfsUtils;

/**
 * 测试hdfs 工具类
 * @author hduser
 *
 */
public class TestHdfs {
	//定义全局变量
	private FileSystem fs;
	
	//抽取公共的部分
	@Before
	public void before() throws IOException{
		//加载hdfs  核心配置文件core-site.xml
		Configuration  conf  = new Configuration();
		//获取文件系统对象 FileSystem
		fs = FileSystem.get(conf);
	}
	
	//测试 查看文件信息
	@Test
	public void fun1(){
			//查看 hadoop dfs  -ls  / | hdfs://node1:9000/.....
			Path rootPath = new Path("hdfs://node1:9000/output/wc1");
			//listStatus 显示当前目录子文件信息
			HdfsUtils.getFileInfo(fs, rootPath);

	}
	
	//测试mkdir
	@Test
	public void fun2(){
		    //创建文件 hadoop dfs -mkdir /  | hdfs://node1:9000/.....
			Path p = new Path("hdfs://node1:9000/hfile/");
			//listStatus 显示当前目录子文件信息
			HdfsUtils.mkdir(fs, p);
			//查看创建的文件
			HdfsUtils.getFileInfo(fs, new Path("hdfs://node1:9000/"));
	}
	
	//测试copyFromLocal 上传本地文件到hdfs上
	@Test
	public void fun3(){
		//hadoop  dfs  -copyFromLocal  本地文件  hdfs目录
		   //dfs目录
			Path p = new Path("hdfs://node1:9000/hfile/");
			//本地文件
			Path file = new Path("file:/home/hduser/桌面/aa.txt");
			HdfsUtils.copyFromLocal(fs, file, p);
			//查看信息
			HdfsUtils.getFileInfo(fs, new Path("hdfs://node1:9000/hfile"));
	}
	
	//测试copyToLocal 下载hdfs上的文件到本地
	@Test
	public void fun4(){
		//hadoop  dfs  -copyToLocal  hdfs文件  本地文件
		//本地文件路径
		Path rootPath = new Path("file:/home/hduser/桌面/bbb");
		//hdfs的文件
		Path hdfsfile = new Path("hdfs://node1:9000/input/1.txt");
		HdfsUtils.copyToLocal(fs, hdfsfile, rootPath);
		//查看信息
		HdfsUtils.getFileInfo(fs, rootPath);
		}
	
	//删除 文件或目录
	@Test
	public void fun5(){
		//hadoop  dfs  -rmr hdfs文件
		//hdfs的文件
		Path hdfsfile = new Path("hdfs://node1:9000/hfile/");
		HdfsUtils.remove(fs, hdfsfile);
		//查看信息
		HdfsUtils.getFileInfo(fs, new Path("hdfs://node1:9000/"));
		}

}

测试之后,eclipse 左侧的分布式目录就会出现我们操作的文件夹目录及文件:

    

猜你喜欢

转载自blog.csdn.net/gaofengyan/article/details/86103015