HDFS概念

1 数据块*

HDFS的一个数据块默认是64M,与元数据分开管理。

优点:

数据块的大小设计的较大,所以寻址占传输的时间比例较小,只需要计算传输速度即可。

便于简化管理,利于计算剩余空间、冗余备份(默认三个)

与元数据分开管理,保持他本身无属性的特性。

2 nameNode,DataNode*

nameNode:

1 命名空间

2 维护文件系统树(命名空间镜像文件)与目录(编辑日志文件)(本地磁盘)

3 保存每个块的元数据信息

4 维护多个dataNode

备份策略:写入远程磁盘、两个NameNode同时运行

DataNode

1 文件系统的工作节点

2 定期向NameNode发送块列表

3 收到NameNode和Client的调度

3 外部接口

Thrift:Hadoop提供给外部非JAVA语言调用的接口

HTTP:网页监控

FTP:传输文件

4 JAVA接口

1 URL API读取

@Test
public void input1() throws MalformedURLException, IOException {
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
InputStream in = new URL("hdfs://192.168.1.100:9000/user/sunfan/input/file1.txt").openStream();
byte[] buff = new byte[];
int len;
while (- != (len = in.read(buff))) {
for (int i = ; i < len; i++) {
System.out.print((char) buff[i]);
}
}
in.close();
}

2 FileSystem API 读取FSDatainputStream流的使用(seek方法可以重新定位读取,和inputStream的skip不一样) *

    @Test
public void input2() throws MalformedURLException, IOException {
String uri = "hdfs://192.168.1.100:9000/user/sunfan/input/file1.txt";
FileSystem fs = FileSystem.get(URI.create(uri), new Configuration());
FSDataInputStream in = null;
in = fs.open(new Path(uri));
byte[] buff = new byte[];
int len;
while (- != (len = in.read(buff))) {
for (int i = ; i < len; i++) {
System.out.print((char) buff[i]);
}
}
in.seek();
while (- != (len = in.read(buff))) {
for (int i = ; i < len; i++) {
System.out.print((char) buff[i]);
}
}
in.close();
}

写入数据 FSDataOutPutStream

    @Test
public void out3() throws IOException {
String uri2 = "hdfs://192.168.1.100:9000/user/sunfan/input/file3.txt";
FileSystem fs = FileSystem.get(URI.create(uri2), new Configuration());
FSDataOutputStream out = fs.create(new Path(uri2));
System.out.println(fs.exists(new Path(uri2)));
out.write();
}

本地文件的复制:注意这里重写Progressable来写进度条,用IOUtils.copy方法来复制

    @Test
public void out3() throws IOException {
long start = System.currentTimeMillis();
FileInputStream in = new FileInputStream("C:\\Users\\sunfan\\Desktop\\copy.pdf");
String uri2 = "hdfs://192.168.1.100:9000/user/sunfan/input/file3.txt";
FileSystem fs = FileSystem.get(URI.create(uri2), new Configuration());
FSDataOutputStream out = fs.create(new Path(uri2), new Progressable() {
public void progress() {
System.out.print(".");
}
});
IOUtils.copyBytes(in, out, , true);
System.out.println(System.currentTimeMillis()-start);
}

读取文件的详细信息:通过fs.getFileStatus得到FileStatus

    @Test
public void showFilesystem() throws IOException {
String dir = "hdfs://192.168.1.100:9000/user/sunfan/input";
FileSystem fs = FileSystem.get(URI.create("hdfs://192.168.1.100:9000"), new Configuration());
FileStatus status = fs.getFileStatus(new Path(dir));
System.out.println(status.getPermission());
}

读取文件列表:通过fs.listStatus获取FileStatus数组

    @Test
public void showFilesystem2() throws IOException {
String dir = "hdfs://192.168.1.100:9000/user/sunfan/input";
FileSystem fs = FileSystem.get(URI.create(dir), new Configuration());
FileStatus[] status = fs.listStatus(new Path("hdfs://192.168.1.100:9000/user/sunfan/input"));
for (FileStatus fileStatus : status) {
System.out.println(fileStatus.getPath());
}
}

用正则读取文件:通过fs.globStatus读取

    @Test
