一、从hdfs下载文件到windows本地:

package com.css.hdfs01;

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; /**
* 从hdfs下载文件到windows本地
*
* 注意:
* 1.需要配置hadoop环境变量
* 2.需要编译好的winutils包
*/
public class HdfsClientDemo02 {
public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException {
// 1.加载配置
Configuration conf = new Configuration();
// 2.设置副本数
conf.set("dfs.replication", "2");
// 3.设置块大小
conf.set("dfs.blocksize", "64m");
// 4.构造客户端
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.146.132:9000"), conf, "root");
// 5.hdfs数据下载到windows本地
fs.copyToLocalFile(new Path("/hdfs-site.xml"), new Path("c:/"));
// 6.关闭资源
fs.close();
}
}

二、hdfs常用的API:

package com.css.hdfs02;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test; /**
* hdfs常用的API
*/
public class HdfsClientTest { FileSystem fs =null; @Before
public void init() throws IOException, InterruptedException, URISyntaxException {
// 1.加载配置
Configuration conf = new Configuration();
// 2.设置副本数
conf.set("dfs.replication", "2");
// 3.设置块大小
conf.set("dfs.blocksize", "64m");
// 4.构造客户端
fs = FileSystem.get(new URI("hdfs://192.168.146.132:9000/"), conf, "root");
} /**
* 在hdfs中创建文件夹
* hdfs dfs -mkdir /文件夹名
*/
@Test
public void hdfsMkdir() throws IllegalArgumentException, IOException{
// 1.调用创建文件夹方法
fs.mkdirs(new Path("/hello"));
// 2.关闭资源
fs.close();
} /**
* 在hdfs中 移动/修改文件
* hdfs dfs -mv /hdfs路径 /hdfs路径
* hdfs dfs -cp /hdfs路径 /hdfs路径
*/
@Test
public void hdfsRename() throws IllegalArgumentException, IOException{
// 1.调用移动修改文件方法
fs.rename(new Path("/aa.txt"), new Path("/hello/aa.txt"));
// 2.关闭资源
fs.close();
} /**
* 在hdfs中 删除文件/文件夹
* hdfs dfs -rm /文件名
* hdfs dfs -rm -r /文件夹名
*/
@Test
public void hdfsRm() throws IllegalArgumentException, IOException{
// 1.调用删除文件方法
// 下面的一个参数的方法已弃用
// fs.delete(new Path("/aaaa.txt"));
// 参数1:要删除的路径 参数2:是否递归删除
fs.delete(new Path("/aaa111.txt"), true);
// 2.关闭资源
fs.close();
} /**
* 查询hdfs下指定的目录信息
*/
@Test
public void hdfsLs() throws IllegalArgumentException, IOException{
// 1.调用方法,返回远程迭代器
RemoteIterator<LocatedFileStatus> iter = fs.listFiles(new Path("/"), true);
// 2.取迭代器数据
while (iter.hasNext()) {
// 拿数据
LocatedFileStatus status = iter.next();
System.out.println("文件的路径为:" + status.getPath());
System.out.println("块大小为:" + status.getBlockSize());
System.out.println("文件长度为:" + status.getLen());
System.out.println("副本数量为:" + status.getReplication());
System.out.println("块信息为:" + Arrays.toString(status.getBlockLocations()));
System.out.println("===============================");
}
// 3.关闭资源
fs.close();
} /**
* 判断文件还是文件夹
*/
@Test
public void hdfsFile() throws IllegalArgumentException, IOException{
// 1.展示状态信息
FileStatus[] listStatus = fs.listStatus(new Path("/"));
// 2.遍历所有文件
for(FileStatus ls:listStatus){
if (ls.isFile()) {
// 文件
System.out.println("文件-----f-----" + ls.getPath().getName());
}else {
// 文件夹
System.out.println("文件夹-----d-----" + ls.getPath().getName());
}
}
}
}

三、hdfs读写文件:

