`
gaojingsong
  • 浏览: 1197341 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

java操作之HDFS-创建-删除目录-读写文件-追加写文件

阅读更多

Hadoop文件操作之HDFS,创建。删除目录,读写文件,追加写文件

 

package hadoop.hadoop_demo;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

/**
 * <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.2</version>
</dependency>
   
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.2</version>
</dependency>
 *
 */
public class App {
    public static void main(String[] args) throws Exception {
        System.out.println("Hello World!");
        String hdfs = "hdfs://192.168.1.111:9000";

        // mkdir(hdfs,"gaojs");

        // touchFile(hdfs,"gjs/1.log");

         rmdir(hdfs, "zookeeper_server.pid");

        appendFile(hdfs, "gjs/1.log");

        // readFile(hdfs);
    }

    /**
     * 追加文件,新版本才支持
     * @param hdfs
     * @param fullNasme
     * @throws Exception
     */
    private static void appendFile(String hdfs, String fullNasme)
            throws Exception {
        FileSystem fileSystem = getFileSystem();

        OutputStream out = fileSystem.append(new Path(hdfs + "/" + fullNasme));
        out.write(("I am gaojs, who are you" + System.currentTimeMillis() + "\r\n")
                .getBytes("UTF-8"));
        out.flush();
        out.close();
    }

    /**
     * 取得FileSystem
     * @return
     * @throws Exception
     */
    public static final FileSystem getFileSystem() throws Exception {
        String hdfs = "hdfs://192.168.1.111:9000";
        Configuration conf = new Configuration();
        conf.set("dfs.client.block.write.replace-datanode-on-failure.policy","NEVER");
        conf.set("dfs.client.block.write.replace-datanode-on-failure.enable","true");
        FileSystem fileSystem = FileSystem.get(URI.create(hdfs), conf);
        System.out.println(fileSystem);
        return fileSystem;
    }

    /**
     * 读文件
     * @param hdfs
     * @throws Exception
     */
    private static void readFile(String hdfs) throws Exception {
        FileSystem fileSystem = getFileSystem();
        InputStream in = fileSystem.open(new Path(hdfs + "/"
                + "zookeeper_server.pid"));
        IOUtils.copy(in, System.out);
        fileSystem.close();
    }

    /**
     * 创建空文件
     * @param hdfs
     * @param fullNasme
     * @throws Exception
     */
    private static void touchFile(String hdfs, String fullNasme)
            throws Exception {
        FileSystem fileSystem = getFileSystem();
        boolean res = fileSystem
                .createNewFile(new Path(hdfs + "/" + fullNasme));
        if (res) {
            System.out.println("-------create File Success------" + fullNasme);
        } else {
            System.out.println("-------create File Fail------" + fullNasme);
        }
        fileSystem.close();
    }

    /**
     * 删除文件或者目录
     * @param hdfs
     * @param fullNasme
     * @throws Exception
     */
    private static void rmdir(String hdfs, String fullNasme) throws Exception {
        FileSystem fileSystem = getFileSystem();
        boolean res = fileSystem.delete(new Path(hdfs + "/" + fullNasme));
        if (res) {
            System.out.println("------rmdir Success------" + fullNasme);
        } else {
            System.out.println("------rmdir Fail------" + fullNasme);
        }
        fileSystem.close();
    }

    /**
     * 创建目录
     * @param hdfs
     * @param fullNasme
     * @throws Exception
     */
    private static void mkdir(String hdfs, String fullNasme) throws Exception {
        FileSystem fileSystem = getFileSystem();
        boolean res = fileSystem.mkdirs(new Path(hdfs + "/" + fullNasme));
        if (res) {
            System.out.println("-------mkdir Success------" + fullNasme);
        } else {
            System.out.println("-------mkdir Fail------" + fullNasme);
        }
    }

}

 

 

错误解决方案:

log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
DFS[DFSClient[clientName=DFSClient_NONMAPREDUCE_242718953_1, ugi=Administrator (auth:SIMPLE)]]
Exception in thread "main" java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try. (Nodes: current=[DatanodeInfoWithStorage[192.168.1.111:50010,DS-c7e4fa47-633d-4d8b-aa09-c50b1e6a411a,DISK]], original=[DatanodeInfoWithStorage[192.168.1.111:50010,DS-c7e4fa47-633d-4d8b-aa09-c50b1e6a411a,DISK]]). The current failed datanode replacement policy is DEFAULT, and a client may configure this via 'dfs.client.block.write.replace-datanode-on-failure.policy' in its configuration.
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode(DFSOutputStream.java:929)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.addDatanode2ExistingPipeline(DFSOutputStream.java:992)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1160)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:455)

 

解决方案:

conf.set("dfs.client.block.write.replace-datanode-on-failure.policy","NEVER");
 conf.set("dfs.client.block.write.replace-datanode-on-failure.enable","true");

  • 大小: 22.2 KB
  • 大小: 29.6 KB
  • 大小: 24.3 KB
0
5
分享到:
评论

相关推荐

    利用javaAPI访问HDFS的文件

    在Java程序中操作HDFS文件主要依赖于`org.apache.hadoop.fs.FileSystem`类,该类提供了许多方法用于执行文件系统操作,如创建文件、删除文件、读写文件等。 ##### 1. 创建文件系统实例 ```java Configuration conf ...

    Flume-HDFS-驱动-jar包

    在Flume中,当配置了将数据流推送到HDFS时,需要确保Flume环境包含了正确的HDFS驱动,以便能够正确地读写HDFS上的文件。如果没有这些驱动,Flume在尝试将数据写入HDFS时可能会遇到错误。 描述中提到的问题是,当...

    实验2 熟悉常用的HDFS操作

    这些实验步骤旨在帮助学生掌握HDFS的常用操作,包括文件系统的交互、数据读写以及高级功能,如文件追加和目录管理。同时,通过使用Java API,学生将加深对Hadoop生态系统和文件系统API的理解,为后续的大数据处理和...

    实验二:熟悉常用的HDFS操作

    实验二:“熟悉常用的HDFS操作”旨在帮助学习者深入理解Hadoop分布式文件系统(HDFS)在大数据处理中的核心地位,以及如何通过Shell命令和Java API进行高效操作。HDFS在Hadoop架构中扮演着存储大数据的核心角色,为...

    HDFS的JAVA接口API操作实例

    2. **文件追加**:HDFS不支持原生的文件追加操作,但可以通过重新打开文件并定位到末尾来实现。 3. **文件复制**:可以使用`copyToLocalFile()`或`copyFromLocalFile()`方法在HDFS与本地文件系统之间进行复制。 4....

    实验2常用的HDFS操作.doc

    (5)给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息 (6)提供一个HDFS内的文件的路径,对该文件进行创建和删除...

    数据存储实验2-熟悉常用的HDFS操作.doc(实验报告)

    * hdfs dfs:用于管理HDFS文件系统的命令,例如查看文件列表、创建目录、删除文件等。 实验目的 本实验的目的旨在熟悉常用的HDFS操作命令,包括: * 理解HDFS在Hadoop体系结构中的角色 * 熟练使用HDFS操作常用的...

    hadoop Java接口 文件操作类

    - **删除文件或目录**:使用`FileSystem.delete()`方法,可以删除单个文件或整个目录。 - **移动/重命名文件**:`FileSystem.rename()`方法用于移动或重命名文件或目录。 - **检查文件状态**:`FileSystem.exists...

    HDFS文件系统技术详解.pdf

    HDFS Shell提供了与Linux命令类似的接口,如`hdfs dfs -mkdir`用于创建目录,`hdfs dfs -put`用于上传文件,`hdfs dfs -ls`用于查看目录内容,`hdfs dfs -get`用于下载文件,以及`hdfs dfs -rm`用于删除文件或目录。...

    大数据上机报告

    - 学习如何通过Java API来执行上述类似的操作,这包括但不限于文件的上传、下载、删除等。 **2. 实验平台** - **操作系统**:Linux - Linux系统是运行Hadoop集群的标准选择,因为它提供了良好的性能和稳定性。 -...

    大数据课程-Hadoop集群程序设计与开发-3.HDFS分布式文件系统_lk_edit.pptx

    1. **Shell操作**:用户可以通过HDFS的命令行接口(Shell)执行各种操作,如创建、删除文件和目录,查看文件内容,移动或重命名文件等。 2. **Java API操作**:对于开发人员,HDFS提供了丰富的Java API,允许应用...

    Java API操作Hadoop文件

    如果需要处理目录,可以使用`FileSystem`的`mkdirs()`创建目录,`listFiles()`获取目录下所有文件,以及`delete()`删除文件或目录。 在`TestFileSystem.java`这个文件中,可能会包含一个测试类,演示了如何使用这些...

    深入理解Hadoop HDFS高级教程.txt打包整理.zip

    5. HDFS操作:用户可以通过HDFS的命令行工具或者Hadoop的Java API与HDFS进行交互,如上传、下载、查看、删除文件等。此外,HDFS还支持流式数据访问,适合大规模批处理任务。 6. HDFS容错机制:HDFS通过心跳检测和...

    HDFS与管理命令手册.docx

    - **递归创建目录**:使用 `-mkdir -p` 命令可以创建多级目录,如 `hadoop fs -mkdir -p /hopdir/myfile` 创建 `/hopdir/myfile` 目录。 - **查看目录**:使用 `-ls` 命令查看指定目录下的文件列表。例如,`hadoop...

    HDFS和KFS的比较

    - KFS在设计上也更适合大数据批量处理,但提供了更多的文件操作,包括读写和追加。这使得KFS在某些应用场景下比HDFS更具灵活性。 4. **Java实现与API** - HDFS是用Java实现的,因此其客户端API主要基于Java,同时...

    hdfs优缺点

    2. **不适合频繁的读写操作**:由于HDFS主要用于批量数据处理而非在线事务处理,因此在需要频繁读写操作的应用场景下,HDFS的表现可能不尽如人意。 综上所述,HDFS作为一种专门为分布式存储和处理大规模数据而设计...

    【IT十八掌徐培成】Hadoop第03天-03.hdfs FileSystem API.zip

    需要注意的是,HDFS默认不支持文件追加,所以通常需要先删除已有文件再创建。 5. **读写数据**:通过FSDataInputStream和FSDataOutputStream提供的read()和write()方法,可以读取或写入字节数据。对于大文件,通常...

Global site tag (gtag.js) - Google Analytics