Hadoop入门(3)Shell和JAVA的简单演示+代码实现基础云盘功能

目录

一、Shell的使用

二、JAVA api的使用

(一)配置xml文件

(二)简单代码demo(创建、查看、上传、下载)

三、Python的使用

四、参考与推荐


一、Shell的使用

  • 平时的linux指令是针对本地电脑进行的,而HDFS是分布式的,它针对的是通过网络连接的计算机集群,因此在指令上有所区别。
  • 在大部分普通linux指令前加上“hdfs dfs -”即可。
  • 例如我们想要创建一个文件夹,平时都是用“mkdir /test1”指令在本地虚拟机上创建"test1"目录,但是如果想要在HDFS中创建一个“test1”目录,就需要在普通linux指令前加上“hdfs dfs -”,如下。
hdfs dfs -mkdir /test1

 

  • 在web网页上可以看到我们的确已经创建好了目录test1。 

Hadoop入门(3)Shell和JAVA的简单演示+代码实现基础云盘功能_第1张图片

二、JAVA api的使用

  • 由上面的例子可以看到,我们可以通过shell操纵我们的HDFS,通过shell创建了一个目录,那如何用java api进行同样的操作呢?

(一)配置xml文件

1、创建项目

  • 在本机电脑上用ecplise创建JAVA项目,不赘述。

2、导包

  • 找到hadoop的路径,进入“..hadoop-2.7.0\share\hadoop\common”路径,看到有三个Jar包,将它导入到JAVA项目中。 
  • 同样的,再将“..hadoop-2.7.0\share\hadoop\common\lib”下的所有jar包导入。
  • 再将“..hadoop-2.7.0\share\hadoop\hdfs”下的3个jar包导入。
  • 再将“..hadoop-2.7.0\share\hadoop\hdfs\lib”下的所有jar包导入。

Hadoop入门(3)Shell和JAVA的简单演示+代码实现基础云盘功能_第2张图片

3、导入虚拟机的配置文件

  • 利用xftp进入到虚拟机的“.../hadoop-2.7.0/etc/hadoop”目录下,找到两个文件“hdfs-site.xml”和"core-site.xml",导出并放到项目的/src根目录下。 

Hadoop入门(3)Shell和JAVA的简单演示+代码实现基础云盘功能_第3张图片

  • 要修改“core-site.xml”里面的“localhost”为虚拟机的IP地址,不然本机无法找到虚拟机,它不知道这个“localhost”是谁。(其实也可以在本机上配置host的,使得别名和IP对应,继续使用别名) 

Hadoop入门(3)Shell和JAVA的简单演示+代码实现基础云盘功能_第4张图片

  • 修改 

Hadoop入门(3)Shell和JAVA的简单演示+代码实现基础云盘功能_第5张图片

  • 同样的也要修改"hdfs-site.xml"中的虚拟机名为IP地址。 

Hadoop入门(3)Shell和JAVA的简单演示+代码实现基础云盘功能_第6张图片

  • 运行如下代码,创建目录:
package com.bigdata.yunpan;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


