12

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

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzU5OTQ1MDEzMA%3D%3D&%3Bmid=2247487434&%3Bidx=2&%3Bsn=7b48a06862cb0ead6baa6472f32a79d9
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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对应配置),实例代码操作如下

EFziqqj.png!web

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

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

jQRNbyv.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK