HDFS背景

随着数据量的增大,在一个操作系统中内存不了了,就需要分配到操作系统的的管理磁盘中,但是不方便管理者维护,迫切需要一种系统来管理多态机器上的文件,这就是分布式文件管理系统。

HDFS的概念

HDFS英文hadoop distributed file system ,是一个分布式文件系统,用于存储文件,通过目录树记录定位文件,其次他是分布式的,由很多服务器联合起来实现其功能,集群中的服务器各有角色。
HDFS的设计适合一次吸入,多次读取的场景,且不支持文件的修改。适合做数据分析。

HDFS优缺点

优点

1)高容错性
(1)数据自动保存多个副本。它通过增加副本的形式,提高容错性;
(2)某一个副本丢失以后,它可以自动恢复。
2)适合大数据处理
(1)数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据;
(2)文件规模:能够处理百万規模以上的文件数量,数量相当之大。
3)流式数据访问,它能保证数据的一致性
4)可构建在廉价机器上,通过多副本机制,提高可靠性。

缺点

1)不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
2)无法高效的对大量小文件进行存储。
(1)存储大量小文件的话,它会占用 Namenode大量的内存来存储文件、目录和块信息。这样是不可取的,因为 Namenode的内存总是有限的;
(2)小文件存储的寻址时间会超过读取时同,它违反了HDFS的设计目标
3)不支持并发写入、文件随机修改。
(1)一个文件只能有一个写,不允许多个线程同时写;
(2)仅支持数据 append(追加),不支持文件的随机修改

架构

image.png

这种架构主要由三个部分组成,分别为 Namenode、 Datanode和 SecondaryNamenode。

Namenode:

相当于 Master,它是一个主管、管理者。
(1)管理HDFS的名称空问;
(2)管理数据块( Block)映射信息;
(3)配置副本策略;
(4)处理客户端读写请求。

Datanode:

就是 Slave,Namenode下达命令, Datanode执行实际的操作。
(1)存储实际的数据块;
(2)执行数据块的读/写操作。

Secondary Namenode:

并非 Namenode的热备。当 Namenode挂掉的时候,它并不能马上替换 Namenode并提供服务
(1)辅助 Namenode,分担其工作量
(2)定期合并 Fsimage和 Edits,并推送给 Namenode
(3)在紧急情况下,可辅助恢复 Namenode

HDFS文件块大小

HDFS中的文件在物理上是分块存储( block),块的大小可以通过配置参数( dfs blocksize)来规定,默认大小在 hadoop2x版本中是128M,老版本中是64M
思考:为什么块的大小不能设置的太小,也不能设置的太大?
HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速如果寻址时间约为10ms,而传输速率为100MBs,为了使寻址时间仅占传输时间的1%,我们要将块大小设置约为100MB。默认的块大小128MB。块的大小:10ms+100*100Ms=100M,如图3-2所示

Hadoop的命令操作

[shaozhiqi@hadoop102 ~]$ cd /opt/module/
[shaozhiqi@hadoop102 module]$ cd hadoop-3.1.2/
[shaozhiqi@hadoop102 hadoop-3.1.2]$ ls
bin include lib LICENSE.txt output sbin wcinput
etc input libexec NOTICE.txt README.txt share wcoutput

查看help

[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop –help
Client Commands:
checknative check native Hadoop and compression libraries availability
classpath prints the class path needed to get the Hadoop jar and the required libraries
conftest validate configuration XML files
credential interact with credential providers
dtutil operations related to delegation tokens
envvars display computed Hadoop environment variables
fs run a generic filesystem user client
jar <jar> run a jar file. NOTE: please use "yarn jar" to launch YARN applications, not this command.
jnipath prints the java.library.path
kdiag Diagnose Kerberos Problems
kerbname show auth_to_local principal conversion
key manage keys via the KeyProvider
trace view and modify Hadoop tracing settings
version print the version

查看fs都有哪些命令

[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> ... <dst>]
[-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...]
[-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] [-v] [-x] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
[-head <file>]
[-help [cmd ...]]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
[-setfattr {-n name [-v value] | -x name} <path>]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touch [-a] [-m] [-t TIMESTAMP ] [-c] <path> ...]
[-touchz <path> ...]
[-truncate [-w] <length> <path> ...]
[-usage [cmd ...]]
Generic options supported are:
-conf <configuration file> specify an application configuration file
-D <property=value> define a value for a given property
-fs <file:///|hdfs://namenode:port> specify default filesystem URL to use, overrides 'fs.defaultFS' property from configurations.
-jt <local|resourcemanager:port> specify a ResourceManager
-files <file1,...> specify a comma-separated list of files to be copied to the map reduce cluster
-libjars <jar1,...> specify a comma-separated list of jar files to be included in the classpath
-archives <archive1,...> specify a comma-separated list of archives to be unarchived on the compute machines
The general command line syntax is:
command [genericOptions] [commandOptions]

查看我们的HDFS目录信息-ls,发现失败,启动我们的hadoop集群

