[ 
https://issues.apache.org/jira/browse/HDDS-4977?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marton Elek updated HDDS-4977:
------------------------------
    Description: 
Based on the 
[discussion|https://lists.apache.org/thread.html/rf7dc7f417188103cd76cdc0536b11af8a089bb23e3faa388e82c7d23%40%3Cdev.ozone.apache.org%3E]
 on the dev list a Golang client can help the adoption of Apache Ozone in 
non-jvm environment.
Ozone go-client

Apache Ozone is an object store for Hadoop ecosystem and cloud-native 
environments. As it was originally developed as a Hadoop subproject it was 
implemented in Java language.

One of the power of Ozone compared to Hdfs that it can be used with multiple 
interfaces: it supports Hadoop Compatible File Systems, S3 compatible 
interfaces, and it also supports CSI specification (but today only with the 
help of 3rd party fuse driver.

These interfaces help to use Ozone from multiple type of environments, but 
Ozone provides only Java based SDK which makes harder the adoption for non JVM 
languages.

This Jira proposes to create a Go based Apache Ozone SDK and additional tools 
on top of it:

    • With the help of a Go SDK we can create easily native Fuse drivers which 
can be an additional option for the existing Ozone CSI driver (in addition to 
the existing, 3rd party S3 fuse drivers) 
    • With the help of the Go SDK we can create a native C library which can be 
used from many other languages (like Python or Rust)

*Use-cases / goals:*

* Provide Go SDK for Apache Ozone to connect to Om and Datanode for downloading 
/ uploading data and managing keys/buckets/volumes view the native Ozone RPC 
(Hadoop RPC and GRPC) protocols. This would be the re-implementation of Ozone 
client in golang
* Provide Fuse file system implementation to mount buckets to directories 
efficiently (long-term goal: use this fuse driver in Ozone CSI daemon)
* Create an adapter layer for a shared C library with the help of Ozone Go SDK 
which can be used from python/rust/c/c++. 

*Implementation details:*

*This is a full client side effort, no API change is required in Ozone side.*

The Go SDK would follow the design of the Java based Ozone Client:

    • We need low-level Om and Datanode (Grpc and Ratis) clients
    • And we can provide a higher level interface which uses those clients and 
provides better programming experience
    • As a first step, fuse driver can  be based (github.com/hanwen/go-fuse) 
which already implements the file-system like interface/abstract. This 
implementation would use the low-level clients of the Go SDK.
    • C library (and headers) also can be provided using the low-level API 
which can be tested with Python
    • A simple command line tool can be created (similar to ozone sh) which 
uses the higher level interface. It can be used to test the clients from 
similar approach as the Ozone main repository is tested (robotframework, 
docker-compose)

    • Goals for the first phase: Implement fully functional Fuse driver + CLI 
for non-secure, non-HA clusters. It would be enough to test the functionality 
in multiple environments (including testing it as an underlying implementation 
for the CSI driver)
    • In next phase we can incrementally implement HA support and security

In the current form, it’s not supposed to be released, and it should be clearly 
communicated that all of these elements are just experiments and poc. Once we 
have production ready SDK / Fuse driver / CLI we can start separate discussion 
about release lifecycle.

Initial features (poc) are demonstrated here: https://youtu.be/ouNxn9i5DcM

  was:
Based on the 
[discussion|https://lists.apache.org/thread.html/rf7dc7f417188103cd76cdc0536b11af8a089bb23e3faa388e82c7d23%40%3Cdev.ozone.apache.org%3E]
 on the dev list a Golang client can help the adoption of Apache Ozone in 
non-jvm environment.
Ozone go-client

Apache Ozone is an object store for Hadoop ecosystem and cloud-native 
environments. As it was originally developed as a Hadoop subproject it was 
implemented in Java language.

One of the power of Ozone compared to Hdfs that it can be used with multiple 
interfaces: it supports Hadoop Compatible File Systems, S3 compatible 
interfaces, and it also supports CSI specification (but today only with the 
help of 3rd party fuse driver.

These interfaces help to use Ozone from multiple type of environments but Ozone 
provides only Java based SDK which makes harder the adoption for non JVM 
languages.

This Jira proposes to create a Go based Apache Ozone SDK and additional tools 
on top of it:

    • With the help of a Go SDK we can create easily native Fuse drivers which 
can be an additional option for the existing Ozone CSI driver (in addition to 
the existing, 3rd party S3 fuse drivers) 
    • With the help of the Go SDK we can create a native C library which can be 
used from many other languages (like Python or Rust)

Implementation details:

The Go SDK would follow the design of the Java based Ozone Client:

    • We need low-level Om and Datanode (Grpc and Ratis) clients
    • And we can provide a higher level interface which uses those clients and 
provides better programming experience
    • As a first step, fuse driver can  be based (github.com/hanwen/go-fuse) 
which already implements the file-system like interface/abstract. This 
implementation would use the low-level clients of the Go SDK.
    • C library (and headers) also can be provided using the low-level API 
which can be tested with Python
    • A simple command line tool can be created (similar to ozone sh) which 
uses the higher level interface. It can be used to test the clients from 
similar approach as the Ozone main repository is tested (robotframework, 
docker-compose)

    • Goals for the first phase: Implement fully functional Fuse driver + CLI 
for non-secure, non-HA clusters. It would be enough to test the functionality 
in multiple environments (including testing it as an underlying implementation 
for the CSI driver)
    • In next phase we ca incrementally implement HA support and security

In the current form, it’s not supposed to be released, and it should be clearly 
communicated that all of these elements are just experiments and poc. Once we 
have production ready SDK / Fuse driver / CLI we can start separate discussion 
about release lifecycle.

Initial features (poc) are demostrated here: https://youtu.be/ouNxn9i5DcM


> Ozone go client and FUSE driver
> -------------------------------
>
>                 Key: HDDS-4977
>                 URL: https://issues.apache.org/jira/browse/HDDS-4977
>             Project: Apache Ozone
>          Issue Type: New Feature
>            Reporter: Marton Elek
>            Priority: Major
>
> Based on the 
> [discussion|https://lists.apache.org/thread.html/rf7dc7f417188103cd76cdc0536b11af8a089bb23e3faa388e82c7d23%40%3Cdev.ozone.apache.org%3E]
>  on the dev list a Golang client can help the adoption of Apache Ozone in 
> non-jvm environment.
> Ozone go-client
> Apache Ozone is an object store for Hadoop ecosystem and cloud-native 
> environments. As it was originally developed as a Hadoop subproject it was 
> implemented in Java language.
> One of the power of Ozone compared to Hdfs that it can be used with multiple 
> interfaces: it supports Hadoop Compatible File Systems, S3 compatible 
> interfaces, and it also supports CSI specification (but today only with the 
> help of 3rd party fuse driver.
> These interfaces help to use Ozone from multiple type of environments, but 
> Ozone provides only Java based SDK which makes harder the adoption for non 
> JVM languages.
> This Jira proposes to create a Go based Apache Ozone SDK and additional tools 
> on top of it:
>     • With the help of a Go SDK we can create easily native Fuse drivers 
> which can be an additional option for the existing Ozone CSI driver (in 
> addition to the existing, 3rd party S3 fuse drivers) 
>     • With the help of the Go SDK we can create a native C library which can 
> be used from many other languages (like Python or Rust)
> *Use-cases / goals:*
> * Provide Go SDK for Apache Ozone to connect to Om and Datanode for 
> downloading / uploading data and managing keys/buckets/volumes view the 
> native Ozone RPC (Hadoop RPC and GRPC) protocols. This would be the 
> re-implementation of Ozone client in golang
> * Provide Fuse file system implementation to mount buckets to directories 
> efficiently (long-term goal: use this fuse driver in Ozone CSI daemon)
> * Create an adapter layer for a shared C library with the help of Ozone Go 
> SDK which can be used from python/rust/c/c++. 
> *Implementation details:*
> *This is a full client side effort, no API change is required in Ozone side.*
> The Go SDK would follow the design of the Java based Ozone Client:
>     • We need low-level Om and Datanode (Grpc and Ratis) clients
>     • And we can provide a higher level interface which uses those clients 
> and provides better programming experience
>     • As a first step, fuse driver can  be based (github.com/hanwen/go-fuse) 
> which already implements the file-system like interface/abstract. This 
> implementation would use the low-level clients of the Go SDK.
>     • C library (and headers) also can be provided using the low-level API 
> which can be tested with Python
>     • A simple command line tool can be created (similar to ozone sh) which 
> uses the higher level interface. It can be used to test the clients from 
> similar approach as the Ozone main repository is tested (robotframework, 
> docker-compose)
>     • Goals for the first phase: Implement fully functional Fuse driver + CLI 
> for non-secure, non-HA clusters. It would be enough to test the functionality 
> in multiple environments (including testing it as an underlying 
> implementation for the CSI driver)
>     • In next phase we can incrementally implement HA support and security
> In the current form, it’s not supposed to be released, and it should be 
> clearly communicated that all of these elements are just experiments and poc. 
> Once we have production ready SDK / Fuse driver / CLI we can start separate 
> discussion about release lifecycle.
> Initial features (poc) are demonstrated here: https://youtu.be/ouNxn9i5DcM



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to