NiFi 2 removed components: Hive, HBase, Kudu, Cassandra and Solr

If your NiFi flows use Hive, HBase, Kudu, Cassandra, Couchbase, Solr or Atlas lineage components, they will not carry over to NiFi 2 as they are. This page covers how to find them, pick replacements, and decide whether to keep a 1.x island.

On this page

Why NiFi 2 flows that use Hive or HBase need a plan before upgrade

If your NiFi 1.x estate has flows that write to Hive, HBase, Kudu, Cassandra or Solr, plan for those flows before you upgrade. None of these components appear in the NiFi 2.12.0 components index, so each flow that uses them must be replaced with a different pattern or retired. The NiFi deprecation list already flags several of them in 1.x, including PutHive3QL, PutHive3Streaming, SelectHive3QL, PutHBaseRecord, PutKudu, PutCassandraRecord, QueryCassandra and PutORC. Because the 1.x line is nearing its end, leaving these flows untouched is not a long-term option. Start by inventorying which processors are in use, which process groups contain them, and which downstream systems depend on their output. Check the NiFi deprecated components list against your own flows rather than relying on memory of what you built.

The supported route runs through 1.x first. The NiFi migration guidance requires upgrading to NiFi 1.27.0 before moving to 2.0.0, and it changes the flow configuration file from flow.xml.gz to flow.json.gz. That means the component replacement work is not optional at the end of the journey. A flow that still depends on a removed processor will not load cleanly on NiFi 2, so the sequence matters: confirm the 1.27.0 step, then decide per flow whether to replace, move, or retire it before the 2.x cutover. Confirm the exact upgrade steps for your current version with the migration guidance, since your starting point determines how many hops you need.

The reason the path cannot stop at 1.x is structural. The NiFi project has stated that the 1.x line cannot be maintained further because it depends on Jetty 9.4, Spring Framework 5.3 and AngularJS 1.8, none of which can be upgraded within that line. Staying on 1.x therefore means running a platform that will not receive the security and dependency updates you need. Some organizations consider keeping a 1.x island for flows that depend on Hadoop or NoSQL stores while they are rebuilt. That choice carries its own risk, which the sections on the 1.x island and the replacement patterns cover in detail.

Which removed components affect your flows and what to do

This table lists the component families from NiFi's deprecation list that do not appear in the NiFi 2.12.0 components index, with the release in which each was deprecated, what it means for a flow, and the action to plan. Absence from the 2.12.0 components index is the basis for treating these components as removed, so confirm each one in your own flows before you plan the cutover.

Component familyDeprecated inImpact on your flowsAction needed
Hive (PutHive3QL, PutHive3Streaming, SelectHive3QL)1.26.0Flows that write to or read from Hive tables stop having a shipped processor in NiFi 2.Find each Hive processor, then choose a replacement path such as a supported database or lakehouse processor. Confirm the target in the components index.
HBase (PutHBaseRecord and other HBase components)1.29.0HBase reads and writes have no shipped NiFi 2 processor, so these flows fail to load or run.List every HBase processor and its target tables. Plan a replacement write path and test record mapping against the new target.
Kudu (PutKudu)1.28.0Flows that load Kudu tables lose their processor in NiFi 2.Identify Kudu write paths and downstream consumers. Decide whether the data moves to another store or stays on a 1.x island.
Cassandra (PutCassandraRecord, QueryCassandra)1.26.0Cassandra writes and queries are not shipped in NiFi 2, which affects enrichment lookups and inserts.Map each Cassandra query to its caller. Redesign enrichment lookups with a supported source and retest error handling.
Couchbase components1.27.0Couchbase reads and writes are not in the NiFi 2.12.0 components index.Inventory Couchbase controller services and processors. Rebuild the integration on a supported client or source.
SolrConfirm in NiFi deprecation listSolr indexing and query flows are not in the NiFi 2.12.0 components index, so they need a replacement before upgrade.Confirm the exact deprecated Solr components in the deprecation list. Plan the index target and the cutover order.
PutORC1.26.0ORC file writes lose their processor, which affects lakehouse and file landing flows.Check downstream readers of ORC output. Choose a supported columnar format or keep the writer on a 1.x island.
ReportLineageToAtlas1.26.0Lineage reporting to Apache Atlas stops, which can break governance records that depend on it.Confirm which governance tools read Atlas lineage. Agree the replacement reporting method with the owners before cutover.

