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

二、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包导入。

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

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

- 修改

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

- 运行如下代码,创建目录:
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
四、参考与推荐
版权声明:本文为aic1999原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。