-
实验环境:
Linux Ubuntu 16.04jdk-8u191-linux-x64 hadoop-3.0.0 hadoop-eclipse-plugin-2.7.3.jar eclipse-java-juno-SR2-linux-gtk-x86_64
-
切换目录到/apps/hadoop/sbin下,启动hadoop。
view plain copy cd /apps/hadoop/sbin ./start-all.sh ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210331174300426.png)
-
在Linux本地创建/data/hadoop4目录
mkdir -p /data/hadoop4 -
切换到/data/hadoop4目录,用wget命令,从…网址上下载依赖包hadoop2lib.tar.gz,并解压到当前目录。
-
打开clipse,新建JAVA项目,名为hadoop4。
-
在hadoop4项目下新建包,名为my.hdfs。
-
在hadoop4项目下创建目录,名为hadoop4lib,用于存放项目所需依赖包。
-
从/data/hadoop4/hadoop2lib目录下拷贝所有jar包到项目下的hadoop4lib目录
-
选中hadoop4lib里面的所有jar包,右键点击BuildPath=>Add to Build Path选项。
-
这样就将jar包加载到项目里面了,然后是进行Java API对HDFS的各种基本操作。
-
在my.hdfs包下,新建类MakeDir,程序功能是在HDFS的根目录下,创建名为hdfstest的目录
```java package my.hdfs; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class MakeDir { public static void main(String[] args) throws IOException, URISyntaxException { Configuration conf = new Configuration(); String hdfsPath = "hdfs://localhost:9000"; FileSystem hdfs = FileSystem.get(new URI(hdfsPath), conf); String newDir = "/hdfstest"; boolean result = hdfs.mkdirs(new Path(newDir)); if (result) { System.out.println("Success!"); }else { System.out.println("Failed!"); } } } ```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210331175637749.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhbmR5bHg=,size_16,color_FFFFFF,t_70)
- 点击运行
- 在Eclipse里执行,然后在HDFS上查看实验结果
- 在my.hdfs包下,新建类TouchFile,程序功能是在HDFS的目录/hdfstest下,创建名为touchfile的文件
package my.hdfs;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class TouchFile {
public static void main(String[] args) throws IOException, URISyntaxException {
Configuration configuration = new Configuration();
String hdfsPath = "hdfs://localhost:9000";
FileSystem hdfs = FileSystem.get(new URI(hdfsPath), configuration);
String filePath = "/hdfstest/touchfile";
FSDataOutputStream create = hdfs.create(new Path(filePath));
System.out.println("Finish!");
}
}
- 在Eclipse里执行,然后在hdfs上查看实验结果。
- 在/data/hadoop4下使用vim打开sample_data文件
- 写入
- 在my.hdfs包下,创建类CopyFromLocalFile.class,程序功能是将本地linux操作系统上的文件/data/hadoop4/sample_data,上传到HDFS文件系统的/hdfstest目录下。
在Eclipse里执行,然后在HDFS上查看实验结果。
- 在my.hdfs包下,创建类CopyToLocalFile.class,程序功能是将HDFS文件系统上的文件/hdfstest/sample_data,下载到本地/data/hadoop4/copytolocal 。
package my.hdfs;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CopyToLocalFile {
public static void main(String[] args) throws IOException, URISyntaxException {
Configuration conf = new Configuration();
String hdfsPath = "hdfs://localhost:9000";
FileSystem hdfs = FileSystem.get(new URI(hdfsPath), conf);
String from_HDFS = "/hdfstest/sample_data";
String to_Linux = "/data/hadoop4/copytolocal";
hdfs.copyToLocalFile(false, new Path(from_HDFS), new Path(to_Linux));
System.out.println("Finish!");
}
}
在Eclipse里执行,然后在Linux本地/data/hadoop4上查看实验结果。
view plain copy
cd /data/hadoop4/copytolocal
ls
- 在my.hdfs包下,新建类ListFiles,程序功能是列出HDFS文件系统/hdfstest目录下,所有的文件,以及文件的权限、用户组、所属用户。
package my.hdfs;
import java.io.IOException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class ListFiles {
public static void main(String[] args) throws IOException {
Configuration conf = new Configuration();
String hdfspath = "hdfs://localhost:9000/";
FileSystem hdfs = FileSystem.get(URI.create(hdfspath), conf);
String watchHDFS = "/hdfstest";
FileStatus[] files = hdfs.listStatus(new Path(watchHDFS));
for (FileStatus file : files) {
System.out.println(file.getPermission() + " " + file.getOwner()
+ " " + file.getGroup() + " " + file.getPath());
}
}
}
在Eclipse里执行,然后在Eclipse的控制界面Console上查看实验结果。
- 在my.hdfs包下,新建类IteratorListFiles,程序功能是列出HDFS文件系统/根目录下,以及各级子目录下,所有文件以及文件的权限、用户组,所属用户。
package my.hdfs;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class IteratorListFiles {
public static void main(String[] args) throws IOException {
Configuration conf = new Configuration();
String hdfspath = "hdfs://localhost:9000/";
FileSystem hdfs = FileSystem.get(URI.create(hdfspath), conf);
String watchHDFS = "/";
iteratorListFile(hdfs, new Path(watchHDFS));
}
public static void iteratorListFile(FileSystem hdfs, Path path)
throws FileNotFoundException, IOException {
FileStatus[] files = hdfs.listStatus(path);
for (FileStatus file : files) {
if (file.isDirectory()) {
System.out.println(file.getPermission() + " " + file.getOwner()
+ " " + file.getGroup() + " " + file.getPath());
iteratorListFile(hdfs, file.getPath());
} else if (file.isFile()) {
System.out.println(file.getPermission() + " " + file.getOwner()
+ " " + file.getGroup() + " " + file.getPath());
}
}
}
}
运行
22. 在my.hdfs包下,新建类LocateFile,程序功能是查看HDFS文件系统上,文件/hdfstest/sample_data的文件块信息。
package my.hdfs;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class LocateFile {
public static void main(String[] args) throws IOException, URISyntaxException {
Configuration conf = new Configuration();
String hdfsPath = "hdfs://localhost:9000";
FileSystem hdfs = FileSystem.get(new URI(hdfsPath), conf);
Path file = new Path("/hdfstest/sample_data");
FileStatus fileStatus = hdfs.getFileStatus(file);
BlockLocation[] location = hdfs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
for (BlockLocation block : location) {
String[] hosts = block.getHosts();
for (String host : hosts) {
System.out.println("block:" +block + " host:"+ host);
}
}
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021033118311962.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhbmR5bHg=,size_16,color_FFFFFF,t_70)