目录
HDFS章节内容:
hadoop fs 具体命令 或者 hdfs dfs 具体命令(两者完全相同)
用之前自定义的myhadoop.sh start/stop启动
可以更改名字的
要去配置以下Maven以及依赖包等
- package com.me.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
-
- import java.net.URI;
-
- /**
- * 客户端代码常用套路
- * 1、获取一个客户端对象
- * 2、执行相关的操作命令
- * 3、关闭资源
- *
- * 典型代表:HDFS zookeeper
- */
-
- public class HdfsClient {
-
- private FileSystem fs;
-
- @Before
- public void init() throws Exception{
- //连接的集群nn地址
- URI uri = new URI("hdfs://hadoop102:8020");
-
- //创建一个配置文件
- Configuration configuration = new Configuration();
-
- //用户
- String user="me";
-
- //1.获取到了客户端对象
- fs = FileSystem.get(uri, configuration,user);
-
- }
-
- @After
- public void close() throws Exception{
- //3.关闭资源
- fs.close();
- }
-
-
- //创建目录
- @Test
- public void testmkdir() throws Exception {
- //2/创建一个文件夹
- fs.mkdirs(new Path("/xiyou/huaguoshan1"));
- }
-
- }
- //上传文件
- @Test
- public void testPut() throws Exception{
- //参数解读:参数一:表示是否删除原数据; 参数二:是否运行被覆盖; 参数三:原数据路径; 参数四:目的地路径;
- fs.copyFromLocalFile(true,true,new Path("D:\\sunwukong.txt"),new Path("hdfs://hadoop102//xiyou/huaguoshan"));
- }
这里的HDFS的路径可以带上协议的hdfs:://hadoop102,也可以不带
- /**
- * 参数优先级从低到高:
- * hdfs-default.xml ==> hdfs-site-xml ==> 在项目资源目录下的配置文件 ==> 代码里面的优先级最高
- * @throws Exception
- */
- //文件下载
- @Test
- public void testGet() throws Exception{
- //参数解读:参数一:表示是否删除原文件; 参数二:原文件路径HDFS; 参数四:目的地路径windows; 参数四:是否开启校验(true就不开启校验);
- fs.copyToLocalFile(true,new Path("hdfs://hadoop102/xiyou/huaguoshan"),new Path("D:\\"),true);
- }
1、crc文件是一种校验方式
2、如果要下载sunwukong.txt,在参数二后面加上/sunwukong.txt即可
- //删除
- @Test
- public void testRm() throws Exception{
- //参数解读:参数1:要删除的路径; 参数2:是否递归删除;
- //删除文件
- //fs.delete(new Path("/jdk-8u212-linux-x64.tar.gz"),false);
-
- //删除空目录
- //fs.delete(new Path("/xiyou"),false);
-
- //删除非空目录(要递归删除)
- fs.delete(new Path("/jinguo"),true);
- }
- //文件的更名和移动
- @Test
- public void testmv() throws Exception{
- //参数解读:参数1:原文件路径; 参数2:目标文件路径(这里就更名了)
- //fs.rename(new Path("/input/word.txt"),new Path("/input/ss.txt"));
-
- //文件的移动和更名
- //fs.rename(new Path("/input/ss.txt"),new Path("/cls.txt"));
-
- //目录的更名
- fs.rename(new Path("/input"),new Path("/output"));
- }
- //获取文件详情信息
- @Test
- public void fileDetail() throws Exception {
- //获取所有文件信息
- RemoteIterator
listFiles= fs.listFiles(new Path("/"),true); -
- //遍历文件
- while(listFiles.hasNext()){
- LocatedFileStatus fileStatus = listFiles.next();
- System.out.println("============="+fileStatus.getPath()+"============");
- System.out.println(fileStatus.getPermission());
- System.out.println(fileStatus.getOwner());
- System.out.println(fileStatus.getGroup());
- System.out.println(fileStatus.getLen());
- System.out.println(fileStatus.getModificationTime());
- System.out.println(fileStatus.getReplication());
- System.out.println(fileStatus.getBlockSize());
- System.out.println(fileStatus.getPath().getName());
-
- //获取块信息(获取到副本的hadoop102...)
- BlockLocation[] blockLocations = fileStatus.getBlockLocations();
- System.out.println(Arrays.toString(blockLocations));
- }
- }
- //判断是文件还是文件夹
- @Test
- public void testFile() throws Exception{
- FileStatus[] listStatus= fs.listStatus(new Path("/"));
-
- for(FileStatus status: listStatus){
- if(status.isFile()){
- System.out.println("文件:"+status.getPath().getName());
- }
- else{
- System.out.println("目录:"+status.getPath().getName());
- }
- }
- }