Hadoop hdfs 基础操作 client Api(1)

简介: Hadoop hdfs client api 基础操作

hdfs_1

1. 初始化连接

@Before
public void setup() throws Exception {
    configuration = new Configuration();
    System.out.println();

    configuration.set("dfs.replication", "1");
    // configuration.set("hadoop.tmp.dir","/home/hadoop0/data/tmp");
    Iterator iterator = configuration.iterator();
    while(iterator.hasNext()
         ){
        System.out.println(iterator.next()); //打印所有配置或默认参数
    }
    fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, HDFS_USER);
    System.out.println("--------------setup-------------");
}

@After
public void teardown(){
    try {
        fileSystem.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    configuration = null;
    System.out.println("--------------teardown-------------");
}

2. 新增

2.1 创建文件夹
@Test
public void mkDir() throws Exception{
    System.out.println(fileSystem.mkdirs(new Path("/Complete")));
}
2.2 创建文件并写入
@Test
public void create() throws Exception{
    FSDataOutputStream out = fileSystem.create(new Path("/HDFSApp/write/2.txt"));
    out.writeUTF("hello! first wirte to HDFS file!");
    out.flush();
    out.close();
}
2.3 拷贝本地文件到远程
@Test
public void copyFromLocal() throws IOException {
    Path localFile =  new Path("F:/校验大师_2.7.5.1632.zip");
    Path remoteFile = new Path("/HDFSApp/write/校验大师_2.7.5.1632.zip");
    fileSystem.copyFromLocalFile(localFile, remoteFile);
}
2.4 拷贝大文件,带进度条
@Test
public void copyFromLocalLargeFile(){
    String localFile = "F:/校验大师_2.7.5.1632.zip";
    Path remoteFile = new Path("/HDFSApp/write/校验大师_2.7.5.1633.zip");
    InputStream in = null;
    FSDataOutputStream out = null;

    try {
        in = new BufferedInputStream(new FileInputStream(localFile));
        out = fileSystem.create(remoteFile, new Progressable() {
            @Override
            public void progress() {
                System.out.println("!");
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("创建输入输出流失败!");
    }

    if(in != null && out != null){
        try {
            IOUtils.copyBytes(in, out,2048, true);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("上传过程中失败!");
        }
    }
}

3. 查询检索

3.1 读文件内容
@Test
public void text() throws Exception{
    FSDataInputStream in = fileSystem.open(new Path("/output/part-r-00000"));
    IOUtils.copyBytes(in, System.out, 1024);
}
3.2 下载hdfs文件到本地
@Test
public void copyToLocal() throws IOException {
    Path localFile =  new Path("F:/");
    Path remoteFile = new Path("/HDFSApp/write/校验大师_2.7.5.1632.zip");
    fileSystem.copyToLocalFile(remoteFile, localFile);
}
3.3 获取路径下内容
@Test
public void listFiles() throws IOException {
    Path path =  new Path("/HDFSApp/write");
    FileStatus[] files = fileSystem.listStatus(path);
    for (FileStatus file:files) {
        String type = file.isDirectory() ? "文件夹" : "文件";
        String permission = file.getPermission().toString();
        short replication = file.getReplication();
        String filePath = file.getPath().toString();

        System.out.println(type + "\t" + permission + "\t" + replication + "\t" + filePath);
    }
}
3.4 深层遍历路径下文件
@Test
public void listFilesRecursive() throws IOException {
    Path path =  new Path("/");
    RemoteIterator<LocatedFileStatus> remoteIterator = fileSystem.listFiles(path, true);
    while(remoteIterator.hasNext()){
        LocatedFileStatus file = remoteIterator.next();

        String type = file.isDirectory() ? "文件夹" : "文件";
        String permission = file.getPermission().toString();
        short replication = file.getReplication();
        String filePath = file.getPath().toString();

        System.out.println(type + "\t" + permission + "\t" + replication + "\t" + filePath);
    }
}
3.5 获取文件block信息
@Test
public void getBlocksInfo() throws IOException {
    Path path =  new Path("/HDFSApp/write/校验大师_2.7.5.1632.zip");
    FileStatus fileStatus = fileSystem.getFileStatus(path);
    BlockLocation[] blockLocations =  fileSystem.getFileBlockLocations(fileStatus, 0 , fileStatus.getLen());

    for (BlockLocation block: blockLocations) {
        for (String name :block.getNames()) {
            System.out.println(name + ":" + block.getOffset() +"," + block.getLength());
        }
    }
}

4. 修改

4.1 修改文件名
@Test
public void rename() throws IOException {
    Path oPath =  new Path("/HDFSApp/write/0.txt");
    Path nPath = new Path("/HDFSApp/write/3.txt");
    boolean res = fileSystem.rename(oPath, nPath);
    System.out.println(res);
}

5. 删除

5.1 删除文件或目录
public void delete() throws IOException {
    Path path =  new Path("/HDFSApp/write/校验大师_2.7.5.1632.zip");
    boolean res = fileSystem.delete(path, false);
    System.out.println(res);
}
相关文章
|
6月前
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
482 70
|
11月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
417 6
|
11月前
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
164 3
|
11月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
171 2
|
11月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
269 0
|
11月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
129 0
|
11月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
176 0
|
分布式计算 应用服务中间件 Docker
Hadoop HDFS分布式文件系统Docker版
一、Hadoop文件系统HDFS 构建单节点的伪分布式HDFS 构建4个节点的HDFS分布式系统 nameNode secondnameNode datanode1 datanode2 其中 datanode2动态节点,在HDFS系统运行时,==动态加入==。
2837 0
|
6月前
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
272 79
|
11月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
212 2