【笔记】大数据技术之简单了解HDFS(三)

关于HDFS

  • 解决海量数据的分布式存储
  • 分布式文件系统
    • 需要借助于海量的计算机集群
    • 主节点:元数据服务
    • 从节点:完成存储任务
    • 实现目标
      • 兼容廉价的硬件设施
      • 实现流数据读写
      • 支持大数据集
      • 支持简单的文件模型
      • 强大的平台兼容性
    • 自身局限性
      • 不适合低延迟数据访问
      • 无法高效存储小数据
      • 不支持多用户写入以及任意读写文件
  • 相关概念
      • 为了分摊磁盘读写开销
      • 比普通的文件系统的块要大得多
      • 支持现象大规模数据存储
      • 减低分布式节点的寻址开销
      • 缺点
        • 会导致MapReduce只有几个任务执行,降低了并行性
      • 好处
        • 支持大规模文件存储
        • 简化系统设计
        • 适合数据备份
    • 名称节点(主节点)NameNode

      • 整个集群的管家:记录了各个数据块存储位置
      • 结构
        • FsImage

          • 保存系统文件树
            • 文件的复制等级
            • 修改和访问时间
            • 访问权限
            • 块的大小以及组成文件的块
          • 具体操作过程
            在这里插入图片描述
        • EditLog

          • 记录数据的存储删除等
        • FsImage的规模太大:每次发生数据会很大规模,所以只将更新部分存储到EditLog中。

        • 第二名称节点:定期和名称节点通信,当EditLog过大时名称节点停止使用EditLog,并产生edits.new新节点。

          • 解决EditLog不断增大的过程
          • 冷备份
            在这里插入图片描述
    • 数据节点 DataNode

      • 负责存储节点
      • 每个数据节点都会被保存到各自本地Linux文件系统中去

体系结构

  • 目录结构
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 结构局限性

    • 命名空间限制:所有元数据都是保存在内存中去,所能存储的文件规模有上线
    • 性能会受到单个名称节点的限制
    • 隔离问题:只有一个命名空间,不能对不同应用程序进行隔离
    • 一旦一个节点发生故障,整个都不可用

存储原理

  • 出故障是常态
  • 每个数据都被冗余保存
  • (冗余副本)优点
    • 加快数据传输速度:多台机器并行
    • 很容易检查数据错误:多个副本参照
    • 保证数据可靠性:会自动复制新的副本
  • 数据读取
    • 提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID
    • 优先选取最近节点(同一机架)读取数据
  • 错误和恢复
    • 名称节点出错
      • 会将数据从第二节点的冷备份中恢复数据,此时会停运一段时间
    • 数据节点出错
      • 不断发送心跳信息
      • 接收不到之后会被名称节点标记不可用
      • 此时将正常备份数据重新复制
      • 可以调整冗余备份数据的具体存放位置
    • 数据本身出错
      • 校验码校验:客户端读取数据时使用
      • 创建文件数据时创建校验码

读取数据过程

  1. 打开文件
  2. 获取数据块信息
  3. 读取请求
  4. 读取数据
  5. 获取数据块信息
ClientProtocal.getBlockLocation();
  1. 读取数据 -> 完成
  2. 关闭文件
    在这里插入图片描述

写数据过程

  1. 创建文件请求
  2. 创建文件元数据
  3. 写入数据
  4. 写入数据包:流水线复制
  5. 接受确认包:由最后一个数据包逐次向前传递
  6. 写操作完成
    在这里插入图片描述

基本编程方法

  • 常用Shell命令和JavaAPI
  1. 启动
$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format 	# 格式化hdfs文件系统
$ ./sbin/start-dfs.sh 			# 启动

$ start-all
  1. 常用命令
  • hadoop fs 适用于不同的文件系统,适用于HDFS
  • hadoop dfs 只适用于HDFS
  • hdfs dfs 只适用于HDFS
  • ls 显示详细信息
  • mkdir 创建相关文件夹
  • cat 显示相关文件内容
  • hadoop -cp fileurl1 fileurl2 从本地复制到HDFS文件系统中去
  • hadoop -put fileurl1 fileurl2 上传
  • 使用url链接可以直接访问文件
  1. 利用Java API交互
  • 基本的Hadoop common jar包在/usr/local/hadoop/share/hadoop/
  • 配置文件放置到Java工程目录下(安装软件的bin目录)
// 测试:HDFS中是否存在某个文件
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.Path

public class ThreePss {
	public static void main(String[] args) {
		try {
			String filename = "hdfs://localhost:9000/user/hadoop/test.txt";
			Configuration conf = new Configuration();
			FileSystem fs = FileSystem.get(conf);
			if(fs.exists(new Path(filename))) {
				System.out.println("文件存在");
			} else {
				System.out.println("文件不存在")}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
# 可以直接使用shell命令查询

测验

  1. HDFS命名空间包括了块、存储的目录以及对应文件
  2. IoT协议是物联网协议,HDFS构建在TCP/IP协议
  3. 客户端通过一个可以配置的端口向NameNode主动发起TCP连接,并使用客户端协议与名称节点进行交互
  4. 名称节点和数据节点之间则使用数据节点协议进行交互
  5. 客户端和数据节点的交互式通过RPC(Remote Procedure Call)来实现的
  6. 启动关闭Hadoop是start-dfs.shstop-dfs.sh
  7. 补充(NameNode作为中心服务器,负责管理文件系统的命名空间和客户端对文件的访问

实际操作

实验室传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值