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>
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。
2.WebHDFS使用
- 经常使用的HDFS Web UI,其文件浏览功能底层就是基于WebHDFS来操作HDFS实现的。
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=...
4.HTTP RESTful API参数
5.基于HTTP RESTful API操作演示
- 提前安装好Postman测试工具。也可以直接在浏览器地址栏中输入测试。
- 请求URL:http://node1.itcast.cn:9870/webhdfs/v1/?op=LISTSTATUS
- 该操作表示要查看根目录下的所有文件以及目录,相当于 hadoop fs -ls /
- 读取指定文件内容。 http://node1.itcast.cn:9870/webhdfs/v1/itcast/wordcount/in/word.txt?op=OPEN&noredirect=false 其中noredirect参数用于指定是否重定向到一个datanode,在该节点可以读取文件数据。
基于RESTful的代理服务-HttpFS
1.HttpFS概述
- HttpFS 是一个提供RESTful 接口的网关的服务器,该网关支持所有HDFS文件系统操作。
- 对于文件CURD的操作全部提交给HttpFS服务进行中转,然后由HttpFS去跟HDFS集群交互。
- HttpFS是一个独立于HDFS的服务,若使用需要手动安装。
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
5.HttpFS默认服务
6.HttpFS访问指定用户身份
自测访问: http://node1.itcast.cn:14000/webhdfs/v1?op=LISTSTATUS
自测访问: http://node1.itcast.cn:14000/webhdfs/v1?user.name=root&op=LISTSTATUS
WebHDFS和HttpFS之间区别
区别一:
区别二:
- 使用内置的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文档。
BigData File Viewer工具
一个跨平台(Windows,MAC,Linux)桌面应用程序,用于查看常见的大数据二进制格式,例如Parquet,ORC,AVRO等。支持本地文件系统,HDFS,AWS S3等。
- github地址:https://github.com/Eugene-Mark/bigdata-file-viewer
3.BigData File Viewer用法
- 从官网发布页面下载可运行的jar或自己从源代码进行构建。
- 调用 java -jar BigdataFileViewer-1.2.1-SNAPSHOT-jar-with-dependencies.jar运行
- 通过“文件”->“打开”打开二进制格式的文件
- 通过“文件”->“另存为”->“ CSV”转换为CSV文件
丰富的Hadoop文件存储格式
1.行式存储、列式存储
- 行式存储(Row-Based):同一行数据存储在一起。
- 列式存储(Column-Based):同一列数据存储在一起。
- 优缺点
- 行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。行适合插入、不适合查询。
- 列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。列适合查询,不适合插入。
a)Text File
- 文本格式是Hadoop生态系统内部和外部的最常见格式。通常按行存储,以回车换行符区分不同行数据。
- 最大缺点是,它不支持块级别压缩,因此在进行压缩时会带来较高的读取成本。
- 解析开销一般会比二进制格式高,尤其是XML 和JSON,它们的解析开销比Textfile还要大。
- 易读性好
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级别压缩性能更好。
c)Avro File
- Apache Avro是与语言无关的序列化系统,由Hadoop创始人 Doug Cutting开发
- Avro是基于行的存储格式,它在每个文件中都包含JSON格式的schema定义,从而提高了互操作性并允许schema的变化(删除列、添加列)。 除了支持可切分以外,还支持块压缩。
- Avro是一种自描述格式,它将数据的schema直接编码存储在文件中,可以用来存储复杂结构的数据。
- Avro直接将一行数据序列化在一个block中.
- 适合于大量频繁写入宽表数据(字段多列多)的场景,其序列化反序列化很快。
d)RCFile
- Hive Record Columnar File(记录列文件),这种类型的文件首先将数据按行划分为行组,然后在行组内部将数据存储在列中。很适合在数仓中执行分析。且支持压缩、切分
- 但不支持schema扩展,如果要添加新的列,则必须重写文件,这会降低操作效率。
e)ORC File
- ORC File(Optimized Row Columnar)提供了比RC File更有效的文件格式。它在内部将数据划分为默认大小为250M的Stripe。每个条带均包含索引,数据和页脚。索引存储每列的最大值和最小值以及列中每一行的位置。
- 它并不是一个单纯的列式存储格式,仍然是首先根据Stripe分割整个表,在每一个Stripe内进行按列存储。
- ORC有多种文件压缩方式,并且有着很高的压缩比。文件是可切分(Split)的。
- ORC文件是以二进制方式存储的,所以是不可以直接读取。
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文件。
扩展:大数据新一代存储格式Apache Arrow
1.Arrow简介
- Apache Arrow是一个跨语言平台,是一种列式内存数据结构,主要用于构建数据系统。
- Apache Arrow在2016年2月17日作为顶级Apache项目引入。
- Arrow促进了许多组件之间的通信。
- 极大的缩减了通信时候序列化、反序列化所浪费的时间。
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包下。
2.Hadoop支持的压缩对比
压缩格式 | 工具 | 算法 | 文件扩展名 | 是否可切分 | 对应的编码解码器 |
DE 以上是关于2022-05-13 HDFS 数据存储与数据管理的主要内容,如果未能解决你的问题,请参考以下文章 |