How to find every removed component in your flows

This sequence produces a complete, dated inventory of every flow element that uses a Hive, HBase, Kudu, Cassandra, Couchbase, Solr, ORC or Atlas component, so you know which flows must be replaced or retired before a NiFi 2 move. It covers the flow files, the version control history, the controller and reporting layers, and the parameter contexts that can hide references.

  1. Confirm the removed component list first

    Before searching, build the list of component type names to look for. Use the NiFi deprecated components page, which lists the Hive 3 processors deprecated in 1.26.0, PutKudu from 1.28.0, the HBase components from 1.29.0, the Cassandra processors and ORC writer from 1.26.0, the Couchbase components from 1.27.0 and ReportLineageToAtlas from 1.26.0. Then check each name against the NiFi components index for 2.12.0, where none of these components appear. Record the exact class names and the version each was deprecated in, so the inventory can be reused in later upgrade planning. Done when you have a written list of type names that an engineer on the team has reviewed.

  2. Export every process group and template

    A platform engineer with read access to the 1.x instance exports each top-level process group as JSON and collects any XML templates still stored on the instance, keeping them in a single read-only folder with the date of export. Include disabled and stopped process groups, because they are still part of what must be migrated. Also export the current flow.xml.gz from each node or from the cluster's primary node, and note the NiFi version and cluster name in the folder. Done when every process group on the canvas has a file in the folder and the count matches what the canvas shows.

  3. Search exported definitions for component type names

    Run a text search across the exported JSON files and the decompressed flow.xml.gz for each type name from your list, such as PutHive3QL, PutHBaseRecord, PutKudu, PutCassandraRecord, QueryCassandra, PutORC and ReportLineageToAtlas, plus the Couchbase and Solr class names. Search for both the short name and the fully qualified class name, since the exported form can differ. Record the file, the process group path and the component name for every hit. Done when each search term has a result or a recorded zero count, and you have a hit list with group paths.

  4. Check nested process groups and parameter contexts

    Search results can miss components inside nested process groups, so confirm that each exported file covers the full hierarchy, including child groups that appear only when expanded in the UI. Then review the parameter contexts attached to the groups. Hive connection strings, HBase configuration paths, Cassandra contact points and Kudu master addresses are often stored as parameters, and a processor may show only a parameter reference. Record each parameter that points to one of these systems so the reference can be traced back to the processor that uses it. Done when every hit is traced to a group path and every parameter linked to a removed system is listed.

  5. Review Registry-versioned flows and controller services

    Flows under version control can differ from what is running on the canvas. Compare each versioned process group with its registry version, and identify any local changes that have not been committed. Include controller services in the search, since services such as Hive connection pools or Cassandra session services can exist without a processor on the canvas and still need replacement. Confirm which registry or repository holds each versioned flow, because that decides where the replacement must be committed. Done when every versioned group is marked as in sync or out of sync, and every controller service linked to a removed system is listed.

  6. Check reporting tasks for Atlas lineage

    Reporting tasks run outside the flow canvas, so they are easy to miss. Open the controller settings and list every reporting task, whether running, stopped or disabled. Look specifically for ReportLineageToAtlas and any other reporting task that sends data to a removed system. Note the Atlas endpoint and the owning team for each task, because stopping an Atlas task on the 1.x instance changes what lineage is captured. Done when every reporting task has a line in the inventory, and each Atlas task is identified with its owner.

  7. Include disabled and unused flows in the count

    Do not exclude a flow because it is disabled, stopped, seasonal or believed to be unused. A dormant process group can be restarted during a migration, and a disabled reporting task can be re-enabled by mistake. Mark each such item with its status and the last recorded run time from the provenance or log history where available. Ask the owning team to confirm whether each one should be migrated, replaced or retired. Done when every item in the hit list has a status and an owner decision field, even if the decision is still open.

  8. Close the inventory with a signed-off hit list

    Combine the search hits, parameter references, controller services, versioned-flow status and reporting tasks into one table with one row per affected component. Each row should name the flow, group path, component, registry status, owner and disposition: replace, retire or keep on a 1.x island. Have a second engineer repeat a sample of the searches to confirm the results match. The output is a complete inventory that the replacement planning can work from. Done when the table is reviewed by the platform and application owners and the count of rows is recorded.

