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


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

查看所有标签

猜你喜欢:

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

Bandit Algorithms for Website Optimization

Bandit Algorithms for Website Optimization

John Myles White / O'Reilly Media / 2013-1-3 / USD 19.99

This book shows you how to run experiments on your website using A/B testing - and then takes you a huge step further by introducing you to bandit algorithms for website optimization. Author John Myle......一起来看看 《Bandit Algorithms for Website Optimization》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具