package com.css.hdfs03;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test; /**
* hdfs读写文件
*/
public class ReadData { FileSystem fs =null;
@Before
public void init() throws IOException, InterruptedException, URISyntaxException {
// 1.加载配置
Configuration conf = new Configuration();
// 2.构造客户端
fs = FileSystem.get(new URI("hdfs://192.168.146.132:9000/"), conf, "root");
} /**
* 读数据方式一
*/
@Test
public void testReadData1() throws IllegalArgumentException, IOException{
// 1.拿到流
FSDataInputStream in = fs.open(new Path("/a.txt"));
byte[] buf = new byte[1024];
in.read(buf);
System.out.println(new String(buf));
// 2.关闭资源
in.close();
fs.close();
} /**
* 读数据方式二
*/
@Test
public void testReadData2() throws IllegalArgumentException, IOException{
// 1.拿到流
FSDataInputStream in = fs.open(new Path("/hdfs-site.xml"));
// 2.缓冲流
BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
// 3.按行读取
String line = null;
// 4.读数据
while ((line = br.readLine()) != null) {
System.out.println(line);
}
// 5.关闭资源
br.close();
in.close();
fs.close();
} /**
* 读取hdfs中指定偏移量
*/
@Test
public void testRandomRead() throws IllegalArgumentException, IOException{
// 1.拿到流
FSDataInputStream in = fs.open(new Path("/hdfs-site.xml"));
// 2.移动文件读取指针到指定位置
in.seek(14);
byte[] b = new byte[5];
// 3.从指针位置开始读取数组b的长度个字节
in.read(b);
System.out.println(new String(b));
// 4.关闭资源
in.close();
} /**
* 在hdfs中写数据方式一
*/
@Test
public void testWriteData() throws IllegalArgumentException, IOException{
// 1.输出流
FSDataOutputStream out = fs.create(new Path("/windows.txt"), false);
// 2.输入流
FileInputStream in = new FileInputStream("C:\\Users\\Administrator\\Desktop\\1012.txt");
byte[] buf = new byte[1024];
int read = 0;
while ((read = in.read(buf)) != -1) {
out.write(buf, 0, read);
}
// 3.关闭资源
in.close();
out.close();
fs.close();
} /**
* 在hdfs中写数据方式二
*/
@Test
public void testWriteData1() throws IllegalArgumentException, IOException{
// 1.创建输出流
FSDataOutputStream out = fs.create(new Path("/love"));
// 2.写数据
out.write("Areyouokmylove".getBytes());
// 3.关闭资源
IOUtils.closeStream(out);
fs.close();
}
}

HDFS基本操作的API的更多相关文章

  1. Hadoop(五):HDFS的JAVA API基本操作

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

  2. HDFS中JAVA API的使用

    HDFS中JAVA API的使用   HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...

  3. HDFS的java api操作

    hdfs在生产应用中主要是针对客户端的开发,从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 搭建开发环境 方式一(windows环境下 ...

  4. hdfs基本操作

    hdfs基本操作 1.查询命令 hadoop dfs -ls /   查询/目录下的所有文件和文件夹 hadoop dfs -ls -R 以递归的方式查询/目录下的所有文件 2.创建文件夹 hadoo ...

  5. HDFS的Java API

    HDFS Java API 可以用于任何Java程序与HDFS交互,该API使我们能够从其他Java程序中利用到存储在HDFS中的数据,也能够使用其他非Hadoop的计算框架处理该数据 为了以编程方式 ...

  6. Hadoop(四)HDFS的高级API操作

    一 HDFS客户端环境准备 1.1 jar包准备 1)解压hadoop-2.7.6.tar.gz到非中文目录 2)进入share文件夹,查找所有jar包,并把jar包拷贝到_lib文件夹下 3)在全部 ...

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

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

  8. [转]HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...

  9. Sample: Write And Read data from HDFS with java API

    HDFS: hadoop distributed file system 它抽象了整个集群的存储资源,可以存放大文件. 文件采用分块存储复制的设计.块的默认大小是64M. 流式数据访问,一次写入(现支 ...

随机推荐

  1. spring-boot 中application.properties的各种配置

    ###########################################################datasource connect mysql################# ...

  2. Juqery 定时器 settimeout setInterval

    setTimeout 只执行一次 setTimeout(loading_tree,2000); function loading_tree(){ $('body').mLoading("hi ...

  3. 突破MIME限制上传

    方法:找一个正常的可上传的查看其的MIME类型,然后将马子的MIME改成合法的MIME即可.

  4. 卖座网一处SQL注射(Http Referer sqlinjection)

    漏洞作者: 猪猪侠 漏洞详情 披露状态: 2015-01-13: 细节已通知厂商并且等待厂商处理中2015-01-14: 厂商已经确认,细节仅向厂商公开2015-01-24: 细节向核心白帽子及相关领 ...

  5. 在XML中用于注释的符号是。(选择1项)

    A.<!– –> B.<?– –?> C.<% %> D.<!– –!> 解答:A

  6. WHERE 子句用于规定选择的标准。

    WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. 语法 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 下面的运算符可在 WHERE ...

  7. android DialogFragment 回调到 Fragment

    google 从3.0開始就引入了 Fragment 概念,用 Fragment 取代多 Activity,假设你还停留在 Activity 时代,那你就面壁去吧! Fragment 是好用,可是又几 ...

  8. Mysql命令行添加用户并且给予远程访问服务器的权限

    --查询用户SELECT User, Password, Host FROM user; --创建一个用户,任意主机可以登录%,密码是123456 '; -- 给用户赋予所有权限 GRANT ALL ...

  9. 怎么隐藏MathType标尺

    因为MathType公式编辑能力非常的好用,所以非常的受大家的欢迎.MathType用现有的模板可以直接输入输出各种公式,而且MathType中有着各式各样的数学符号满足了大家日常公式的需求,为大家的 ...

  10. superresolution_v_2.0 Application超分辨率程序文档

    SUPERRESOLUTION GRAPHICAL USER INTERFACE DOCUMENTATION Contents 1.- How to use this application. 2.- ...