Replacement patterns for Hive, HBase, Kudu, Cassandra and Solr

Hive and ORC workloads are usually replaced by writing to the target warehouse or lakehouse table through a JDBC or lakehouse processor from the NiFi 2 integration bundles. The deprecated Hive 3 processors (PutHive3QL, PutHive3Streaming, SelectHive3QL) and PutORC do not carry over as-is, so the new path is a different write mechanism with its own type mapping and transaction behavior. Confirm the exact processor names and their availability in the NiFi components index before you design around them.

  • Type mapping: Hive column types, ORC schema and the target table's types rarely match one to one. Decimal precision, timestamps and nullable fields are the usual sources of silent change.
  • Batching and transactions: Batch size and commit points differ between the old and new processors, which changes what a partial failure leaves behind in the target.
  • Error routing: Confirm which failures route to retry, which to failure, and whether a failed batch can be replayed without duplicating rows.
  • Table format: Check whether the target table format supports the write pattern you need, including upserts or merges if the old flow relied on them.
  • Credentials: Move Kerberos-based Hive access to the authentication your target platform supports.

Before cutover, run both paths against a copy of the table and compare row counts, types and rejected records for a representative window.

What to prepare before you replace or isolate these flows

Removed components such as the Hive, HBase, Kudu, Cassandra and Solr processors are usually found late, after a flow has already been moved. The cards below cover the work that makes replacement or isolation predictable, from knowing every flow that touches these systems to getting sign-off from the teams that own the destinations.

Full flow inventory with owners

List every process group, including nested and disabled ones, that contains a removed component or a reference to one. Record the flow owner, the destination system, the schedule and the business purpose for each. Search exported flow definitions and parameter contexts as well as the canvas, because a removed processor can sit inside a process group that nobody has opened in months. Without named owners, nobody can approve the cutover decision for a given flow. Ask each owner to confirm whether the flow is still needed at all before any replacement work starts.

Backups of flow.xml.gz and 1.x configuration

Before any change, take a copy of flow.xml.gz along with nifi.properties, bootstrap.conf, the authorizers file, and the sensitive properties key. Store them outside the NiFi host with a restore procedure that has been tested. Keep the 1.x installation binaries and custom NARs as well, so the original state can be rebuilt quickly. Note that the migration path to NiFi 2 changes the flow file format, so a backup is the only clean way back if a conversion goes wrong.

Test environment on the target release

Stand up a non-production NiFi on the exact NiFi 2 release you plan to run, using a copy of the production flow. Confirm which processors fail validation, which controller services are missing, and which replacement components need configuration. Test against non-production copies of each destination, such as a test Hive metastore or a test HBase cluster, so that writes do not reach live data. Record the version used so that test results can be tied to a specific release.

Data reconciliation baselines per destination

For each destination, capture a baseline before the cutover: row counts, key ranges, latest timestamps, and a sample of checksummed records. Define the comparison query or script and who runs it. Running old and new paths in parallel for a set period lets you compare outputs before retiring the 1.x flow. Confirm how duplicates and partial writes are handled, since a flow stopped midway through a Hive or Cassandra write can leave data that is hard to identify later.

Credentials and Kerberos dependencies

Removed components often authenticate with Kerberos keytabs, service principals or database passwords held in parameter contexts or the sensitive properties store. List each credential, the system it unlocks, its owner and its rotation schedule. Check whether any Kerberos login depends on the SPNEGO provider, which NiFi documents as deprecated. Replacement processors may need different connection services, so confirm the new authentication method with the destination team before you build it.

Sign-off from destination owners

