通过Java API来访问HDFS

1.Windows上配置环境变量

  解压Hadoop,然后把Hadoop的根目录配置到HADOOP_HOME环境变量里面

  然后把HADOOP_HOME/lib和HADOOP_HOME/bin配置到path里面

2.替换bin目录

  将官网下载的Hadoop目录下面的bin目录替换成Windows下编译的Hadoop的bin目录:

  我已经上传了自己编译好的hadoop-2.6.1的bin目录,可以从https://pan.baidu.com/s/1P50N60Qb16zuZxSwPq6HaA下载

  也可参考他人博客http://blog.csdn.net/mrbcy/article/details/55806809 自已编译适合自己电脑系统的版本即可

3.Eclipse需要的jar包依赖

需要添加的jar包列表如下:

  • hadoop/share/hadoop/common/hadoop-common-2.6.4.jar
  • hadoop/share/hadoop/common/lib/*.jar
  • hadoop/share/hadoop/hdfs/hadoop-hdfs-2.6.4.jar
  • hadoop/share/hadoop/hdfs/lib/*.jar

4.使用客户端操作HDFS文件系统

4.1.上传文件(有HADOOP_HOME就可以上传)

package cn.bigdata.hdfs;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;
/**
* 客户端去操作HDFS时,是有一个用户身份的
* 默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=root
* 也可以在构造客户端fs对象时,通过参数传递进去
*/ public class HdfsCientDemo {
private FileSystem fs = null;
Configuration conf = null;
@Before
public void inin() throws IOException, InterruptedException, URISyntaxException{
Configuration conf = new Configuration();
//拿到一个文件系统操作的客户端实例对象,最后一个参数为用户名,nameNode访问路径:hdfs://shizhan2:9000
fs = FileSystem.get(new URI("hdfs://shizhan2:9000"),conf,"root");
} //上传文件
@Test
public void testUpload() throws Exception{
fs.copyFromLocalFile(new Path("c:/regist.log"), new Path("/regist-copy.log"));
fs.close();
}
}

运行后,上传文件成功:

4.2.下载文件(替换了bin才可以下载)

   @Test
public void testDownload() throws Exception {
fs.copyToLocalFile(false, new Path("/regist-copy.log"), new Path("D:/"), false);
fs.close();
}

4.3.查看conf参数信息:

//查看conf的配置信息
@Test
public void testConf(){
Iterator<Entry<String, String>> it = conf.iterator();
while(it.hasNext()){
Entry<String, String> ent = it.next();
System.out.println(ent.getKey() + " : " + ent.getValue());
}
}

4.4.创建文件夹:

@Test
public void testMkdir() throws Exception {
boolean result = fs.mkdirs(new Path("/testmkdir/aaa/bbb"));
System.out.println(result);
}

4.5.删除文件夹:

@Test
public void testDelete() throws Exception {
// 递归删除
boolean result = fs.delete(new Path("/testmkdir/aaa/"),true);
System.out.println(result);
}

4.6.查看目录文件夹信息:

    @Test
public void testLs() throws Exception {
RemoteIterator<LocatedFileStatus> lt = fs.listFiles(new Path("/"), true); while(lt.hasNext()){
LocatedFileStatus fileStatus = lt.next();
System.out.println("name:" + fileStatus.getPath().getName()
+ " owner:" + fileStatus.getOwner());
}
}

5.总结:

  在java中操作hdfs,首先要获得一个客户端实例

Configuration conf = new Configuration()

FileSystem fs = FileSystem.get(conf)

  而我们的操作目标是HDFS,所以获取到的fs对象应该是DistributedFileSystem的实例;

  get方法是从何处判断具体实例化那种客户端类呢?从conf中的一个参数 fs.defaultFS的配置值判断;

  如果我们的代码中没有指定fs.defaultFS,并且工程classpath下也没有给定相应的配置,conf中的默认值就来自于hadoop

的jar包中的core-default.xml,默认值为: file:///,则获取的将不是一个DistributedFileSystem的实例,而是一个本地文

件系统的客户端对象

  

Hadoop_07_HDFS的Java API 操作的更多相关文章

  1. hive-通过Java API操作

    通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 package org.admln.hive; import java.sql.SQLException; i ...

  2. hadoop2-HBase的Java API操作

    Hbase提供了丰富的Java API,以及线程池操作,下面我用线程池来展示一下使用Java API操作Hbase. 项目结构如下: 我使用的Hbase的版本是 hbase-0.98.9-hadoop ...

  3. 使用Java API操作HDFS文件系统

    使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...

  4. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  5. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  6. MongoDB Java API操作很全的整理

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...

  7. zookeeper的java api操作

    zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...

  8. java api操作

    java api操作 导入开发包 将hbase安装包中lib下包导入java项目   创建表   Configuration conf = HBaseConfiguration.create(); c ...

  9. HDFS 05 - HDFS 常用的 Java API 操作

    目录 0 - 配置 Hadoop 环境(Windows系统) 1 - 导入 Maven 依赖 2 - 常用类介绍 3 - 常见 API 操作 3.1 获取文件系统(重要) 3.2 创建目录.写入文件 ...

随机推荐

  1. 【VS开发】recv函数函数返回值说明(特别有利于工程调试)

    recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. ...

  2. Javadoc文档生成工具-自定义版

    先上图来一波 本身JDK自带了doc文档生成工具,但是不支持排除类,方法,属性,虽然有个@deprecated可以使用,但是达不到我想要的结果(类会被标记为废弃类,编译使用时会提示), 而且类说明示例 ...

  3. vue中打包之后的dist文件不放在服务器的根目录下

    在工作当中,我使用webpack打包的dist,由于管理的问题,无法被放在服务器根目录下 ,但在目前的vue配置,dist不放在根目录下,访问页面会成为一片空白,于是便要对vue框架的config进行 ...

  4. 某某网站PHP

    在网站域名后输入:e/tool/gbook/?bid=1并回车,这样就打开了“帝国”CMS的留言功能.触发漏洞的步骤为: Step1.在“姓名”处输入:縗 Step2.在“联系邮箱”处输入:,1,1, ...

  5. POJ2411 Mondriaan's Dream 【状压dp】

    没错,这道题又是我从LZL里的博客里剽过来的,他的题真不错,真香. 题目链接:http://poj.org/problem?id=2411 题目大意:给一个n * m的矩形, 要求用 1 * 2的小方 ...

  6. [转帖]如何在VirtualBox中运行macOS Catalina Beta版本

    如何在VirtualBox中运行macOS Catalina Beta版本 secist2019-08-03共2179人围观系统安全 https://www.freebuf.com/articles/ ...

  7. [转帖]postgres 创建新用户并授权-- 非常好的

    postgres 创建新用户并授权 https://blog.csdn.net/XuHang666/article/details/81506297 原作者总结的挺好的 可以用来学习一下. grant ...

  8. SqlServer判断表中某列是否包含中文,英文,纯数字

    原文:SqlServer判断表中某列是否包含中文,英文,纯数字 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog ...

  9. position: sticky 防坑指南

    position: sticky 防坑指南:https://www.jianshu.com/p/e217905e8b87 今天在写小程序项目的时候碰到一个需求是要把轮播图下面的标签栏滑动到顶部后固定, ...

  10. 【深入浅出-JVM】(2):原码、反码、补码

    计算机中有补码表示 0 0 为正数 原码 00000000 00000000 00000000 00000000 反码 00000000 00000000 00000000 00000000 正数反码 ...