Hadoop(6) HDFS


Hadoop(6)
HDFS

HDFS


HDFS介绍

HDFS的定义

HDFS(Hadoop Distributed File System),即Hadoop分布式文件系统

HDFS由多台主机搭建服务器集群来实现,集群中的服务器分别负责不同的功能

HDFS通过目录树来定位文件

HDFS的优缺点

优点

  1. 采用多副本机制,如果一个副本丢失,可以自动恢复,容错性高
  2. 适合处理大数据
  3. 可以构建在廉价的机器上,随时航向扩展,通过多副本机制提高可靠性

缺点

  1. 不适合低延迟访问数据
  2. 无法高效的对大量小文件进行存储
    1. 存储大量的小文件会占用大量的NameNode内存
    2. 小文件的寻址时间会浪费大量的时间,从而降低效率(一般来说寻址时间<传输时间的 1%比较合适)
  3. 不支持并发写入和文件的修改
    1. 一个文件只能单线程写入,不允许多线程操作
    2. 仅支持数据的追加,不支持文件的修改
HDFS的应用场景

HDFS适合一次写入,多次读取,并且不支持文件的修改,适合做数据分析


HDFS的组成

在这里插入图片描述

HDFS由NameNode,DataNode,ClientSecondaryNameNode组成,在
HDFS中,文件以切块的形式存在,即一个大文件分成多个部分来存储,每个块大小为128MB(1.x版本中是64MB)

一个块(block)如果太小,会增加寻址时间,如果一个block太大,会导致MapReduce处理这块数据时会非常慢

注意

HDFS的块大小主要取决与磁盘的传输速率

  • NameNode 可以理解为结群的主管
    • 管理HDFS的名称空间
    • 配置副本策略
    • 管理数据块的信息(不是数据块)
    • 处理客户端的读写请求(只是处理请求,不处理读写过程)
  • DataNode 负责具体的任务执行
    • 存储实际的数据块
    • 执行数据块的读写操作
  • Client 客户端
    • 与NameNode交互,获取数据块信息
    • 与DataNode交互,负责向DataNode读写数据
    • 上传文件时负责文件的切块
    • 通过指令管理和操作HDFS
  • .SecondaryNameNode
    • 只是对NameNode起辅助作用,注意不是NameNode的热备


配置Hadoop开发环境

由于加使用的操作系统,开发软件可能都不一样,就比如我使用的是基于Linux的Deepin15.11桌面版,开发软件使用的是idea,相比大多数人使用的是Windows系统下Eclipse开发,所以操作不太一样

虽然操作不同,但是配置的思路给大家列举一下,如果大家不会配置,就根据下面的步骤百度一下:

  1. 在开发软件中配置Maven
  2. 将Hadoop的软件包(zip或者tar.gz)解压到自己的磁盘中,不能有中文路径
  3. 配置Hadoop的环境变量
  4. 配置完之后重启一下电脑

HDFS的Shell命令

注意

1. 在执行命令时,使用bin/hadoop fsbin/hdfs dfs的效果是一样的,这是因为dfs是fs的实现类,它们底层调用的jar包都是一样的

2. HDFS的命令和Linux的命令很像,如果熟悉Linux指令,HDFS的Shell操作可以很快上手

3. 下面所有的命令演示,涉及到HDFS文件(夹)的变更,都可以通过浏览器访问NameNode50070端口查看HDFS的文件系统详情来查看命令执行的结果

  • 查看fs的所有命令
hadoop fs

也可以通过下面的指令查看

hadoop fs --help

注意

1. 同样的hadoop dfshadoop dfs --help也一样,下面我们就不把fsdfs一一做列举了,我们统一使用fs

2. 通过以上指令可以查看HDFS的所有指令,下面我们只列举最常用的几个指令,如果大家感兴趣可以把HDFS所有的命令自己测试一遍

HDFS操作
  • 查看指定目录的内容
hadoop fs -ls <目录路径>
  • 查看文本文件内容
hadoop fs -cat <文件路径>
  • 复制
hadoop fs -cp <文件(夹)路径> <拷贝后的文件夹路径>
  • 删除
hadoop fs -rm -r <要删除的文件夹路径>
  • 查看分区情况
Hadoop fs -df [选项]

选项:

选项 说明
-h 存储单位以比较友好的方式展现,说白了就是把单位转换成GB,MB等
  • 查看文件夹的使用情况
hadoop fs -du [选项] <路径>

选项:

选项 说明
-h 同df,存储单位以比较友好的方式展现,说白了就是把单位转换成GB,MB等
  • 设置文件副本数量
hadoop fs -setrep <副本数量n> <HDFS中文件路径>

注意

设置的数量一定要小于DataNode的数量,否则只能创建DataNode个数的副本

HDFS上传操作
  • 上传文件到HDFS(复制本地文件到HDFS)
hadoop fs -copyFromLocal <本地文件路径> <HDFS文件路径>

或者

hadoop fs -put <本地文件路径> <HDFS文件路径> 

注意

-copyFromLocal-put的作用是一样的,在底层copyFromLocal其实是put的一个子类,但是这个子类什么其他的功能都没有实现,只是换了一个名字而已

  • 剪切本地的文件到HDFS

其实moveFromLocalcopyFromLocal唯一的区别就是一个是剪切,一个是复制

hadoop fs -moveFromLocal <本地文件路径> <HDFS文件路径>
  • 追加内容到HDFS中的文件中
hadoop -appendToFile <本地文件路径> <要追加到的文件路径>
HDFS下载操作
  • 下载文件(复制HDFS文件到本地)

下载同上传一样,有两个方法

hadoop fs -copyToLocal <HDFS中的文件路径> <下载到本地的文件路径>

或者

hadoop fs -get <HDFS中的文件路径> <下载到本地的文件路径>
  • 下载多个文件到本地,并合并成一个文件
hadoop fs -getmerge <HDFS中的文件路径1> <HDFS中的文件路径2> ... <HDFS中的文件路径n> <本地合并后的文件路径>

HDFS的API操作

开发软件中开发环境的搭建
  1. 首先,新建一个Maven项目(不需要官方模板,直接新建简单项目即可)

  2. 然后引入依赖

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值