实验三 HDFS
1 实验目的
- 使用Hadoop的分布式存储HDFS系统存储数据;
- 命令行方式;
- Java方式。
2 实验内容
启动Hadoop集群,使用命令行方式往文件系统中添加数据,下载数据。通过Java访问Hadoop,使用Java操作Hadoop,进行文件的存取。
3 实验知识点
Hadoop;Java;HDFS;命令行;Java访问HDFS。
4 实验时长
8学时。
5 实验环境
Linux;Hadoop;Java
6 实验过程
一、hdfs命令行
(1)查看帮助:hdfs dfs -help
(2)查看当前目录信息
由于当前路径下无文件,故先创建目录input
随后使用命令:hdfs dfs -ls /:
(3)上传文件
在home目录下创建文件dd.txt,使用命令:hdfs dfs -put dd.txt /input将本地文件dd.txt上传到hdfs路径中:
(4)剪切文件:使用命令hdfs dfs -moveFromLocal dd.txt /aa.txt,将本地文件dd.txt剪切到hdfs路径下:
(5)下载文件到本地。 使用命令:hdfs dfs -get /aa.txt /home,将hdfs路径下的aa.txt文件下载到本地home。
(6)合并下载
使用命令:hdfs dfs -getmerge /input /aa.txt,将hdfs /input路径下的文件下载到本地aa.txt下
(7)创建文件夹。使用命令:hdfs dfs -mkdir /add,在hdfs路径下创建目录dd:
(8)创建多级文件夹。使用命令:hdfs dfs -mkdir -p /dd/szd,一步创建多级文件夹。
(9)移动hdfs文件。使用命令:hdfs dfs -mv /input/dd.txt /dd,将hdfs内文件移动到hdfs指定文件夹下。
(10)复制hdfs文件:使用命令:hdfs dfs -cp /aa.txt /dd/szd,将hdfs指定文件复制到hdfs指定文件夹下
(11)删除hdfs文件。使用命令:hdfs dfs -rm /aa.txt,将hdfs中aa.txt删除。
(12)删除hdfs文件夹。使用命令:hdfs dfs -rm -r /hello,将hdfs中input目录删除。
(13)查看hdfs中的文件。使用命令:hdfs dfs -cat /dd/szd/dt.txt。
使用命令:hdfs dfs -tail -f /dd/szd/aa.txt
(14)查看文件夹中有多少个文件
使用命令:hdfs dfs -count /dd .查看dd文件夹下有多少个文件:
(15)查看hdfs的总空间
使用命令:hdfs dfs -df /以及hdfs dfs -df -h /
(16)修改副本数:使用命令:hdfs dfs -setrep 1 /dd/szd/aa.txt
二、配置Hadoop环境
(1)在D:\Hadoop\hadoop-2.8.5\etc\hadoop目录下修改hadoop.env.cmd中的内容:
set JAVA_HOME="C:\Program Files\Java\jdk1.8.0_45"
(2)将winutils.exe放到hadoop\bin目录下。
(3)在【我的电脑】-【属性】-【高级系统设置】-【环境变量】中添加系统变量HADOOP_HOME。
(4)Path中添加变量.
三、java操作hdfs
(1)新建java项目Testhadoop,在项目中新建lib文件夹,将jar包拷贝到文件夹中。
(2)在Libraries中添加新的jar包:
(3)在src中创建新的包a,创建TestHdfs类:
(4)在TestHadoop类中输入运行代码:
public class TestHdfs {
FileSystem fs;
public void init() {
try {
URI uri = new URI("hdfs://hp1:9000");
Configuration conf = new Configuration();
// conf.set("dfs.replication", "2");
// conf.set("dfs.block.size", "64m");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
fs = FileSystem.get(uri, conf, "root");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
public void put() {
try {
// fs.copyFromLocalFile(new Path("D://software/spring-tool-suite-3.9.0.RELEASE-e4.7.0-win32-x86_64.zip"),
// new Path("/test"));
fs.copyFromLocalFile(new Path("/root/apps/e.zip"),
new Path("/ee"));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//下载需要配置hadoop_home
public void get() {
try {
fs.copyToLocalFile(new Path("/test"),
new Path("d://test/sts.zip"));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TestHdfs th = new TestHdfs();
th.init();
th.put();
//th.get();
}
}