赞
踩
ubuntu desktop
,另外3台虚拟机的操作系统是centos server
。在desktop
节点打开终端
切换到/opt
目录
下载data.txt
和localFile.txt
数据文件,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/data/data.txt
下载data.txt
和localFile.txt
数据文件,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/data/localFile.txt
下载日志属性文件,wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/log4j .properties
下载Hadoop核心配置文件core-site.xml,wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/core-site.xml
下载Hadoop分布式文件系统配置文件hdfs-site.xml
文件:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/hdfs-site.xml
pom.xml
文件里添加相关依赖<dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.6</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.7.6</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.7.6</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> </dependencies>
作用: 提供Log4j日志框架的核心功能。
详细说明: Log4j是一个用于Java应用程序的灵活的日志框架,log4j-core包含了其核心的日志处理功能。
中慧教学实训平台提供了文件的上传和下载功能
CentOS上Maven项目本地仓库默认位置(用户主目录/.m2/repository
)
刷新项目依赖
刷新之后,多一个Dependencies
项
查看项目依赖的外部库(External Libraries)
/opt
目录里的core-site.xml
、hdfs-site.xml
、log4j.properties
文件拷贝到项目的resources
目录src/main/java
里创建net.huawei.usehdfs
包net.huawei.usehdfs
包里创建HDFSBase
类init()
方法,获取在集群上运行的文件系统init()
方法testMkdirs()
方法@Test
修改为@Before
,并将System.out.printIn(fileSystem)
;语句注释掉。testMkdirs()
方法,查看控制台结果HDFS Shell
命令hdfs dfs -ls -R /
查看创建testCopyFromLocal()
方法
testCopyFromLocal()
方法,查看结果
在master
上查看上传的文件内容
testCopyToLocal()
方法testCopyToLocal()
方法,查看结果创建testDeleteFile()
方法,删除/idea/mkdir/directory/data.txt
文件
运行testDeleteFile()
方法,查看结果
查看/idea/mkdir/directory/data.txt
文件,报错说文件不存在
修改代码,删除/idea/mkdir/directory
目录
运行testDeleteFile()
方法,查看结果
查看/idea/mkdir/directory
目录,报错说目录不存在
testListAllStatus()
方法testListAllStatus()
方法,查看结果anaconda-ks.cfg
到HDFS根目录testListAllStatus()
方法,查看结果testListAllStatus()
方法,查看结果package net.huawei.usehdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.net.URI; public class HDFSBase { private FileSystem fileSystem; private Configuration configuration; /** * 获取文件系统并配置在集群上运行 * @throws IOException * @throws InterruptedException */ @Before public void init() throws IOException, InterruptedException { //1、获取文件系统 configuration = new Configuration(); //2、配置在集群上运行 String uri = "hdfs://mycluster:8020"; fileSystem = FileSystem.get(URI.create(uri), configuration, "root"); //System.out.println(fileSystem); } /** * 创建目录 * @throws IOException */ @Test public void testMkdirs() throws IOException { //3、创建目录 Path path = new Path("/idea/mkdir/directory"); fileSystem.mkdirs(path); fileSystem.close(); } /** * 上传文件 * @throws IOException */ @Test public void testCopyFromLocal() throws IOException { //3、从本地上传文件到hdfs文件系统 // Path src 要上传的文件的路径(本地文件系统中的路径) Path src = new Path("/opt/data.txt"); // Path dst 将文件上传到的路径(hdfs文件系统中的路径) Path dst = new Path("/idea/mkdir/directory"); fileSystem.copyFromLocalFile(src, dst); fileSystem.close(); System.out.println("文件上传成功~" + dst.toString() + "/" + src.getName()); } /** * 下载文件 * @throws IOException */ @Test public void testCopyToLocal() throws IOException { //3、从hdfs文件系统将文件下载到本地 // Path src 文件在hdfs文件系统中的路径(hdfs文件系统中的路径) Path src = new Path("/idea/mkdir/directory/data.txt"); // Path dst 要下载的文件的路径(本地文件系统中的路径) Path dst = new Path("/usr/local/src/data.txt"); fileSystem.copyToLocalFile(src, dst); fileSystem.close(); System.out.println("文件下载成功~" + dst.toString()); } /** * 删除文件/目录 * @throws IOException */ @Test public void testDeleteFile() throws IOException { //3、删除hdfs文件系统中的文件或目录 Path path = new Path("/idea/mkdir/directory"); //判断是否是目录 boolean directory = fileSystem.isDirectory(path); //判断是否是文件 boolean file = fileSystem.isFile(path); //如果是目录,则删除目录 if(directory){ boolean deleteDirectory = fileSystem.delete(path, true); if(deleteDirectory){ System.out.println("该路径是个目录,删除目录成功!"); } } //如果是文件,则删除文件 if(file){ boolean deleteFile = fileSystem.delete(path, true); if(deleteFile) { System.out.println("该路径是个文件,删除文件成功!"); } } fileSystem.close(); } /** * 列出指定路径下的文件和目录 * @throws IOException */ @Test public void testListAllStatus() throws IOException { //3、列出hdfs文件系统中指定路径下所有的目录和文件 Path path = new Path("/"); FileStatus[] fileStatuses = fileSystem.listStatus(path); for (FileStatus fileStatus : fileStatuses) { //如果是文件,则输出文件 if(fileStatus.isFile()){ System.out.println("文件:"+fileStatus.getPath().getName()); } //如果是目录,则输出目录 if(fileStatus.isDirectory()){ System.out.println("目录:"+fileStatus.getPath().getName()); } } fileSystem.close(); } }
创建包[net.huawei.usehdfs
] – 创建HDFSIO
的JAVA类
使用Hadoop API + Java IO流,导包
获取文件系统并配置在集群上运行–核心代码
点击对应左侧[RunTest
] - [Run 'init()'
],运行程序,查看结果
上传文件(IO流)
核心代码RunTest
] - [Run 'testUpLoad()'
],运行程序,查看结果读取文件(IO流)
核心代码RuTtest
] - [Run 'testReadFile()'
],运行程序,查看结果下载文件(IO流)
核心代码RuTtest
] - [Run 'testDownLoad()'
],运行程序,查看结果/usr/local/src
目录)package net.huawei.usehfds; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.apache.hadoop.io.IOUtils; import org.junit.Before; import org.junit.Test; import java.io.*; import java.net.URI; public class HDFSIO { private FileSystem fileSystem; private Configuration configuration; /** * 获取文件系统并配置在集群上运行 * @throws IOException * @throws InterruptedException */ @Before public void init() throws IOException, InterruptedException { // 创建配置对象 configuration = new Configuration(); // 定义统一资源标识符变量指向集群 String uri = "hdfs://mycluster:8020"; // 基于集群、配置对象与用户获取文件系统对象 fileSystem = FileSystem.get(URI.create(uri), configuration, "root"); // 打印文件系统对象 // System.out.println(fileSystem); } /** * 通过IO流上传文件 * @throws IOException */ @Test public void testUpload() throws IOException { // 创建本地文件输入流,读取本地文件内容 File localFile = new File("/opt/localFile.txt"); FileInputStream in = new FileInputStream(localFile); // 创建HDFS文件输出流,写入HDFS文件 Path path = new Path("/io/localFile.txt"); FSDataOutputStream out = fileSystem.create(path); // 利用IOUtils工具类实现流对接,完成文件拷贝 IOUtils.copyBytes(in, out, configuration); // 关闭输入输出流 IOUtils.closeStream(in); IOUtils.closeStream(out); // 关闭文件系统 fileSystem.close(); // 提示用户 System.out.println("文件上传成功~" + path.toString()); } /** * 通过IO流读取文件 * @throws IOException */ @Test public void testReadFile() throws IOException { // 创建HDFS文件输入流,读取HDFS文件 Path path = new Path("/io/localFile.txt"); FSDataInputStream in = fileSystem.open(path); // 利用IOUtils工具类,将输入流拷贝到控制台显示 IOUtils.copyBytes(in, System.out, 4096); // 关闭输入流 IOUtils.closeStream(in); // 关闭文件系统 fileSystem.close(); } /** * 通过IO流下载文件 * @throws IOException */ @Test public void testDownload() throws IOException { // 创建HDFS文件输入流,读取HDFS文件 Path path = new Path("/io/localFile.txt"); FSDataInputStream in = fileSystem.open(path); // 创建本地文件输出流,写入本地文件内容 File localFile = new File("/usr/local/src/localFile.txt"); FileOutputStream out = new FileOutputStream(localFile); // 利用IOUtils工具类实现流对接,完成文件拷贝 IOUtils.copyBytes(in, out, configuration); // 关闭输入输出流 IOUtils.closeStream(in); IOUtils.closeStream(out); // 关闭文件系统 fileSystem.close(); // 提示用户 System.out.println("文件下载成功~" + localFile.getAbsolutePath()); } }
1、在HDFS上创建一个新目录,并上传一个本地文件到该目录中。
2、使用Java IO流将一个HDFS上的文件下载到本地。
3、编写一个程序,实现对HDFS上指定路径下的所有文件进行重命名操作。例如,将所有的.txt文件改为.txt.bak。
4、在HDFS上创建一个新目录,并在其中生成10个随机数文件,每个文件大小为1MB。
5、编写一个程序,实现对HDFS上指定目录下的所有文件进行复制操作,将它们复制到另一个目录下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。