题目:
通过Java程序将“/你的名字拼音缩写/input1/shixun1.txt”文件上传到HDFS的“/你的名字拼音缩写/java/input1/”目录下;通过Java程序将HDFS上的“/你的名字拼音缩写/java/input1/shixun1.txt”下载到本地“/opt/sx/java/output1/”下;
本题声明:
1.采用Linux系统
2.已搭建好的hadoop集群
3.使用java代码链接hadoop集群并上传/下载文件
一、上传文件
将“/你的名字拼音缩写/input1/shixun1.txt”文件上传到HDFS的“/你的名字拼音缩写/java/input1/”目录下
上传文件分析:
本地文件下需存在:“/你的名字拼音缩写/input1/shixun1.txt”
集群中文件需存在目录:“/你的名字拼音缩写/java/input1/”
解决上传文件流程:
(1)首先在本地目录下创建本地文件:
(本题测试名字“张三”)
/zs/input1/shixun1.txt
(2)在集群中创建目录用于存放上传的文件:
/zs/java/input1/
集群创建目录命名:
hadoop fs -mkdir -p /zs/java/input1
(3)编写java程序上传文件
1.创建项目(我创建的是一个名为Test的java项目)
2.为该项目导入需要连接hadoop集群的jar包
File --> Project Structure --> Modules --> Dependencies
选择右边的+号点击:JARs or directories,找到已准备好的lib包并选中点击ok
(没有lib包的联系我,我发给你,lib包一般存放在 “ /opt/software/ ” 下)
3.创建并编写Upload.java文件,将本地文件上传至hadoop集群
Upload.java文件代码如下:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class Upload {
public static void main(String[] args) throws Exception {
Upload upload = new Upload();
upload.putFileToHDFS();
}
public void putFileToHDFS() throws Exception{
// 上传文件
// 1 创建配置信息对象
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS", "hdfs://hadoop111:9000");
configuration.set("dfs.replication", "2");
// 3 获取文件系统
FileSystem fs = FileSystem.get(configuration);
// 2 创建要上传文件所在的本地路径
Path src = new Path("/zs/input1/shixun1.txt");
// 3 创建要上传到hdfs的目标路径
Path dst = new Path("hdfs://hadoop111:9000/zs/java/input1/shixun1.txt");
// 4 拷贝文件
fs.copyFromLocalFile(src, dst);
fs.close();
System.out.println("文件上传成功 ");
}
}
代码运行效果如下:
执行代码如报以下错:
Exception in thread “main” java.lang.IllegalArgumentException: java.net.UnknownHostException: hadoop111
打开终端 vi /etc/hosts
添加自己配置集群的IP地址和主机名
保存退出再次运行程序。
二、下载文件
将HDFS上的“/你的名字拼音缩写/java/input1/shixun1.txt”下载到本地“/opt/sx/java/output1/”下
下载文件分析:
集群中文件需存在:“/你的名字拼音缩写/java/input1/shixun1.txt”
本地文件需存在:“/opt/sx/java/output1/”
集群中的文件就是刚才上传的文件,所以就不用再上传。
本地需存在 “/opt/sx/java/output1/” 空目录。用于存放集群中下载的文件
- 在本地创建 “/opt/sx/java/output1/” 空目录
- 就在上传文件的java项目中,再创一个名为 DownLoad.java文件,用于将集群中的文件“/zs/java/input1/shixun1.txt”下载至本地 “/opt/sx/java/output1/” 中
DownLoad.java文件代码如下:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class DownLoad {
public static void main(String[] args) throws Exception {
DownLoad downLoad = new DownLoad();
downLoad.getFileFromHDFS();
}
public void getFileFromHDFS() throws Exception{
// 下载文件
// 1 创建配置信息对象
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS", "hdfs://hadoop111:9000");
configuration.set("dfs.replication", "2");
// 3 获取文件系统
FileSystem fs = FileSystem.get(configuration);
fs.copyToLocalFile(false, new Path("hdfs://hadoop111:9000/zs/java/input1/shixun1.txt"), new Path("/opt/sx/java/output1/shixun1.txt"), true);
fs.close();
System.out.println("文件下载成功");
}
}
代码运行效果如下: