hadoop自学轨迹-简单认识HDFS
来源:互联网 发布:部落冲突8本满科技数据 编辑:程序博客网 时间:2024/05/18 23:55
1. 分布式文件系统简介
数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。(横向扩展)
是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。
容错。即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。
2. HDFS
分布式文件管理系统很多,HDFS只是其中一种。适用于一次写入多次读取的流式数据访问模式,不支持并发写情况,适合存储超大文件,小文件不合适
3. HDFS的shell操作
既然HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本
操作,比如文件的创建、修改、删除、修改权限等,文件夹的创建、删除、重命名等。
l -help [cmd] //显示命令的帮助信息
l -ls(r) <path> //显示当前目录下所有文件
l -du(s) <path> //显示目录中所有文件大小
l -count[-q] <path> //显示目录中文件数量
l -mv <src> <dst> //移动多个文件到目标目录
l -cp <src> <dst> //复制多个文件到目标目录
l -rm(r) //删除文件(夹)
l -put <localsrc> <dst> //本地文件复制到hdfs
l -copyFromLocal //同put
l -moveFromLocal //从本地文件移动到hdfs
l -get [-ignoreCrc] <src> <localdst> //复制文件到本地,可以忽略crc校验
l -getmerge <src> <localdst> //将源目录中的所有文件排序合并到一个文件中
l -cat <src> //在终端显示文件内容
l -text <src> //在终端显示文件内容
l -copyToLocal [-ignoreCrc] <src> <localdst> //复制到本地
l -moveToLocal <src> <localdst>
l -mkdir <path> //创建文件夹
l -touchz <path> //创建一个空文件
4. HDFS体系结构与基本概念
一句话描述HDFS:把客户端的大文件存放在很多节点的数据块中
4.1 NameNode
NameNode的作用是管理文件目录结构,是管理数据节点的。存储着文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。名字节点维护两套数据,一套是文件目录与数据块之间的关系,另一套是数据块与节点之间的关系。前一套数据是静态持久化到磁盘上的,通过fsimage和edits文件来维护;后一套数据是动态的,每当集群启动的时候,会自动build这些信息。
fsimage和edits文件存放在配置文件hdfs-site.xml中dfs.name.dir属性和dfs.name.edits.dir指定的位置。
4.2 DataNode
DataNode是HDFS真正存储数据的。
文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是64MB,以一个256MB文件,共有256/64=4个Block.Block本质上是一个逻辑概念,意味着Block里不会真正的存储数据,只是划分文件的。划分后的文件具体存放在hdfs-site.xml配置文件属性dfs.data.dir指定的位置。
l 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
l Replication。多复本。默认是三个。
4.3 SecondaryNameNode
SecondaryNameNode只有一个职责,就是合并NameNode中的edits和fsimage。
合并原理:
执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,同时重置NameNode的edits.
5.HDFS的java访问接口
万能的FileSystem,使用FileSystem API读写数据:创建文件夹、写文件、读文件、查看目录列表及文件详细信息、删除文件
package jeremy.hadoop.hdfs;import java.io.ByteArrayInputStream;import java.io.IOException;import java.net.URI;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 FileSystemTest {private static final String uri = "hdfs://192.168.153.100:9000";private static final String path = "/test";private static final String file = "/test/text";public static void main(String[] args) throws IOException {Configuration conf = new Configuration();FileSystem fs = FileSystem.get(URI.create(uri), conf);Path filepath = new Path(path);// 1.在根目录下创建文件夹if (!fs.exists(filepath)) {fs.mkdirs(filepath);}// 2.写文件FSDataOutputStream out = fs.create(new Path(file));IOUtils.copyBytes(new ByteArrayInputStream("Hello World !".getBytes()), out, conf, true);// 3.读文件FSDataInputStream in = fs.open(new Path(file));IOUtils.copyBytes(in, System.out, conf, true);// 4.查看目录列表和文件详细信息FileStatus[] fsstatus = fs.listStatus(new Path("/"));for (FileStatus status : fsstatus) {if (status.isDir()) {System.out.println("目录:" + status.getPath());} else {System.out.println("文件:" + status.getPath());}}// 5.删除文件和目录fs.delete(filepath, true);// 递归删除文件和目录}}
- hadoop自学轨迹-简单认识HDFS
- hadoop自学轨迹-深入了解HDFS机制
- hadoop自学轨迹-初识hadoop
- hadoop自学轨迹-MapReduce运行机制
- hadoop自学轨迹-linux环境搭建
- hadoop自学轨迹-MapReduce计算模型
- Hadoop概要-HDFS的认识
- Hadoop之HDFS认识篇
- Hadoop自学笔记(二)HDFS简介
- hadoop自学轨迹-hadoop2.2.0单NameNode安装
- Hadoop之HDFS初步认识(一)
- hadoop hdfs api简单操作
- hadoop入门(hadoop安装-hdfs简单介绍)
- 【源】从零自学Hadoop(01):认识Hadoop
- hadoop 自学指南六之IO /HDFS 操作API
- hadoop API 写入HDFS简单注释
- Hadoop hdfs增删该查 简单写法
- Hadoop(三)之HDFS简单介绍
- 使用StyleCop进行代码审查
- 随机生成一个n bit位的长整数。
- 【CareerCup】 Linked Lists—Q2.1
- 实现RSA算法
- Ubuntu 命令行和图兴界面切换
- hadoop自学轨迹-简单认识HDFS
- Android Service 之三(Bind Service, 继承自 Binder 类)
- Some js Demo
- 杭电1422
- DotNetBar布局(一)
- 基于linux-2.6.35的网络视频服务器移植
- Basic Level 1013. 数素数 (20)
- Sum Root to Leaf Numbers
- 僵尸进程和如何删除僵尸进程