HDFS学习笔记

网友投稿 247 2022-11-24

HDFS学习笔记

一、分布式文件系统与HDFS 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。 这是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。 通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。 容错。即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。 分布式文件管理系统很多,hdfs只是其中一种。适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适。 二、HDFS体系结构与基本概念 1、Namenode 是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。 文件包括: fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。 edits:操作日志文件。 fstime:保存最近一次checkpoint的时间 以上这些文件是保存在linux的文件系统中 2、Datanode 提供真实文件数据的存储服务。 文件块(block):最基本的存储单位。 对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。 HDFS默认Block大小是64MB,以一个256MB文件,共有256/64=4个Block. 不同于普通文件系统的是:在HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 Replication。多复本。默认是三个。 3、SecondaryNameNode HA的一个解决方案。但不支持热备。配置即可。 执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,同时重置NameNode的edits. 默认在安装在NameNode节点上,但这样不安全! 三、HDFS的shell操作 调用文件系统(FS)Shell命令应使用 bin/hadoop fs 的形式。 所有的FS shell命令使用URI路径作为参数。 URI格式是scheme://authority/path。HDFS的scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。 例如:/parent/child可以表示成hdfs://namenode:namenodePort/parent/child,或者更简单的/parent/child(假设配置文件是namenode:namenodePort) 大多数FS Shell命令的行为和对应的Unix Shell命令类似。 1、HDFS fs命令 -help [cmd] //显示命令的帮助信息 -ls(r) //显示当前目录下所有文件 -du(s) //显示目录中所有文件大小 -count[-q] //显示目录中文件数量 -mv //移动多个文件到目标目录 -cp //复制多个文件到目标目录 -rm(r) //删除文件(夹) -put //本地文件复制到hdfs -copyFromLocal //同put -moveFromLocal //从本地文件移动到hdfs -get [-ignoreCrc] //复制文件到本地,可以忽略crc校验 -getmerge //将源目录中的所有文件排序合并到一个文件中 -cat //在终端显示文件内容 -text //在终端显示文件内容 -copyToLocal [-ignoreCrc] //复制到本地 -moveToLocal -mkdir //创建文件夹 -touchz //创建一个空文件 2、HDFS的Shell命令操作 hadoop fs -ls / 查看HDFS根目录 hadoop fs -mkdir /test 在根目录创建一个目录test hadoop fs -put ./test.txt /test  或者 hadoop fs -copyFromLocal ./test.txt /test hadoop fs -get /test/test.txt . 或者 hadoop fs -getToLocal /test/test.txt . hadoop fs -cp /test/test.txt /test1 hadoop fs -rm /test1/test.txt hadoop fs -mv /test/test.txt /test1 hadoop fs -rmr /test1 四、HDFS的java访问接口——FileSystem 写文件 create 读取文件 open 删除文件delete 创建目录 mkdirs 删除文件或目录 delete 列出目录的内容 listStatus 显示文件系统的目录和文件的元数据信息 getFileStatus package hdfs; import java.io.FileInputStream; import java.io.IOException; 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.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; /** * FileSystem * @author liguodong * */ public class HDFSApplication { static final String PATH = "hdfs://liguodong:9000/"; //static final String DIR = "hdfs://liguodong:9000/d1"; static final String DIR = "/d1"; static final String FILE = "/d1/hello"; //FileSystem public static void main(String[] args) throws Exception{ final FileSystem fileSystem = getFileSystem(); //创建文件夹 hadoop fs -mkdir /f1 //mkdir(fileSystem); //删除文件夹 //delete(fileSystem); //上传文件夹 hadoop fs -put src des //putData(fileSystem); //hadoop fs -lsr / //hadoop fs -text /d1/hello //下载文件夹hadoop fs -get src des //getData(fileSystem); //浏览文件夹 browseFile(fileSystem); } private static void browseFile(FileSystem fileSystem) throws IOException { //final FileStatus[] listStatus = fileSystem.listStatus(new Path("/")); final FileStatus[] listStatus = fileSystem.listStatus(new Path(DIR)); for (FileStatus fileStatus : listStatus) { String isDir = fileStatus.isDir()?"文件夹":"文件"; final String permission = fileStatus.getPermission().toString();//权限 final short replication = fileStatus.getReplication();//副本 final long len = fileStatus.getLen(); final String path = fileStatus.getPath().toString();//路径 System.out.println(isDir+"\t"+permission+"\t"+replication+"\t"+len+"\t"+path); } } private static void getData(FileSystem fileSystem) throws IOException { final FSDataInputStream in = fileSystem.open(new Path(FILE)); IOUtils.copyBytes(in, System.out, 1024, true); } private static void putData(FileSystem fileSystem) throws IOException { final FSDataOutputStream out = fileSystem.create(new Path(FILE)); final FileInputStream in = new FileInputStream("G:/love.txt"); IOUtils.copyBytes(in, out, 1024, true); } private static void delete(FileSystem fileSystem) throws IOException { fileSystem.delete(new Path(DIR), true); } private static void mkdir(FileSystem fileSystem) throws IOException { fileSystem.mkdirs(new Path(DIR)); } private static FileSystem getFileSystem() throws IOException, URISyntaxException { return FileSystem.get(new URI(PATH), new Configuration()); } }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Zookeep分布式集群搭建
下一篇:OMAP5912的功能及应用介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~