Ozone实践|如何用Hadoop的用法来玩转Ozone

栏目: IT技术 · 发布时间: 4年前

内容简介:前期我们介绍了ozone的基本概念以及Raft的实现、K8S上的部署。这期我们介绍下如何用hadoop的java、python api及命令行去使用ozone。ozone作为对象存储,它的出现主要是为了解决HDFS的扩展性问题。出于成本考虑,hdfs之前庞大的用户群体中,有的人并不希望改变其原有的用法。其实从ozone设计之初社区就已经考虑该问题,并实现了Ozone FileSystem兼容了hdfs的api。将集群中的hdfs替换成ozone之后用户的应用程序及用法习惯几乎可以不改变。本文主要介绍以下两部

1 简介

前期我们介绍了ozone的基本概念以及Raft的实现、K8S上的部署。这期我们介绍下如何用hadoop的 java 、python api及命令行去使用ozone。

ozone作为对象存储,它的出现主要是为了解决HDFS的扩展性问题。出于成本考虑,hdfs之前庞大的用户群体中,有的人并不希望改变其原有的用法。其实从ozone设计之初社区就已经考虑该问题,并实现了Ozone FileSystem兼容了hdfs的api。将集群中的hdfs替换成ozone之后用户的应用程序及用法习惯几乎可以不改变。本文主要介绍以下两部分内容:

  • Java客户端及 shell 基于o3fs的配置和使用

  • python客户端(pyarrow)的配置和使用

  • 社区关于OzoneFS的最新动态

本文使用的各组件版本为:

hadoop-2.7.5(hadoop3.0以上配置有所不同)

ozone-0.5.0

pyarrow-0.15.1

2 Java客户端及shell基于o3fs的配置和使用

2.1 ozone o3fs的配置

ozone的安装部署这里不做单独介绍(可参考官方部署文档)。ozone目前是将hdfs的fs.defaultFS挂载到某个bucket下,该bucket即为用户的根目录。所以首先我们要在ozone中创建对应的volume和bucket。

ozone sh volume create /volume

ozone sh bucket create /volume/bucket

然后在原先hadoop项目或客户端的core-site.xml中添加如下内容,将hdfs的文件系统换成o3fs。注意此时需要把ozone-site.xml拷贝至你的项目或者客户端中。

<property>

<name>fs.o3fs.impl</name>

<value>org.apache.hadoop.fs.ozone.BasicOzoneFileSystem</value>

</property>

<property>

<name>fs.defaultFS</name>

<value>o3fs://bucket.volume</value>

</property>

需要注意的是各hadoop版本对应的o3fs impl不同,具体对应关系可参考下表:

Hadoop version OzoneFileSystem implementation
3.2 org.apache.hadoop.fs.ozone.OzoneFileSystem
3.1 org.apache.hadoop.fs.ozone.OzoneFileSystem
2.9 org.apache.hadoop.fs.ozone.BasicOzoneFileSystem
2.7 org.apache.hadoop.fs.ozone.BasicOzoneFileSystem

最后需要将依赖的ozone-filessystem.jar文件添加到classpath中:

export HADOOP_CLASSPATH=$OZONE_HOME/share/ozone/lib/hadoop-ozone-filesystem-lib-legacy-$OZONE_VERSION.jar:$OZONE_HOME/share/ozone/lib/hadoop-ozone-datanode-$OZONE_VERSION.jar:$HADOOP_CLASSPATH

2.2 ozone o3fs的使用

配置完成后即可用过原生的hdfs命令及api访问ozone。例如用shell访问如下:

hdfs dfs -ls o3fs://bucket.volume/

hdfs dfs -mkdir o3fs://bucket.volume/test

使用api访问时行为也不需要发生改变(可以将配置文件放入工程,或者在代码中手动set对应配置),实例代码操作如下

Ozone实践|如何用Hadoop的用法来玩转Ozone

Configuration conf = new Configuration();

//conf.set需要的配置

FileSystem fs = FileSystem.get( conf);

fs.createNewFile(new Path("o3fs://bucket.volume/test"));

3 python 客户端(pyarrow)的配置和使用

3.1 pyarrow部署及配置

pyarrow中使用于python封装了一套操作hdfs的接口,该接口通过调用libhdfs3(使用C实现),而libhdfs3又是通过调用hdfs/ozone FileSystem的java接口实现。因此在部署pyarrow时同样需要配置部署o3fs。整个部署过程与前面 2.1 ozone o3fs的配置 一致。配置完成后可直接pip安装pyarrow。

pip install pyarrow

3.2 pyarrow示例代

如下示例保存后直接执行python test.py即可,更多pyarrow的接口介绍及用法可以参考文末参考[1].

//test.py

import pyarrow as pa

import pyarrow.parquet as pq


fs = pa.hdfs.connect(host='o3fs://bucket.volume', port={your_port}, user={username})

rootpath='/'

print(fs.ls(rootpath))

4 社区关于OzoneFS的最新动态

目前通过o3fs访问ozone同一时间只能指定一个bucket。如果需要访问其他bucket,则需要手动修改fs.defaultFS中的bucket。当前ozone社区正在实现新的ofs接口(HDDS-2665,当前整体进度60%左右),主要目的是允许用户同时访问到所有的bucket。

欢迎阅读其他Ozone系列文章

Hadoop原生对象存储Ozone

聊一聊Ozone如何高效利用Raft机制

Ozone on K8S

参考

[1]http://arrow.apache.org/docs/python/filesystems_deprecated.html#hdfs-api

[2]https://issues.apache.org/jira/browse/HDDS-2665

[3]https://issues.apache.org/jira/browse/HDDS-2443

[4]https://hadoop.apache.org/ozone/docs/0.4.0-alpha/ozonefs.html

欢迎关注“数据湖技术”公众号,更多精彩待续!

Ozone实践|如何用Hadoop的用法来玩转Ozone


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

中标

中标

阁策 / 四川人民出版社 / 2019-3-1 / 58.00元

一部IT销售的血泪史 一幅招投标人物群像图一起来看看 《中标》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具