`
芝加哥09
  • 浏览: 60827 次
社区版块
存档分类
最新评论

一起研究haoop(二):Java代码操作HDFS

阅读更多

在此就不详细介绍HDFS是啥东西了,你只要问问google大神或度娘就一清二楚了。

在此我主要用java代码实现对HDFS的增、删、查操作。

 

由于本工程是用Maven管理的,则pom文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.cloud.hdfs</groupId>
  <artifactId>java-hdfs</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>java-hdfs</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <version>1.2.1</version>
    </dependency>
  </dependencies>
</project>

 

HDFSClient.java

package com.cloud.hdfs;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

public class HDFSClient {
    private FileSystem fileSystem;

    /**
     * 在创建对象时,把fileSystem实例化。
     * @param conf
     * @throws IOException
     */
    public HDFSClient(Configuration conf) throws IOException {
        fileSystem = FileSystem.get(conf);
    }

    public void close() throws IOException {
        fileSystem.close();
    }

    /**
     * 实现的命令:
     * hadoop fs -ls /chris
     * @param folder
     * @throws IOException
     */
    public void ls(String folder) throws IOException {
        Path path = new Path(folder);
        FileStatus[] fileStatus = fileSystem.listStatus(path);
        System.out.println("====================================================");
        for (FileStatus fs : fileStatus) {
            System.out.println("name: " + fs.getPath() +" folder: " + fs.isDir() + " size: " + fs.getLen() + " permission: " + fs.getPermission());
        }
        System.out.println("====================================================");
    }

    /**
     * 实现的命令:
     * hadoop fs -mkdir /chris/client
     * @param folder
     * @throws IOException
     */
    public void mkdir(String folder) throws IOException {
        Path path = new Path(folder);
        if (!fileSystem.exists(path)) {
            fileSystem.mkdirs(path);
            System.out.println("Created " + folder);
        }
    }

    /**
     * 实现的命令:
     * haoop fs -rmr /chris/client
     * @param folder
     * @throws IOException
     */
    public void rmr(String folder) throws IOException {
        Path path = new Path(folder);
        fileSystem.deleteOnExit(path);
        System.out.println("Delete the " + folder);
    }

    /**
     * 实现的命令:
     * hadoop fs -copyFromLocal /home/chris/test /chris/
     * 注意:此处由于ubuntu操作系统是安装在win7的虚拟机上的,而这段程序是在win7下run的
     *      所以此处的本地路径就是win7的。
     * @param local
     * @param remote
     * @throws IOException
     */
    public void copyFile(String local, String remote) throws IOException {
        fileSystem.copyFromLocalFile(new Path(local), new Path(remote));
        System.out.println("Copy from " + local +" to " + remote);
    }

    /**
     * 实现命令:
     * hadoop fs -cat /chris/test
     * @param file
     * @throws IOException
     */
    public void cat(String file) throws IOException {
        Path path = new Path(file);
        FSDataInputStream in = fileSystem.open(path);
        IOUtils.copyBytes(in, System.out, 4096, false);
        IOUtils.closeStream(in);
    }

    /**
     * 实现的命令:
     * hadoop fs -copyToLocal /tmp/core-site.xml /home/chris
     * 注意:此处的本地也是win7的路径,理由同上。
     * @param remote
     * @param local
     * @throws IOException
     */
    public void download(String remote, String local) throws IOException {
        fileSystem.copyToLocalFile(new Path(remote), new Path(local));
        System.out.println("Download from " + remote + " to " + local);
    }

    /**
     * 这个是没法通过一条命令来实现的。
     * 但是创建文件是有命令的:hadoop fs -touchz /chris/hehe
     * 只不过里面的内容是空的。
     * @param file
     * @param content
     * @throws IOException
     */
    public void createFile(String file, String content) throws IOException {
        byte[] buff = content.getBytes();
        FSDataOutputStream out = fileSystem.create(new Path(file));
        out.write(buff, 0, buff.length);
        out.close();
    }

    public static void main(String[] args) throws Exception {
        //在实现这个config时,它会自动去加载resources下的这几个配置文件
        Configuration config = new Configuration();
        HDFSClient client = new HDFSClient(config);
//        client.mkdir("/chris/client");
//        client.ls("/chris");
//        client.rmr("/chris/client");
//        client.ls("/chris");
//        client.cat("/chris/test");
//        client.copyFile("src/main/resources/core-site.xml", "/tmp/");
//        client.download("/chris/test", "src/main/resources/");
//        client.createFile("/chris/client.txt", "ddddddddd");
        client.close();
    }
}

 

0
0
分享到:
评论

相关推荐

    eclipse连接haoop

    - 编写一个简单的 MapReduce 任务或者 HDFS 操作程序进行测试。 #### 四、常见问题与解决方法 - **问题**:启动 Hadoop 服务时出现错误。 - **解决方法**:检查 `core-site.xml` 和 `hdfs-site.xml` 的配置是否...

    haoop-2.6.0-bin的winutils文件

    "haoop-2.6.0-bin"包含了适用于Windows环境的Winutils,特别是其中的"winutils.exe"文件,它提供了与Hadoop在Linux平台上的"Hadoop命令行工具"类似的功能,对于在本地进行Hadoop相关的操作极其有用。 【详细知识点...

    hadoop学习常见问题(手动整理)

    **问题描述**:配置Hadoop环境变量后,在命令行中执行Hadoop命令时可能会遇到`bash:haoop:commandnotfound`错误。 **原因分析**:这通常是由于环境变量配置错误导致的,比如在配置文件中少了必要的符号 `$`。 **...

    大数据haoop基础实验指导书.docx

    同时,检查环境是否已按照初始化指导完成,这包括网络配置、Java环境、硬件资源等。 2、安装Hadoop 3.1.0: 安装过程主要包括将Hadoop软件包解压缩到指定目录,如/opt,然后修改配置文件以适应当前环境。核心配置...

    haoop除share部分的工具类

    标题中的“haoop除share部分的工具类”指的是这个压缩包包含了Hadoop项目中除了`share`目录下的部分工具类。在Hadoop的源代码结构中,`share`目录通常包含可跨模块共享的资源,如配置文件、文档、JAR包等。由于这个...

    hadoop2.7.6jar包整理

    创建新的Java项目,添加Hadoop的jar包到项目的类路径中,这通常包括hadoop-common、hadoop-hdfs、hadoop-mapreduce等模块的jar文件。`hadoop-libr`可能包含这些库的文件,它们是构建和运行Hadoop程序所必需的依赖。 ...

    Hadoop3.1.x_Windows环境整合依赖.rar

    首先,我们要了解Hadoop的两个核心组件:HDFS(Hadoop Distributed File System)和MapReduce。HDFS是分布式文件系统,负责数据的存储,而MapReduce则用于处理和分析这些数据。在Windows环境下搭建Hadoop并不常见,...

    Hadoop实战韩继忠译高清扫描版.pdf

    首先,需要掌握Java编程语言,因为Hadoop最初的MapReduce框架是基于Java实现的。当然,随着技术的发展,如今已经支持通过其他语言如Python、Ruby等访问Hadoop。其次,需要理解Hadoop的安装、配置和使用,以及了解...

    Hadoop实战 chuck lamz著 韩翼中译 pdf

    MapReduce通常与HDFS一起使用,可以并行处理数据,以提高效率。 YARN(Yet Another Resource Negotiator)是一个资源管理平台,负责集群资源的分配和任务调度。YARN通过一个资源管理器(ResourceManager)和每个...

    Hadoop-2.0.0-cdh4.3.0安装手册.

    3. **程序包**:在所有主机上安装必要的依赖包,包括Java开发套件(JDK)和SSH客户端/服务器。 4. **hosts**:更新所有主机的`/etc/hosts`文件,添加彼此的IP地址和主机名映射,确保集群内的通信畅通。 5. **SSH互...

    大数据离线分析项目(Hadoop).pdf

    2. Java SDK:后台服务日志生成与发送工具,特点是代码简单,可以打成jar包或者直接拷贝类到具体的项目中。 3. Nginx:web服务器软件,特点是小巧而高效,基于事件的,内存使用很低,系统资源消耗小。 4. Shell脚本...

    Hadoop源码分析

    源码中,`fs`包提供了对多种文件系统的抽象接口,使得Hadoop能够透明地操作本地文件系统或分布式文件系统,如HDFS和Amazon S3。`ipc`包则包含了简单IPC实现,用于不同组件间的通信,依赖于`io`包提供的数据编码解码...

    【Hadoop学习】_28Haoop企业优化

    文章目录一、MapReduce跑得慢的原因二、MapReduce优化方法(一)数据输入(二)Map阶段(三)Reduce阶段(四)I/O阶段(五)数据倾斜问题(六)常用的调优参数三、HDFS小文件优化方法 一、MapReduce跑得慢的原因 ...

    linux-结构化成行成列-小文件循环合并成大文件--方便上传hadoop

    在IT行业中,尤其是在大数据处理领域,Linux操作系统与Hadoop框架的结合使用是非常常见的。这篇内容主要探讨了如何在Linux环境下,通过Shell脚本将大量小文件结构化地合并成一个大文件,以便更高效地上传到Hadoop...

    Hadoop权威指南(第2版)

    - **Pig**:一种用于处理大型数据集的高级数据流语言及其运行环境,允许非Java开发人员利用Hadoop进行复杂数据处理。 - **HBase**:一个分布式的、面向列的开源数据库,非常适合用于处理半结构化或非结构化数据。 - ...

    Hadoop伪分布式环境搭建

    在Centos7.0中搭建Haoop伪分布式环境,并用Java接口上传文件进行测试。

    sqoop安装详解以及sqoop介绍

    sqoop安装详解以及sqoop内容介绍使用介绍 ...2、导入数据:从结构化数据(Mysql,oracle,db2,)导入到半结构化或非结构化hadoop中(HDFS、HIVE、HBASE) 3、导出数据:从haoop中将数据导出到关系数据库中MySql

    Unbuntu16.04中Hadoop环境配置.doc

    二、配置Hadoop环境变量 1. 查询Hadoop解压后的根路径,使用cd命令切换到/usr/local/hadoop/hadoop-2.8.5目录下,使用pwd命令获取当前目录路径。 2. 修改/etc/bash.bashrc文件,添加Hadoop环境变量。使用sudo vim /...

Global site tag (gtag.js) - Google Analytics