public void showFilesystem2() throws IOException {
String dir = "hdfs://192.168.1.100:9000/user/sunfan/input";
FileSystem fs = FileSystem.get(URI.create(dir), new Configuration());
FileStatus[] status = fs.globStatus(new Path("hdfs://192.168.1.100:9000/user/sunfan/input/*"));
for (FileStatus fileStatus : status) {
System.out.println(fileStatus.getPath());
}
}

hadoop-hdfs(三)的更多相关文章

  1. 马士兵hadoop第三课:java开发hdfs

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  2. Hadoop(三)HDFS读写原理与shell命令

    一 HDFS概述 1.1 HDFS产生背景 随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件 ...

  3. 马士兵hadoop第三课:java开发hdfs(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  4. 【Hadoop】三、HDFS命令行接口

      通过前面对HDFS基本概念.高可用性.数据读写流程的介绍,我们对HDFS已经有了大致的了解.这里我们还需要明确一点:Hadoop作为一个完整的分布式系统,它有一个抽象的文件系统的概念,而我们介绍的 ...

  5. HADOOP docker(三):HDFS高可用实验

      前言1.机器环境2.配置HA2.1 修改hdfs-site.xml2.2 设置core-site.xml3.配置手动HA3.1 关闭YARN.HDFS3.2 启动HDFS HA4.配置自动HA4. ...

  6. Hadoop HDFS负载均衡

    Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...

  7. Hadoop HDFS编程 API入门系列之简单综合版本1(四)

    不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs4; import java.io.IOException; import ja ...

  8. Hadoop HDFS (3) JAVA訪问HDFS

    如今我们来深入了解一下Hadoop的FileSystem类. 这个类是用来跟Hadoop的文件系统进行交互的.尽管我们这里主要是针对HDFS.可是我们还是应该让我们的代码仅仅使用抽象类FileSyst ...

  9. Hadoop HDFS分布式文件系统设计要点与架构

      Hadoop HDFS分布式文件系统设计要点与架构     Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...

  10. hadoop hdfs uri详解

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

随机推荐

  1. SpringBoot学习13:springboot异常处理方式3(使用@ControllerAdvice+@ExceptionHandle注解)

    问题:使用@ExceptionHandle注解需要在每一个controller代码里面都添加异常处理,会咋成代码冗余 解决方法:新建一个全局异常处理类,添加@ControllerAdvice注解即可 ...

  2. iOS 蓝牙(GameKit CoreBluetooth)

    利用GameKit框架实现ios设备的蓝牙通讯,导入框架:#import <GameKit/GameKit.h>  , 注意: 此框架只能用于ios设置间蓝牙通讯 如今苹果开放了接口来实现 ...

  3. Qt.5.9.6移植

    工具及软件包 交叉编译工具链 arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 软件包 dbus-1.10.0.tar.g ...

  4. 一行代码搞定checkbox全选和全不选

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  5. C5509A启动使用定时器

    #include <stdio.h> #include <csl.h> #include <csl_pll.h> #include <csl_chip.h&g ...

  6. kivy学习一:安装kivy模块

    现在是看脸的时代,一个程序没有一个漂亮的UI,就像一个深闺中的美女没人欣赏. 当然作为一个小小.............白,没有那么高的要求,当前要先有脸是不? 首选python自家的模块tkinte ...

  7. BFS例题:A计划

    ContribContrib/a11y/accessibility-menu.js 关于 BFS要点: 1.若为可化为的坐标系图形,可用结构体存储其x值,y值和步数.(一般开now 和 next ,n ...

  8. 笔记-爬虫-js代码解析

    笔记-爬虫-js代码解析 1.      js代码解析 1.1.    前言 在爬取网站时经常会有js生成关键信息,而且js代码是混淆过的. 以瓜子二手车为例,直接请求https://www.guaz ...

  9. TouTiao开源项目 分析笔记12 从总体到局部 构建视频主页面

    1.构建视频主列表的整体碎片VideoTabLayout 1.1.首先创建一个VideoTabLayout package com.jasonjan.headnews.module.video; im ...

  10. 15.5,centos下redis安全相关

      博文背景: 由于发现众多同学,在使用云服务器时,安装的redis3.0+版本都关闭了protected-mode,因而都遭遇了挖矿病毒的攻击,使得服务器99%的占用率!! 因此我们在使用redis ...