[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs -ls
ls: Call From hadoop102/192.168.1.102 to hadoop102: failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
[shaozhiqi@hadoop102 hadoop-3.1.]$

再次查看目录-ls

我们是新起的集群没有上传文件和创建目录

[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs -ls
ls: `.': No such file or directory
[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs -ls /
[shaozhiqi@hadoop102 hadoop-3.1.]$

创建文件夹-mkdir

-p标示递归创建,多层时用

[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs -mkdir -p /shaozhiqi/temp
[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs -ls /
Found items
drwxr-xr-x - shaozhiqi supergroup -- : /shaozhiqi
[shaozhiqi@hadoop102 hadoop-3.1.]$

将本地的文件剪贴到hdfs -moveFromLocal

[shaozhiqi@hadoop102 hadoop-3.1.]$ vim test.txt
[shaozhiqi@hadoop102 hadoop-3.1.]$
[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs -moveFromLocal test.txt /shaozhiqi/temp
[shaozhiqi@hadoop102 hadoop-3.1.]$

查看是否上传成功

[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs -ls -r /shaozhiqi/temp
Found items
-rw-r--r-- shaozhiqi supergroup -- : /shaozhiqi/temp/test.txt
[shaozhiqi@hadoop102 hadoop-3.1.]$

在test.txt的文件末尾追加内容-appendToFile

[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs –appendToFIle test2.txt /shapzhiqi/temp/test.txt

查看文件内容 –cat

[shaozhiqi@hadoop102 hadoop-3.1.]$ hadoop fs -cat /shaozhiqi/temp/test.txt
tetete
sdfd ddd
[shaozhiqi@hadoop102 hadoop-3.1.]$

其他常用命令后续再补充吧

-tail:显示一个文件的末尾
-chgrp、-chmod、-chown:和linux一样修改文件的所属权
-copyFromLocal:从本地copy文件到HDFS上去
-copyToLocal:从hdfs copy到本地
-cp:从HDFS的一个路劲copy到HDFS的另一个路劲
-mv:在HDFS中移动文件
-get:等同-copyToLocal
-getmerge:合并下载多个文件

hadoop(十一)HDFS简介和常用命令介绍的更多相关文章

  1. Hadoop生态圈-zookeeper本地搭建以及常用命令介绍

    Hadoop生态圈-zookeeper本地搭建以及常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.下载zookeeper软件 下载地址:https://www.ap ...

  2. Hadoop生态圈-phoenix完全分布式部署以及常用命令介绍

    Hadoop生态圈-phoenix完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. phoenix只是一个插件,我们可以用hive给hbase套上一个JDBC壳,但是你 ...

  3. maven常用命令介绍

    mvn 3.0.4 创建maven项目命令  mvn  archetype:generate   -DgroupId=damocles-autocredit -DartifactId=damocles ...

  4. 转:maven常用命令介绍

    mvn 3.0.4 创建maven项目命令  mvn  archetype:generate   -DgroupId=damocles-autocredit -DartifactId=damocles ...

  5. Docker 安装与常用命令介绍

    docker的镜像文件作用就是:提供container运行的文件系统层级关系(基于AUFS实现),所依赖的库文件.已经配置文件等等. 安装docker yum install -y docker 启动 ...

  6. Linux操作系统安全-OpenSSL工具常用命令介绍

    Linux操作系统安全-OpenSSL工具常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OpenSSL开源项目有三个组件 openssl: 多用途的命令行工具,包 ...

  7. cmd常用命令介绍

    一.cdm命令介绍:CMD命令是一种命令提示符,CMD是command的缩写,即命令提示符(CMD),位于C:\Windows\System32的目录下,是在OS/2,Win为基础的操作系统(包括Wi ...

  8. Git的原理简介和常用命令

    Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调 ...

  9. 数字证书管理工具keytool常用命令介绍

    需要给一个apk加签名,用到了keytool这个工具,下面转载一篇介绍keytool的文章 http://blog.chinaunix.net/uid-17102734-id-2830223.html ...

随机推荐

  1. seldom之数据驱动

    seldom之数据驱动 如果自动化某个功能,测试数据不一样而操作步骤是一样的,那么就可以使用参数化来节省测试代码. seldom是我在维护一个Web UI自动化测试框,这里跟大家分享seldom参数化 ...

  2. orale中pl/sql的数据类型总结

    一.pl/sql的概念 pl/sql简单的说就是:sql语句+编程语言的特性. 二.pl/sql的优点 1.可以提高程序的运行效率,因为能够减少数据库的访问次数. 2.可以对复杂的业务逻辑进行封装 3 ...

  3. idea 新建java类自动补充创建人,创建时间,版本等..

    1.先进入 File 2.进入 Editor 找到 File and Code Templates 并点击 3.右侧点击 lncludes  4.第二项 File Header  /** * @aut ...

  4. koa2框架介绍

    koa2框架介绍 1.koa2介绍:是当前最流行的node.js的框架,koa2是由express原来的人打造的.他的体积很小,但是扩展性很强. 2.koa2优点和缺点: 2.1.优点: .抛弃了ca ...

  5. Selenium系列(三) - 针对元素常见的简单操作

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  6. go micro实战01:快速搭建服务

    背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...

  7. Mybatis三剑客介绍

    1.MyBatis generator 利用mybatis-generator自动生成代码 下载地址:  https://download.csdn.net/download/qq_36625806/ ...

  8. 【Unity游戏开发】跟着马三一起魔改LitJson

    一.引子 在游戏开发中,我们少不了和数据打交道,数据的存储格式可谓是百花齐放,xml.json.csv.bin等等应有尽有.在这其中Json以其小巧轻便.可读性强.兼容性好等优点受到广大程序员的喜爱. ...

  9. 使用VS开始一个新项目配置外部库的新手总结

    在使用VS做一个项目的时候,往往会需要使用各种各样的库,一般一个标准的外部库目录大体结构为: VS在配置这些库的时候有多种可行方法,但是不同的方法对于项目后续的管理和移植有不同的影响,我使用过以下三种 ...

  10. vue2.0 操作数组下标不跟新ui,使用set()或$forceUpdate 也不能跟新视图情况

    在vue 2.0 中操作数组不跟新ui图,即使使用set()或 $forceUpdate也不能跟新视图,我在前段时间也遇到了一个问题,当时我使用的时element 的tree 组件 由于需要对tree ...