Add user guide for pluggable storage for realtime table
Add user guide for pluggable storage for realtime table.
Pluggable Storage
=================
-Pinot enables its users to write a PinotFS abstraction layer to store data in a source of truth data layer of their
-choice for offline segments. We do not yet have support for realtime consumption in deep storage.
+Pinot enables its users to write a PinotFS abstraction layer to store data in a data layer of their choice for realtime and offline segments.
Some examples of storage backends(other than local storage) currently supported are:
* `HadoopFS <https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html>`_
* `Azure Data Lake <https://azure.microsoft.com/en-us/solutions/data-lake/>`_
-If the above two filesystems do not meet your needs, please feel free to get in touch with us,
-and we can help you out.
+If the above two filesystems do not meet your needs, you can extend the current `PinotFS <https://github.com/apache/incubator-pinot/blob/master/pinot-common/src/main/java/org/apache/pinot/filesystem/PinotFS.java>`_ to customize for your needs.
New Storage Type implementation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -39,11 +37,32 @@ In order to add a new type of storage backend (say, Amazon s3) implement the fol
S3FS extends `PinotFS <https://github.com/apache/incubator-pinot/blob/master/pinot-common/src/main/java/org/apache/pinot/filesystem/PinotFS.java>`_
-Configurations
+Configurations for Realtime Tables
^^^^^^^^^^^^^^
-These properties for the stream implementation are to be set in your controller and server configurations.
+The example here uses the existing org.apache.pinot.filesystem.HadoopPinotFS to store realtime segments in a HDFS filesytem. In the Pinot controller config, add the following new configs:
+
+.. code-block:: none
+
+ "controller.data.dir": "SET_TO_YOUR_HDFS_ROOT_DIR"
+ "controller.local.temp.dir": "SET_TO_A_LOCAL_FILESYSTEM_DIR"
+ "pinot.controller.storage.factory.class.hdfs": "org.apache.pinot.filesystem.HadoopPinotFS"
+ "pinot.controller.storage.factory.hdfs.hadoop.conf.path": "SET_TO_YOUR_HDFS_CONFIG_DIR"
+ "pinot.controller.storage.factory.hdfs.hadoop.kerberos.principle": "SET_IF_YOU_USE_KERBEROS"
+ "pinot.controller.storage.factory.hdfs.hadoop.kerberos.keytab": "SET_IF_YOU_USE_KERBEROS"
+ "controller.enable.split.commit": "true"
+
+In the Pinot controller config, add the following new configs:
+
+.. code-block:: none
+
+ "pinot.server.instance.enable.split.commit": "true"
+
-Pinot supports different kinds of storage; eg: NFS, HDFS, ADL. In order to get this working with your cluster, you will need to configure the following.
+Note: currently there is a bug in the controller (`issue <https://github.com/apache/incubator-pinot/issues/3847>`), for now you can cherrypick the PR https://github.com/apache/incubator-pinot/pull/3849 to fix the issue as tested already. The PR is under review now.
+
+Configurations for Offline Tables
+^^^^^^^^^^^^^^
+These properties for the stream implementation are to be set in your controller and server configurations.
In your controller and server configs, please set the FS class you would like to support. pinot.controller.storage.factory.class.${YOUR_URI_SCHEME} to the full path of the FS class you would like to include
