2022-05-13 HDFS 数据存储与数据管理

Posted 儒雅的水瓶座程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-05-13 HDFS 数据存储与数据管理相关的知识,希望对你有一定的参考价值。

目录

HDFS REST HTTP API 
Hadoop常见文件存储格式
文件压缩格式
HDFS异构存储和存储策略

学习目标

​理解什么是RESTful风格​
​理解HDFS语句RESTful风格的HTTP客户端​
​掌握行式存储,列式存储文件区别​
​掌握Hadoop支持的常见文件存储格式​
​掌握Hadoop常见文件压缩格式​
​掌握HDFS异构存储和存储策略选择​


HDFS常见的客户端

1.Shell Command

HDFS Shell Command的操作俗称命令行操作。

命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。
命令格式:  

hadoop fs <args>  

hdfs dfs <args> 

2022-05-13

2.Java API 

HDFS Java API提供了使用Java代码操作访问HDFS的能力。

HDFS Java API也是大数据开发中常用的HDFS操作方式。
核心类:  

FileSystem  

Configuration 

public class HDFSReadDemo 
public static void main(String[] args) throws Exception
//设置客户端用户身份:root 具备在hdfs读写权限
System.setProperty("HADOOP_USER_NAME","root");
//创建Conf对象
Configuration conf = new Configuration();
//设置操作的文件系统是HDFS 默认是file:///
conf.set("fs.defaultFS","hdfs://node1:8020");
//创建FileSystem对象 其是一个通用的文件系统的抽象基类
FileSystem fs = FileSystem.get(conf);
//调用open方法读取文件
FSDataInputStream in = fs.open(new Path("/helloworld.txt"));
//创建本地文件输出流
FileOutputStream out = new FileOutputStream("D:\\\\helloworld.txt");
//IO工具类实现流对拷贝
IOUtils.copy(in,out);
//关闭连接
fs.close();


基于RESTful的HDFS API--WebHDFS

1.WebHDFS概述 

  • WebHDFS 提供了访问HDFS的RESTful接口,内置组件,默认开启。
  • WebHDFS 使得集群外的客户端可以不用安装HADOOP和JAVA环境就可以对HDFS进行访问,且客户端不受语言限制
  • WebHDFS 是HortonWorks开发的,后捐给了Apache。
  • 当客户端请求某文件时,WebHDFS会将其重定向到该资源所在的datanode。
  • 2022-05-13

2.WebHDFS使用 

  • 经常使用的HDFS Web UI,其文件浏览功能底层就是基于WebHDFS来操作HDFS实现的。

2022-05-13

3.FileSystem URIs vs HTTP URLs

  • WebHDFS的文件系统schema为webhdfs://。

URL格式为:  webhdfs://<HOST>:<HTTP_PORT>/<PATH>    

效果相当于:hdfs://<HOST>:<RPC_PORT>/<PATH>

  • 在RESTful风格的API中,相应的HTTP

URL格式:  http://<HOST>:<HTTP_PORT>/webhdfs/v1/<PATH>?op=...

2022-05-13

4.HTTP RESTful API参数 

官方参数说明 :​​https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Open_and_Read_a_File ​


2022-05-13

2022-05-13

2022-05-13


5.基于HTTP RESTful API操作演示 

  • 提前安装好Postman测试工具。也可以直接在浏览器地址栏中输入测试。
  • 请求URL:http://node1.itcast.cn:9870/webhdfs/v1/?op=LISTSTATUS
  • 该操作表示要查看根目录下的所有文件以及目录,相当于 hadoop fs -ls / 

2022-05-13

2022-05-13

  • 读取指定文件内容。  http://node1.itcast.cn:9870/webhdfs/v1/itcast/wordcount/in/word.txt?op=OPEN&noredirect=false  其中noredirect参数用于指定是否重定向到一个datanode,在该节点可以读取文件数据。 

2022-05-13

 
基于RESTful的代理服务-HttpFS

1.HttpFS概述 

  • HttpFS 是一个提供RESTful 接口的网关的服务器,该网关支持所有HDFS文件系统操作。
  • 对于文件CURD的操作全部提交给HttpFS服务进行中转,然后由HttpFS去跟HDFS集群交互。
  • HttpFS是一个独立于HDFS的服务,若使用需要手动安装。 

2022-05-13

