今天来点不一样的,前几天写的博客都没有目录,不知道大家看的效果怎么样,反正自己在手机上看的效果不是很好。先不谈排版的原因,本人天生没有美观设计优化的本领。那么今天为了方便大家也为了自己回顾可以看的更加明朗,今天来加点目录(也可以叫它思维导图)!
目录##
- 什么是hdfs?
- hdsf相关概念?(块,名称节点,数据节点)
- hdfs的shell命令?
- hdfs的Java API?
大家准备好,接下来就是对目录内容的扩展,相信绝对实用
什么是hdfs?
- hdfs是hadoop的一个组件,是分布式文件存储系统。是为了存储海量数据应用而生。
hdfs相关概念?
- 、块 –>是hdfs基本存储单位,文件是被切成很多块存储在不同节点上的,对于块大小是可以设置的。块的备份数量也是可以设置的,块大小和备份数都是hdfs客户端所控制参数,这个在java API创建客户端的时侯可以看得出来。
3. 名称节点–>hdfs是主从分布结构,分为NameNode(名称节点)和DataNode(数据节点),那么什么是名称节点什么是数据节点呢?接下来我们来介绍:首先我们来介绍名称节点,名称节点是负责管理分布式文件系统的命名空间,保存了两个核心的数据结构,即FSImag
和EditLog。FSImage负责维护文件树以及文件树中所有文件和文件夹的元数据。EditLog记录了对所有文件和文件夹的创建,删除,操作等命令。 - 数据节点–>数据节点启动时,会将FSImage和EditLog同时加载进内存,执行EditLog的各个操作,最后生成新的FSImage和空EditLog
hdfs shell操作?
hdfs操作都是通过客户端实现的,hadoop在搭建的时候在每台机器上搭建了hdfs客户端,所以可以在hdfs集群任一机器启动hdfs客户端来对其进行操作。
- hdfs shell 操作格式–>-->hdfs dfs -xxx (xxx代表参数)
- 常用的shell命令一:上传文件 hdfs dfs -put /usr/local/soft/mmz.log /root(/usr/local/soft/mmz.log表示本地路径,/root表示hdfs路径)
- 常用的shell命令二:下载文件到本地 hdfs dfs -get /root /usr/local/soft/mmz.log
- 常用的shell命令三:hdfs dfs -ls xxx (查看目录信息) hdfs dfs -mkdir -r xxx(递归创建目录) hdfs dfs -rm xxx(删除文件) hdfs dfs -cp xxx xxx(复制文件)hdfs dfs -cat xxx(查看文件内容)
hdfs Java API操作?
在hdfs shell操作时介绍了,对hdfs进行操作是用客户端对其进行操作的,那么在java中我们就要创建一个客户端
- 导入相关jar包,这里我们需要导入的是hadoop安装包解压文件夹下—>share–>hadooo—>conf—>hdfs和common文件夹下的jar包—>以及他们lib文件夹下的所有依赖jar包。(当然我们也可以用maven方法导入jar包)
- 在jar包导入成功后,我们就来操作,这里创建工程,类等常规操作我就详细介绍了。
- Java API操作主体部分一:创建hdfs文件系统客户端 FileSystem.get(URI uri,Configuration conf,String user).需要传入的参数分别指的是URI–>表示hdfs的访问路径 Configuration -->配置 user—>用户
- Java API操作主体部分二
(1)fs.copyFromLocal(new Path(" “),new Path(” “)); 表示从本地上传文件到hdfs分布式文件系统。
(2)fs.copyToLocal(false,new Path(” “),new Path(” "),true);表示从hdfs文件系统下载文件到本地。注意这里使用四个参数的方法,这里的最后一个参数true表示用java本地库对windows进行操作。因为hadoop本地库没有不能对windows进行操作。hadoop本地库只包含了对linux系统的操作。
(3)递归显示文件夹的所有信息
(4)只显示当前目录下的信息,非递归
(5)对hdfs文件系统文件的读取(下面我举的例子是 读取文件,从0偏移量开始读取,输出读取信息,当读到20个字节时停止读取)
FSDataInputStream in=fs.open(new Path(“ ”));(打开一个输入流来读取文件) in.seek(0);(–指定从什么位置开始读取文件,也就是文件起始偏移量)。Byte[] b=new Byte[10];(设置b为每次读取的字节数)int count,read=0;while((read=in.read(b))!=-1){ System.out.println(new String(b));count+=read;if(read=20) break;}
(6)对hdfs文件系统文件的写操作(-- 具体操作跟读取类似,这里不多做介绍–)