Each destination system has an owner who can confirm the schema, the expected write pattern and the acceptable downtime. Get written approval from those owners for the replacement design, the reconciliation method and the cutover window. Ask them to name who will validate data after cutover, and what they need to see before the old path is switched off. Sign-off from the flow team alone does not cover a change that alters what the destination receives.

When keeping a NiFi 1.x island is a defensible choice

Keeping a NiFi 1.x island is defensible only when a small set of legacy flows that use Hive, HBase, Kudu or Cassandra components cannot be rebuilt in NiFi 2 before a cutover date, and when the business can accept running software that no longer receives upstream fixes. The island is a transition tool, not a place to park flows. The NiFi project states that 1.x cannot be maintained further because it depends on Jetty 9.4, Spring Framework 5.3 and AngularJS 1.8, which cannot be upgraded within that line. Every vulnerability in those components becomes your problem to mitigate, and the 1.x line is not a route to a supported runtime for those flows.

If you keep the island, treat it as a controlled system with conditions attached. Confirm with your security team which network paths the 1.x instance needs, then restrict it to the specific sources and sinks its flows touch, with no general internet egress and no shared access to the NiFi 2 cluster. Decide in advance who approves patch exceptions, what compensating controls apply to the 1.x UI and API, and how credentials for the Hive, HBase or Cassandra endpoints are rotated. Check that your scanning and asset inventory still cover the instance, since an isolated server that falls out of monitoring is a common way legacy flows outlive their plan.

Write the exit condition down before the island goes live. A useful record names each remaining flow, the NiFi 2 replacement or the decision to retire it, the owner, and a retirement date agreed with the business owner of the data. It also names the trigger that ends the exception early, such as a vendor end-of-life notice for the target store or a change to the data contract. Review the list at each NiFi 2 minor upgrade, because a flow that was blocked by a removed component may become straightforward once its target system is migrated. An island without a dated exit condition tends to become permanent infrastructure.

Sequence for replacing removed components on the way to NiFi 2

This sequence moves each flow that depends on Hive, HBase, Kudu, Cassandra, Couchbase, Solr or Atlas onto a tested replacement, so that no data path is switched off before its successor has been reconciled and can be reversed.

  1. Inventory every flow that uses removed components

    Export each 1.x flow definition and search it for processors and controller services from the deprecated list, including Hive 3 query and streaming processors, HBase record writers, PutKudu, Cassandra processors, Couchbase components, PutORC, ReportLineageToAtlas and any Solr usage. Record the process group, the destination system, the owning team and whether the component sits on a live path or a dormant one. The owner of each flow signs off the list. Done when every component reference is listed against a flow and an owner, and nothing is left as an unnamed 'other' item.

  2. Classify each path and choose a replacement pattern

    For each inventoried path, decide whether the destination is retired, moved to a supported NiFi 2 processor bundle that writes to the same system, or moved to a different target that your data platform team already runs. Note the record format, the write semantics (append, upsert, delete), the schedule and any dependency on Atlas lineage or Solr queries. Paths that cannot be replaced directly are marked for a design decision before build. Done when each path has a named replacement or a retirement decision recorded with its approver.

  3. Build replacement flows on a non-production NiFi 2

    Stand up a non-production NiFi 2 instance on Java 21, with the same parameter values as production but with test destinations. Build each replacement flow there, including its error relationships and retry behavior, and version it in your flow registry. Confirm that the 1.x flow definitions were moved to the flow.json.gz format through the 1.27.0 intermediate release before import, since the migration guidance requires both steps. Done when each replacement flow runs end to end against test data and its definition is stored in version control.

  4. Run the 1.x and 2.x paths in parallel

    Keep the original 1.x path and the replacement running against the same source for a period you agree in advance, writing to separate staging targets. Compare row counts, key sets, field values and failure counts between the two outputs, and review provenance events for the replacement to confirm that every input reaches a terminal state. Investigate and fix every difference before continuing, and record which differences were expected. Done when the reconciliation report shows no unexplained gaps for an agreed window and the owner accepts it in writing.

  5. Set a rollback point before each cutover

    Before switching a destination, take a copy of the 1.x flow definition, the parameter contexts, the controller service configuration, the state of any processors that hold state, and a backup of the target data where the replacement writes to it. Label the copy with the cutover date and the destination name. Confirm that the backup can be restored into a test instance. Done when the restore has been rehearsed and the rollback steps are written down for the on-call team.

  6. Cut over one destination at a time

    Move one destination to its replacement in a planned change window. Stop the 1.x path for that destination, start the NiFi 2 replacement, and watch the queues, error counts and destination writes until the owner confirms the output. Do not move a second destination until the first has been stable for an agreed period. Done when the owner signs off the cutover and the change record links to the rollback point.

  7. Keep the 1.x flow disabled but recoverable

    After each cutover, disable the original 1.x process group and keep it in place with its configuration and state intact, rather than deleting it. Record in the runbook when the retained copy can be removed and who decides. Confirm that a disabled flow cannot start by accident and that its credentials and sensitive values are still protected. Done when every retired path is marked disabled in the inventory with a named decision date and the retained copy is verified in storage.