2.HttpFS工作原理 

  • HttpFS本身是Java Web应用程序。使用内置的Jetty服务器对外提供服务。
  • HttpFS是一个独立于HDFS的服务。本质上是一个代理服务。
  • HttpFS API的底层通过是映射到HDFS的HTTP RESTful API调用实现的。
  • HttpFS默认端口号为14000。 

3.HttpFS配置--Step1 

  • 配置允许通过代理访问的主机节点、用户所属组。(core-site.xml)
  • 表示root用户可以在任意host主机节点上代表任意group组的用户。
  • *表示所有。
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

4.HttpFS配置--Step2 

同步配置文件到集群中其他节点,并重启HDFS集群。 

cd /export/server/hadoop-3.1.4/etc/hadoop
scp core-site.xml node2:/export/server/hadoop-3.1.4/etc/hadoop/
scp core-site.xml node3:/export/server/hadoop-3.1.4/etc/hadoop/
hdfs --daemon start httpfs

2022-05-13

5.HttpFS默认服务

 2022-05-132022-05-13

2022-05-13

6.HttpFS访问指定用户身份 

自测访问: ​​http://node1.itcast.cn:14000/webhdfs/v1?op=LISTSTATUS​​​2022-05-13

自测访问: ​​http://node1.itcast.cn:14000/webhdfs/v1?user.name=root&op=LISTSTATUS​​​

2022-05-13


WebHDFS和HttpFS之间区别

区别一:

2022-05-132022-05-13

区别二:

  • 使用内置的WebHDFS REST API操作访问 

http://node1.itcast.cn:9870/webhdfs/v1/?op=LISTSTATUS  

端口由dfs.namenode.http-address指定。默认值9870。 

  • 使用HttpFS web Server 服务操作访问 

http://node1.itcast.cn:14000/webhdfs/v1?user.name=root&op=LISTSTATUS  

端口:14000 



传统文件系统常见文件存储格式

1.常见的文件格式有很多种,例如:JPEG文件用来存储图片、MP3文件用来存储音乐、DOC文件用来存储WORD文档。

2022-05-13


