java操作Linux系统上的HDFS文件系统
一、首先:在Linux上搭建HDFS伪分布式环境,启动命令 ------>sh start-all.sh,显示启动成功界面如下:
二 、win 上Java开发环境使用的是IDEA ,Java远程操作HDFS,在pom中用到的依赖如下(因为hadoop用的是2.7.1的版本所用这里我也用的是2.7.1):
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.5</version>
</dependency>
三、新建一个hdfstest类
实现文件上传,代码如下:
public class Hdfs {
static FileSystem fs =null;
public static void main(String[] args) throws IOException {
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://lxp:9000/");
try {
fs = FileSystem.get(new URI("hdfs://lxp:9000/"),conf,"root");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
try {
upload();//文件上传
/* download();//文件下载*/
/* mkdir();//创建文件夹*/
/* rm();//删除文件夹或者文件*/
/* listFiles();//查看文件信息*/
} catch (Exception e) {
e.printStackTrace();
}
}
/*上传文件*/
public static void upload() throws Exception{
fs.copyFromLocalFile(new Path("D:/lxp.txt"), new Path("hdfs://lxp:9000/ll/xx/pp/lxppppp.txt"));
}
}
解析:
1. Configuration获取Hadoop配置文件的信息。
2. conf.set("fs.defaultFS","hdfs://lxp:9000/")可以对hadoop的配置文件("core-site.xml")信息手动修改,会覆盖掉从配置文件中读取的信息;
3. FileSystem.get(new URI("hdfs://lxp:9000/"),conf,"root"); root用户为登录Linux系统的登录用户;
实现文件下载,代码如下:
/*下载文件*/
public static void download() throws IOException {
fs.copyToLocalFile(new Path("hdfs://lxp:9000/aa/lxppppp.txt"),new Path("D://lxp2.txt"));
}
实现文件查看,代码如下:
/*查看文件信息*/
public static void listFiles() throws IOException {
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for(FileStatus status : listStatus){
String fileName= status.getPath().getName();
System.out.println(fileName);
}
}
解析:
1. listStatus可以列出文件和文件夹的信息
2. listFiles只可以获取文件
实现文件夹创建,代码如下:
/*创建文件夹*/
public static void mkdir() throws IOException {
fs.mkdirs(new Path("/ll/xx/pp"));
}
解析:
1. fs.mkdirs(new Path("/ll/xx/pp")); 如果父目录不存在,也会一起创建。
实现文件或者文件夹的删除,代码如下:
/*删除文件或者文件夹*/
public static void rm() throws IOException {
fs.delete(new Path("/aa"),true);
}
注意:
一、 fs = FileSystem.get(new URI("hdfs://lxp:9000/"),conf,"root"); 要与hadoop配置文件(“”core-site.xml
“”)中的主机名相同(使用的ssh远程连接工具,没敲命令直接打开了,偷懒了。。。。)
二、如下错误(不认识主机名):
解决办法:
1.进入到C盘路径:C:\Windows\System32\drivers\etc
2.在hosts文件末尾添加如下信息:
192.168.1.220 master
192.168.1.225 no1
192.168.1.226 no2
192.168.1.227 no3