HDFS是什么
1、HDFS是hadoop的一个存储子模块。
2、HDFS(全称Hadoop Distributed File System),即为hadoop的分布式文件系统
3、File System:文件系统,操作系统用来存储和管理文件的软件。即对文件进行增删改查等事务操作。
4、当需要存储的数据过大,超过一个计算机的存储范围。HDFS就可以将文件分成N个Block快存储在不同的计算机上。管理通过网络跨多个计算机的文件系统即为分布式文件系统。
HDFS的优缺点
优点:
1、适合存储大文件,用来管理PB级大数据;
2、处理非结构化数据(一般来说,使用HDFS将非结构化数据结构化,然后进行计算和处理);
3、流的方式访问,适合一次写入,多次读取;
4、由于是集群,运行于廉价的服务器上,成本低;
5、高容错性:少量服务器出现问题,用户察觉小;
6、可扩展性;
缺点:
1、不适合处理低延尺数据访问
(1)、dfs在为了处理大量数据分析任务的,主要是为了达到高的数据吞吐而设计的。
(2)、为了处理低延迟的数据,后续会介绍HBase为更佳选择
2、不适合存储大量的文件
(1)、小文件会个hadoop的性能和扩展带来严重问题
(2)、可以利用SequenceFile、MapFile等方式递归小文件来解决
3、不支持多个用户同时写入及修改同一个文件
(1)、如果文件已经存在,则用户修改当前文件,只能追加
(2)、多个用户不能同时对同一个文件进行写操作,也不能随意修改文件的位置
HDFS命令介绍
HDFS命令的两种格式
hdfs dfs 开头
hadoop fs 开头
以下只用一个格式
1、查看子命令帮助信息,如ls子命令
hdfs dfs -help ls
2、查看hdfs中已经存在文件信息
hdfs dfs -ls / # 需要加根目录
3、创建hdfs文件
hdfs dfs -touchz /hadoop.txt # 需要目录路径
4、向hdfs文件中追加内容
hdfs dfs -appendToFile local.txt /hdfs.txt # 将本地文件追加到hdfs中的hdfs.ext文件
5、查看hdfs文件内容
hdfs dfs -cat /edits.txt
6、本地文件上传到hdfs上
hdfs dfs -put local.txt / # 将本地文件上传到hdfs根目录下,本地资源不删除
hdfs dfs -copyFromLocal local.txt / # 和put一样效果
hdfs dfs -moveFromLocal local.txt / # 将本地文件上传到hdfs根目录下,本地资源删除
7、从hdfs下载文件到本地
hdfs dfs -get /test.txt /本地路径 # 如果本地路径不指定,则默认下载在当前路径
hdfs dfs -copyToLocal /test.txt /本地路径 # 和get用法一样
8、在hdfs创建目录
hdfs dfs -mkdir [-r] /parent # 加上-r表示创建多层目录
9、hdfs中删除文件/文件夹
hdfs dfs -rm /test.txt # 删除文件
hdfs dfs -rm [-r] /文件名 # 删除文件夹,加-r表示递归删除
10、hdfs中修改文件名称(也可以用来移动文件)
hdfs dfs -mv /test1.txt /test.txt # 修改文件名
hdfs dfs -mv /test.txt /test # 将test.txt移动到test文件夹中
11、hdfs拷贝文件/文件夹
hdfs dfs -cp /text.txt /text
hdfs dfs -cp /text /text1
12、文件查找
hdfs dfs -find /查找路径 -name 文件名
下面是hdfs和getconf结合使用
13、获取NameNode节点名称(可能有对个)
hdfs getconf -namenodes
14、获取hdfs最小块信息
hdfs getconf -confkey dfs.namenode.fs-limits.min-block-size
15、获取hdfs的NameNode的RPC地址
hdfs getconf -nnRpcAddresses
下面是hdfs与dfsadmin结合使用
16、查看当前模式
hdfs dfsadmin -safemode get
17、进入安全模式
hdfs dfsadmin -safemode enter
18、退出安全模式
hdfs dfsadmin -safemode leave
19、查看服务器机架信息
hdfs dfsadmin -printTopology
下面为hdfs与fsck结合使用
20、显示hdfs块信息
hdfs fsck /test.txt -files -blocks -locations
其他命令
21、查看压缩库本地安装情况
hadoop checknitive
22、初始化namenode
hadoop namenode -format
23、执行自定义jar
hadoop jar jar名 主类 参数
24、查看压缩文件或者SequenceFile等文件
hdfs dfs -text /文件名
小技巧:如果在使用命令的时候不知道格式可以使用
hdfs dfs -help 命令
来查看用法,或者直接回车会自动显示使用方式
block块
block块
1、向hdfs上次文件时,hdfs上文件存储是分成N个block快存储在集群中不同的datanode中
2、每个block快在默认的情况下,大小为128M
3、在HDFS中,一个不足的128M大小的block块,占用的磁盘存储也只有实际的大小,而不是128M
block副本
1、hdfs在设计的时候,为了保证数据的可用及容错,每个block共有三分,即副本
2、每个副本都是存储在不用datanode中
3、使用配置文件hdfs-site.xml设置副本数
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
block存储图
机架感知
在现实生产中,往往会有很多服务器,会有很多机房,很多机架
datanode在不同的机上block分布规律:
1、第一个block副本会存储在客户端链接的datanode上
2、第二个会存储在与第一个block副本物理距离最近的datanode上
3、第三个会存储在第二个副本相同机架上不同的datanode上
机架感知需要自己配置,详细见https://mp.csdn.net/mdeditor/102488268#
block一些其他操作
动态修改block副本数量
hdfs dfs -setrep -R 4 /path
使用hdfs fsck查看文件目录及block信息和位置
后面会持续更新