-
Notifications
You must be signed in to change notification settings - Fork 3.3k
feat(ingest): add HBase source connector plugin #15257
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
feat(ingest): add HBase source connector plugin #15257
Conversation
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Bundle ReportChanges will increase total bundle size by 8.36kB (0.03%) ⬆️. This is within the configured threshold ✅ Detailed changes
Affected Assets, Files, and Routes:view changes for bundle: datahub-react-web-esmAssets Changed:
Files in
|
metadata-ingestion/setup.py
Outdated
| "glue = datahub.ingestion.source.aws.glue:GlueSource", | ||
| "sagemaker = datahub.ingestion.source.aws.sagemaker:SagemakerSource", | ||
| "hana = datahub.ingestion.source.sql.hana:HanaSource", | ||
| "hbase = datahub.ingestion.source.sql.hbase:HBaseSource", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
additional to the entry point, hbase dependencies should be set here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added ✅
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this rectangle shape may not fit well in the UI, have you checked?
a logo that fits better in a square/circle shape would look better
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resized to square
sgomezvillamor
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall looks good
I miss:
- unit/integration tests
- some minimal user docs in https://github.com/btkcodedev/datahub/tree/85649af65c0f1e3068d68633b3e983994710eea2/metadata-ingestion/docs/sources
|
Please, double check you followed steps defined here https://docs.datahub.com/docs/metadata-ingestion/adding-source Eg I miss updates in |
Changes Made:Backend:
Frontend:
Documentation:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hbase is not an sql database
so sources should not be in metadata-ingestion/src/datahub/ingestion/source/sql/
may you place them in metadata-ingestion/src/datahub/ingestion/source/hbase/?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Created dedicated src/datahub/ingestion/source/hbase/ directory
| self.connection = Hbase.Client(protocol) | ||
|
|
||
| # Open connection | ||
| transport.open() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should this be closed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
revamped connection lifecycle and now it's properly managed
| ) | ||
| auth_mechanism: Optional[str] = Field( | ||
| default=None, | ||
| description="Authentication mechanism (None, KERBEROS, or custom)", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we support kerberos in the current implementation?
what does custom mean?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed auth_mechanism field
| - Table properties and configuration | ||
| HBase is a distributed, scalable, big data store built on top of Hadoop. | ||
| This connector uses the HBase Thrift API to extract metadata. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code uses Thrift1 API but doesn't validate version. HBase supports both Thrift1 and Thrift2 with different APIs:
- Thrift1: Older, limited namespace support
- Thrift2: Newer, full namespace support
Current implementation works around Thrift1 limitations by parsing table names, but this is fragile.
Wouldn't it be better to go with Thrift2 directly?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also, have you considered happybase? it seems a very popular python lib for consuming hbase and it may save you from setting up thirft
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replaced raw Thrift implementation with happybase library
| default=True, | ||
| description="Include column families as schema metadata", | ||
| ) | ||
| max_column_qualifiers: int = Field( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this being used?
I haven't found code for sampling in this source
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed max_column_qualifiers field from configuration
sgomezvillamor
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Left some comments
Still main blocker is testing:
- unit tests for configuration validation
- unit tests for namespace/table discovery and schema field generation
- integration tests (with docker?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
v1 frontend was deprecated, so you can skip updating anything in datahub-web-react/src/app/ingest/source/
just keep udpates in datahub-web-react/src/app/ingestV2/
|
|
*Integration tests are in development - (facing some issues with docker) |


Closes #14733
Summary
Adds an HBase metadata ingestion plugin to DataHub to extract namespaces, tables, column families and schema metadata via the HBase Thrift API. Includes backend source implementation, plugin registration, UI config stubs, docs and minimal wiring to surface the connector in the ingestion UI.
Motivation
Support for HBase metadata ingestion so users can index HBase namespaces/tables into DataHub and make them discoverable, searchable and lineage-able.
What changed
Added backend source implementation
Registered plugin entrypoint
The connector is a StatefulIngestionSourceBase and supports:
Containers: HBase namespaces
Schema metadata: row key + column families / qualifiers
Deletion detection via stateful ingestion
Platform instance and env config
Thrift-based connection (Thrift / happybase recommended)
Compatibility / Risk
No breaking changes.
Requires Thrift-related dependencies and (optionally) UI assets.
If Thrift libs missing, connector logs a clear error and fails to connect.