天天看点

c++ set用法_Ozone实践如何用Hadoop的用法来玩转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拷贝至你的项目或者客户端中。

fs.o3fs.impl  org.apache.hadoop.fs.ozone.BasicOzoneFileSystem  fs.defaultFS  o3fs://bucket.volume           

需要注意的是各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对应配置),实例代码操作如下

c++ 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.pyimport pyarrow as paimport pyarrow.parquet as pqfs = 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

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

c++ set用法_Ozone实践如何用Hadoop的用法来玩转Ozone