public class YunPanDemo {
		public static void main(String[] args) {
			Configuration conf=new Configuration();  //负责获取相应虚拟机的配置文件信息
			try {
				FileSystem fs=FileSystem.get(conf);  //文件系统的管理类
				Path path=new Path("/yunpan");
				fs.mkdirs(path);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
}

在这过程中可能出现的两个问题。

一、报错ConnnectionRefuse。

我的解决方法:从伪分布式改成完全分布式模式。 所以最好参考官方文档提示,一一排除错误。或者也可以参考别的博客:9000端口拒绝访问

二、报错AccessControlException。

是因为权限不够大,执行修改权限命令chmod,改权限即可。

hdfs dfs -chmod -R 777 /

R是递归遍历子目录的意思,这句话的意思就是修改根目录/下的所有文件权限为777。

  • 在web上可以发现,和shell命令的使用效果一样,的确多了一个目录叫做"yunpan"。 

  • 接下来我们参考API文档写程序,就可以在云盘上创建/上传/下载新文件了,就像一个自用的百度网盘一样。

(二)简单代码demo(创建、查看、上传、下载)

package com.bigdata.yunpan;

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;

/**
 *	一个简易的示例demo2
 */
public class HdfsDemo {
    public static void main(String[] args) {
    	createList("/yunpan");
    	//createFolder("/yunpan");
        //uploadFile("/yunpan/upload.doc ","e://upload.doc");
	//downloadFile("/yunpan/download.doc","e:// download.doc");
        //listFile(new Path("/"));
    }
    
    /**
     * 列出所有文件的名字
     * @param path 待查询路径
     */
    public static void listFile(Path path) {
    	Configuration conf = new Configuration();
	    try {
	    FileSystem fs = FileSystem.get(conf);
	    //传入路径,表示对某个路径下的文件夹列表进行显示
	    //将给定路径下所有的文件元数据放到一个FileStatus的数组中。
	    //FileStatus对象封装了文件的和目录的元数据,包括文件长度、块大小、权限等信息
	    	    FileStatus[] fileStatusArray = fs.listStatus(path);
	    	    for (int i = 0; i < fileStatusArray.length; i++) {
	    	         FileStatus fileStatus = fileStatusArray[i];
	    	       //首先检测当前检测是否是文件夹,如果“是”则进行递归 
	    		    if (fileStatus.isDirectory()) {
	    		        System.out.println("当前路径是:" + fileStatus.getPath());
	    			   listFile(fileStatus.getPath());
	    		    } else {
	    		        System.out.println("当前路径是:"  + fileStatus.getPath());
	    		    }
	    	    }
	    } catch (IOException e) {
	    e.printStackTrace();
	    }
    }
    
    /**
     * 在路径下创建一个文件夹
     * @param p 路径
     */
    public static void createFolder(String p) {
    	// 定义一个配置对象
    	Configuration conf = new Configuration();
    	try {
    		// 通过配置信息得到文件系统的对象
    		FileSystem fs = FileSystem.get(conf);
    		//在指定的路径下创建文件夹
    		Path path = new Path(p);
    		fs.mkdirs(path);
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    }

   /**
    * 上传文件
    * @param webPath  要放置在web上的路径
    * @param localPath 待上传文件的路径
    */
    public static void uploadFile(String webPath,String localPath) {
    	Configuration conf = new Configuration();
    	try {
    		FileSystem fs = FileSystem.get(conf);
    		//定义文件的路径和上传的路径
    		Path src = new Path(localPath);
    		Path dest = new Path(webPath);
    		//从本地上传文件到服务器
    		fs.copyFromLocalFile(src, dest);
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    }
    
    /**
     * 下载文件
     * @param webPath  在web上,待下载文件的路径
     * @param localPath 待下载的本地路径
     */
    public static void downloadFile(String webPath,String localPath) {
    	Configuration conf = new Configuration();
    	try {
    		FileSystem fs = FileSystem.get(conf);
    		//定义下载文件的路径和本地下载路径
    		Path src = new Path(webPath);
    		Path dest = new Path(localPath);
    		//从服务器下载文件到本地
    		fs.copyToLocalFile(src, dest);
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    }
    
    /**
     * 创建目录
     * @param p  创建目录的路径
     */
    public static void createList(String p) {
		Configuration conf=new Configuration();  //负责获取相应虚拟机的配置文件信息
		try {
			FileSystem fs=FileSystem.get(conf);  //文件系统的管理类
			Path path=new Path(p);   
			fs.mkdirs(path);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

三、Python的使用

自行查看官方文档。 python-api

四、参考与推荐

  1. hadoop-java-api官方文档
  2. Shell使用指南(中文)
  3. python-api
  4. hadoop中端口号的含义
  5. Hadoop中JAVA的常用操作

你可能感兴趣的:(Hadoop入门(3)Shell和JAVA的简单演示+代码实现基础云盘功能)