What makes removed-component work take longer

This table compares the factors that expand removed-component work, why each one adds effort, and what to confirm before estimating. Read it as a checklist: the more rows that apply to your flows, the more likely the work moves from a component swap to a redesign with a destination owner, testing and a cutover plan.

DriverWhy it adds effortWhat to confirm
Number of flows and process groupsEach flow using Hive, HBase, Kudu, Cassandra or Solr needs its own mapping, testing and cutover, and shared process groups multiply the impact.Count flows that reference the removed processors, including nested and parameterized process groups and flows stored only in the 1.x instance.
Custom Groovy or scripted code touching Hive or HBaseScripts that open JDBC or HBase client connections are not covered by a processor swap and must be rewritten or retired before the upgrade.Search ExecuteScript, InvokeScriptedProcessor and custom NARs for Hive, HBase, Cassandra or Kudu client code and record the owner of each script.
Destination schema changesReplacement targets such as Parquet files, Iceberg tables or a new database often need different column types, partitioning and record schemas.Whether the destination schema will change, who approves it, and whether downstream consumers read the old table layout.
Kerberos-secured Hadoop clustersKeytabs, principals and ticket renewal must be rebuilt for the replacement path, and Kerberos login in NiFi 2 is deprecated.Which principals and keytabs the flows use, where they are stored, and whether the destination accepts the same authentication method.
Data volume to reconcileLarge backlogs in HBase, Kudu or Cassandra tables need backfill, row-count checks and a defined cutover point, which takes longer as volume grows.Row counts, retention windows, and whether historical data must be moved or can stay in a read-only 1.x island.
Destination owner availabilitySchema, credential and cutover decisions sit with the team that owns the target, and delays there hold up the whole flow change.Named owner for each destination, their approval window, and who signs off on data equivalence before traffic switches.

Questions teams ask before replacing Hive, HBase and Kudu flows

How much does replacing removed NiFi components cost?

The cost depends on how many flows use the removed components, how complex each flow is, and how many destinations must be re-tested. DeployOpen does not publish a price list. A quote follows from a written scope that lists the flows, the replacement pattern for each component, the test plan and the deliverables, and it is agreed in writing before work starts. Ask the quote to separate the discovery and inventory work, the rebuild of each flow, the validation against real destinations, and any ongoing support. Ask whether each item is one-time or recurring, and what changes the quote, such as additional destinations, custom Groovy or Python code, or a need to keep the 1.x instance running in parallel.

How long does a Hive, HBase or Kudu flow replacement take?

Duration is set by the number of flows, the number of distinct removed components, and how much of each flow depends on the destination's behavior. Flows that write one table format with simple record handling are usually quicker to rebuild than flows that depend on partitioning, upserts, or ordering guarantees. Verification often takes longer than the rebuild because the team must confirm that data lands correctly in the target system. Ask for a schedule that shows discovery, design of each replacement, test cycles and cutover windows, and confirm which steps depend on access to your Hadoop, HBase or Kudu clusters and on the owners of downstream systems.

What must our team provide before the work starts?

