一、为什么需要分布式存储?
①数据量太大,单机存储能力有上限,需要靠数量来解决问题。
②数量的提升带来的是网络传输、磁盘读写、CPU、内存等方面综合提升。分布式组合在引擎可以达到1+1>2的效果。
二、分布式的基础架构分析
大数据体系中,分布式的调度主要有两类价格模式:
1.**去(无)中心化模式**
去中心化模式没有明确的中心,众多服务器之间基于特定规则进行同步协调。区块链和P2P就是典型的去中心化模式。
2.**中心化模式(大部分基础架构)**
以一个节点作为中心,去同意调度其他节点。这种模式也被称为**一主多从模式,简称主从模式(Master And Slaves)。**Hadoop就是典型的主从模式(中心化模式)架构的技术框架。
三、HDFS基础架构
1.HDFS简介
HDFS是Hadoop三大组件(HDFS、MApReduce、YARN)之一。全称是Hadoop Distributed File System(Hadoop分布式文件系统)。是Hadoop技术栈内提供的分布式数据存储解决方案,可以在多台服务器上构建集群,存储海量的数据。
2.HDFS基础架构
HDFS是一个典型的主从模式的架构
HDFS集群分为三个角色:
·**主节点(NameNode)**:HDFS系统的主角色,是一个独立的进程,负责管理HDFS整个文件系统,负责管理DataNode。
·**从节点(DataNode)**:HDFS系统的从角色,是一个独立进程,主要负责数据的存储,即存入数据和取出数据。
·**主节点辅助节点(SecondaryNameNode)**:Name Node的辅助,是一个独立的进程,主要帮助NameNode完成元数据整理工作(打杂)。
四、HDFS集群启停命令
1.一键启停脚本
·$HADOOP_HOME/sbin/start-dfs.sh,一键启动HDFS集群
执行原理:
·在执行此脚本的机器上,启动SecondaryNameNode
·读取core-site.xml内容(fs.defaultFS项),确认NameNode所在的机器,启动NameNode
·读取workers内容,确认DataNode所在的机器,启动全部DataNode
·$HADOOP_HOME/sbin/stop-dfs.sh,一键关闭HDFS集群
执行原理:
·在执行此脚本的机器上,关闭SecondaryNameNode
·读取core-site.xml(fs.defaultFS项),确认NameNode所在机器,关闭NameNode
·读取workers内容,确认DataNode所在机器,关闭全部NameNode![](https://img-blog.csdnimg.cn/a4c917cfac504fe1abde59effadb5288.png)
2.单进程启停
(1)$HADOOP_HOME/sbin/hadoop-daemon.sh,此脚本可以单独控制所在机器的进程的启停(只能在对应机器管理对应服务)
用法:hadoop-daemon.sh ( start | status | stop ) ( namenode | secondarynamenode | datanode )
(2)$HADOOP_HOME/bin/hdfs,此程序也可以用以单独控制所在机器的进程的启停(只能在对应机器管理对应的服务)
用法:hdfs --daemon( start | status | stop )( namenode | secondarynamenode | datanode )
五、HDFS基本操作命令
** HDFS文件系统基本信息**
HDFS作为分布式存储的文件系统,有其对数据的路径表达方式。HDFS同Linux系统一样,均是以 / 作为根目录的组织形式。
路径表示:
·Linux:file:///
·HDFS:hdfs://namenode:port/
例:
Linux:file:///usr/local/hello.txt
HDFS: hdfs://node1:8020/usr/local/hello.txt
协议头 file:/// 或 hdfs://node1:8020/ **可以省略**,需要提供Linux路径的参数,会自动识别为file://,需要HDFS路径的参数,会自动识别为hdfs://,除非你明确需要写或不写会有BUG,否则一般不用写协议头.
** HDFS命令体系介绍**
关于HDFS文件系统的操作命令,Hadoop提供了两套命令体系。
(1)hadoop命令(老版本用法),用法:hadoop fs [ generic options ]
(2)hdfs命令(新版本用法),用法:hdfs dfs [ generic options ]
两者在文件系统操作,用法完全一致,用哪个都可以。
1.创建文件夹
hadoop fs -mkdir [-p] <path> ....
hdfs dfs -mkdir [-p] <path> ....
path为待创建的目录
-p选项的行为与Linux mkdir -p 一致
** 2.查看指定目录下内容 **
hadoop fs -ls [-h] [-R] [ <path> ...]
hdfs dfs -ls [-h] [-R] [<path> ...]
-h 人性化显示文件size
path 指定目录路径
-R 递归查看指定目录及其子目录
3.上传文件到HDFS指定目录下
hadoop fs -put [-f] [-p] <localsrc>...<dst>
hdfs dfs -put [-f] [-p] <localsrc>...<dst>
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限。
localsrc 本地文件系统(客户端所在机器)
dst 目标文件系统(HDFS)
4.查看HDFS文件内容
hadop fs -cat <src>...
hdfs dfs -cat <src>...
读取大文件可以使用管道符配合more对文件进行翻页处理
hadoop fs -cat <src> | more
hdfs dfs -cat <src> | more
5.下载HDFS文件
hadoop fs -get [-f] [-p] <src>...<localdst>
hdfs dfs -get [-f] [-p] <src>...<localdst>
下载文件到本地文件系统指定目录,localdst必须是目录
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限
6.拷贝HDFS文件
hadoop fs -cp [-f] <src>...<dst>
hdfs dfs -cp [-f] <src>...<dst>
-f 覆盖目标文件(已存在下)
7.追加数据到HDFS文件中
hadoop fs -appendToFile <localsrc>...<dst>
hdfs dfs -appendToFile <localsrc>...<dst>
将所以给本地文件的内容追加到给定dst文件,如果dst文件不存在,将创建该文件,如果<localSrc>为-,则输入为从标准输入中读取。![](https://img-blog.csdnimg.cn/fe1717c3e7be4f6bbb2f1fd63802e8d7.png)
8.HDFS数据移动操作
hadoop fs -mv <src>...<dst>
hdfs dfs -mv <src>...<dst>
移动文件到指定文件夹下
可以使用该命令移动数据,重命名文件的名称
9.HDFS数据删除操作
hadoop fs -rm -r [-skipTrash] URI [URI ...]
hdfs dfs -rm -r [-skipTrash] URI [URI ...]
删除指定路径的文件或文件夹(-r)
-skipTrash 跳过回收站,直接删除![](https://img-blog.csdnimg.cn/880e202fdcc54a7ea6c029e5926e5ec1.png)
回收站功能默认关闭,如果要开启需要在 core-site.xml 内配置:
<property>
<name>fs.trash.interval</name> #设置文件保留期间,1440为一个星期
<value>1440</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name> #检查区间,表示回收站每120分钟检查一次
<value>120</value>
</property>
无需重启集群,在哪个机器配置的,在哪个机器执行命令就生效。
回收站默认位置在: /user/ 用户名 (hadoop)/.Trash
六、HDFS权限不足解决方法
1.超级用户
HDFS中,也是有权限控制的,其控制逻辑和Linux系统完全一致。但Linux的超级用户是root,HDFS文件系统的超级用户:是启动namenode的用户。
2.修改权限(和Linu一致)
(1)修改所属用户和组
hadoop fs -chown [-R] root:root /xxx.txt
hdfs dfs -chown [-R] root:root /xxx.txt
(2)修改权限
hadoop fs -chmod [-R] 777 /xxx.txt
hdfs dfs -chmod [-R] 777 /xxx.txt
版权归原作者 吗喽也是命 所有, 如有侵权,请联系我们删除。