​BigData File Viewer工具
  • 一个跨平台(Windows,MAC,Linux)桌面应用程序,用于查看常见的大数据二进制格式,例如Parquet,ORC,AVRO等。支持本地文件系统,HDFS,AWS S3等。
    • github地址:https://github.com/Eugene-Mark/bigdata-file-viewer 2022-05-13

    3.BigData File Viewer用法 

    • 从官网发布页面下载可运行的jar或自己从源代码进行构建。
    • 调用 java -jar BigdataFileViewer-1.2.1-SNAPSHOT-jar-with-dependencies.jar运行
    • 通过“文件”->“打开”打开二进制格式的文件
    • 通过“文件”->“另存为”->“ CSV”转换为CSV文件 

    丰富的Hadoop文件存储格式

    1.行式存储、列式存储

    • 行式存储(Row-Based):同一行数据存储在一起。
    • 列式存储(Column-Based):同一列数据存储在一起。 

    2022-05-13

    • 优缺点 
    1. 行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。行适合插入、不适合查询。  
    2. 列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。列适合查询,不适合插入。 

    a)Text File 

    • 文本格式是Hadoop生态系统内部和外部的最常见格式。通常按行存储,以回车换行符区分不同行数据。
    • 最大缺点是,它不支持块级别压缩,因此在进行压缩时会带来较高的读取成本。
    • 解析开销一般会比二进制格式高,尤其是XML 和JSON,它们的解析开销比Textfile还要大。
    • 易读性好

    2022-05-13

    b)Sequence File 

    • Sequence File,每条数据记录(record)都是以key、value键值对进行序列化存储(二进制格式)。
    • 序列化文件与文本文件相比更紧凑,支持record级、block块级压缩。压缩的同时支持文件切分。
    • 通常把Sequence file作为中间数据存储格式。例如:将大量小文件合并放入到一个Sequence File中。 

    b)Sequence File--record 、block 

    • record就是一个kv键值对。其中数据保存在value中。 可以选择是否针对value进行压缩。
    • block就是多个record的集合。block级别压缩性能更好。 

    2022-05-13

    2022-05-13

    c)Avro File 

    • Apache Avro是与语言无关的序列化系统,由Hadoop创始人 Doug Cutting开发
    • Avro是基于行的存储格式,它在每个文件中都包含JSON格式的schema定义,从而提高了互操作性并允许schema的变化(删除列、添加列)。 除了支持可切分以外,还支持块压缩。
    • Avro是一种自描述格式,它将数据的schema直接编码存储在文件中,可以用来存储复杂结构的数据。
    • Avro直接将一行数据序列化在一个block中.
    • 适合于大量频繁写入宽表数据(字段多列多)的场景,其序列化反序列化很快。

    2022-05-13

    d)RCFile 

    • Hive Record Columnar File(记录列文件),这种类型的文件首先将数据按行划分为行组,然后在行组内部将数据存储在列中。很适合在数仓中执行分析。且支持压缩、切分
    • 但不支持schema扩展,如果要添加新的列,则必须重写文件,这会降低操作效率。 

    2022-05-13

    e)ORC File 

    • ORC File(Optimized Row Columnar)提供了比RC File更有效的文件格式。它在内部将数据划分为默认大小为250M的Stripe。每个条带均包含索引,数据和页脚。索引存储每列的最大值和最小值以及列中每一行的位置。
    • 它并不是一个单纯的列式存储格式,仍然是首先根据Stripe分割整个表,在每一个Stripe内进行按列存储。
    • ORC有多种文件压缩方式,并且有着很高的压缩比。文件是可切分(Split)的。
    • ORC文件是以二进制方式存储的,所以是不可以直接读取。 

    2022-05-13

    f)Parquet File 

    • Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目。
    • Parquet文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的。
    • 支持块压缩。 

    f)Parquet File--结构 

    • Parquet 的存储模型主要由行组(Row Group)、列块(Column Chuck)、页(Page)组成。
    • 在水平方向上将数据划分为行组,默认行组大小与 HDFS Block 块大小对齐,Parquet 保证一个行组会被一个 Mapper 处理。行组中每一列保存在一个列块中,一个列块具有相同的数据类型,不同的列块可以使用不同的压缩。Parquet 是页存储方式,每一个列块包含多个页,一个页是最小的编码的单位,同一列块的不同页可以使用不同的编码方式。
    • 文件的首位都是该文件的Magic Code,用于校验它是否是一个Parquet文件。

    2022-05-13


    扩展:大数据新一代存储格式Apache Arrow 

    1.Arrow简介 

    • Apache Arrow是一个跨语言平台,是一种列式内存数据结构,主要用于构建数据系统。
    • Apache Arrow在2016年2月17日作为顶级Apache项目引入。 

    2022-05-13

    • Arrow促进了许多组件之间的通信。
    • 极大的缩减了通信时候序列化、反序列化所浪费的时间。 

    2022-05-13

    2.Arrow如何提升数据移动性能 

    • 利用Arrow作为内存中数据表示的两个过程可以将数据从一种方法“重定向”到另一种方法,而无需序列化或反序列化。 例如,Spark可以使用Python进程发送Arrow数据来执行用户定义的函数。
    • 无需进行反序列化,可以直接从启用了Arrow的数据存储系统中接收Arrow数据。 例如,Kudu可以将Arrow数据直接发送到Impala进行分析。
    • Arrow的设计针对嵌套结构化数据(例如在Impala或Spark Data框架中)的分析性能进行了优化。 


    文件压缩测试体验

    1.压缩算法优劣指标 

    • 压缩比

    原先占100份空间的东西经压缩之后变成了占20份空间,那么压缩比就是5,显然压缩比越高越好。

    • 压缩/解压缩吞吐量(时间)
      每秒能压缩或解压缩多少MB的数据。吞吐量也是越高越好。
    • 压缩算法实现是否简单、开源
    • 是否为无损压缩。恢复效果要好。
    • 压缩后的文件是否支持split(切分) 
    Hadoop支持的压缩算法

    1.Hadoop支持的压缩算法

    • Haodop对文件压缩均实现org.apache.hadoop.io.compress.CompressionCodec接口。
    • 所有的实现类都在org.apache.hadoop.io.compress包下。 

     2022-05-13

    2.Hadoop支持的压缩对比 ​

    压缩格式

    工具

    算法

    文件扩展名

    是否可切分

    对应的编码解码器

    DE

    以上是关于2022-05-13 HDFS 数据存储与数据管理的主要内容,如果未能解决你的问题,请参考以下文章

    分布式数据存储与管理[HDFS+HBase]

    分布式数据存储与管理[HDFS+HBase]

    漫画解读HDFS存储原理(转载)

    云上大数据存储:探究 JuiceFS 与 HDFS 的异同

    HDFS数据存储与读写过程

    2.6 HDFS存储原理

    (c)2006-2024 SYSTEM All Rights Reserved IT常识