Provide the NiFi flow definitions for the affected process groups, exported in a form the team can review, along with a list of the processors that reference Hive, HBase, Kudu, Cassandra, Couchbase, Solr, ORC or Atlas. Name an owner for each destination system who can confirm table schemas, key design, and expected write semantics. Supply sample or anonymized test data that reflects real record shapes, and access to a non-production destination for validation. Also provide the parameter contexts, the controller services that hold connection details, and the change window your organization uses. Missing destination owners are the most common cause of delay.

Can our internal team replace these components without a partner?

Yes, a capable internal team can do this work if it has NiFi administration skills, access to the destination systems and time to test. The work is mostly flow engineering and validation rather than new code, but it needs people who understand both the NiFi processors and the target platform. Consider whether the team has done a NiFi version upgrade, can run a non-production NiFi instance, and can build test evidence that auditors or data owners will accept. Partners are most useful when the inventory is large, several teams own flows, or the schedule is tight. Ask for a written scope if you want a partner to take on part of the work.

Is it safe to keep a NiFi 1.x island running, and for how long?

A 1.x island can carry flows for a period while replacements are built, but it is not a stable long-term setup. The NiFi project states that the 1.x line cannot be maintained further because it depends on Jetty 9.4, Spring Framework 5.3 and AngularJS 1.8, which cannot be upgraded in that line. The downloads page lists an end-of-support date of December 8, 2024 for 1.28.1. Treat the island as a time-boxed exception with a named exit date, restricted network access, reviewed patches from your own process, and a record of which flows still depend on it. Confirm the current support status on the NiFi downloads page before you decide.

Does a replacement processor exist for each removed component?

Not every removed component has a one-to-one replacement in NiFi 2. The deprecation list covers Hive 3 query and streaming processors, HBase record processors, PutKudu, Cassandra record and query processors, Couchbase components, PutORC and ReportLineageToAtlas. None of these appear in the NiFi 2.12.0 components index, so the replacement path must be confirmed for each one. Check the components index for the processor that writes to your destination, and check the NiFi migration guidance for any published mapping. Where no direct match exists, the design may use a different destination protocol, an intermediate file format, or a custom extension. Confirm each choice with the destination owner before the build starts.

How do we find every flow that uses these components?

Start by searching the flow definitions and registry versions for the processor type names listed in the deprecation documentation, then check parameter contexts and controller services for the same connection details. Export each process group and record the processor, its properties and the downstream destination it writes to. Include flows that run on other nodes or are stopped, because they still need a decision. Confirm the result with the flow owners, since some flows may call Hive or HBase indirectly through scripts or custom processors. The inventory should become the basis for the scope document.

How DeployOpen works on this

DeployOpen starts by inventorying where Hive, HBase, Kudu, Cassandra, Couchbase, Solr and Atlas components sit in your flows, then agrees a written scope before any change is made. The work is delivered inside infrastructure you control, with replacements tested against your own data and handed over with documentation.

How we scope

  • Inventory every flow, process group and template that references a removed or deprecated component, including ones inside versioned flows
  • Record each affected component, its owning team, data destinations and the replacement pattern agreed for it
  • Agree the scope in writing, including which flows move to NiFi 2 and which, if any, remain on a 1.x instance
  • Confirm the target NiFi 2 release and the lists of components that must be validated against your environment

How we build

  • Rebuild affected flows with replacement processors or controller services, keeping parameter contexts and record schemas intact
  • Test each rebuilt flow against representative inputs, checking provenance, error routes and downstream data formats
  • Validate sensitive values, credentials and network paths in your environment before any cutover step is scheduled
  • Document decisions, component mappings and rollback steps so your engineers can review each change

How we hand over

  • Deliver flow definitions in your Git repository with a layout and branch approach your team has agreed
  • Provide runbooks covering cutover order, verification checks and the criteria for retiring any 1.x island
  • Walk your engineers through the rebuilt flows and the open items that still need a business decision
  • Record what was tested, what was not, and which items your team must confirm with its data owners

How we support

  • Fixed-scope engagements end with a handover review against the written deliverables
  • Ongoing support, upgrades and continuous testing are available as a retainer after handover
  • Retainers can cover later NiFi 2.x upgrades, new component changes and periodic flow reviews
  • Scope changes are priced and agreed in writing before additional work begins

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.