内容简介:前期我们介绍了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对应配置),实例代码操作如下
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系列文章
参考
[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
欢迎关注“数据湖技术”公众号,更多精彩待续!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 没有废话的vue高级进阶( 三 ) 组件高级用法及最佳实践
- Linux 后台运行任务 nohup 结合 & 用法以及如何精准查找进程并 kill 后台任务实践
- AWK 的用法
- AWK基础用法
- UniversalImageLoader的用法总结
- SQLAlchemy框架用法详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。