Skip to content

chore(hadoop): switch to hadoop shaded client#2767

Open
wForget wants to merge 5 commits into
apache:masterfrom
wForget:dev
Open

chore(hadoop): switch to hadoop shaded client#2767
wForget wants to merge 5 commits into
apache:masterfrom
wForget:dev

Conversation

@wForget

@wForget wForget commented Jul 16, 2026

Copy link
Copy Markdown
Member

What changes were proposed in this pull request?

Switch the Hadoop 3.x test dependency from hadoop-minicluster to hadoop-client-minicluster.

This PR also introduces the hadoop-minicluster.artifactId property so that:

  • Hadoop 2.8 continues using hadoop-minicluster, because hadoop-client-minicluster is unavailable for Hadoop 2.8.5.
  • Hadoop 3.2 and Spark 4 profiles use hadoop-client-minicluster.
  • All affected modules reference the shared property instead of hard-coding the artifact ID.

Why are the changes needed?

While upgrading to Spark 4.2, I encountered a test classpath conflict between Jersey 3 used by Spark and Jersey 2 introduced by Hadoop MiniDFS through hadoop-minicluster.

Compared with hadoop-minicluster, hadoop-client-minicluster has a cleaner dependency set and is therefore used for Hadoop 3.x test profiles.

The property-based selection preserves compatibility with Hadoop 2.8, which still requires the original hadoop-minicluster artifact.

How was this patch tested?

Existing test cases.

@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown

Test Results

 3 617 files  ±0   3 617 suites  ±0   7h 44m 42s ⏱️ + 1m 13s
 1 265 tests ±0   1 254 ✅ ±0  11 💤 ±0  0 ❌ ±0 
18 055 runs  ±0  18 018 ✅ ±0  37 💤 ±0  0 ❌ ±0 

Results for commit 31afd36. ± Comparison against base commit 1bbfd79.

♻️ This comment has been updated with latest results.

@codecov-commenter

codecov-commenter commented Jul 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 51.75%. Comparing base (018ac28) to head (31afd36).
⚠️ Report is 4 commits behind head on master.

Additional details and impacted files
@@             Coverage Diff              @@
##             master    #2767      +/-   ##
============================================
+ Coverage     51.10%   51.75%   +0.64%     
- Complexity     3360     3978     +618     
============================================
  Files           534      600      +66     
  Lines         26055    33228    +7173     
  Branches       2442     3142     +700     
============================================
+ Hits          13316    17197    +3881     
- Misses        11880    14917    +3037     
- Partials        859     1114     +255     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@roryqi
roryqi requested a review from LuciferYang July 17, 2026 06:09
@wForget
wForget marked this pull request as ready for review July 17, 2026 06:37
@wForget wForget changed the title chore(test): switch to hadoop-client-minicluster for Hadoop 3 chore(hadoop): switch to hadoop shaded client Jul 17, 2026
Comment thread pom.xml
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
<!-- commonis-io introduced by hadoop-client, so mark it as provided -->
<scope>provided</scope>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pinning commons-io to provided in dependencyManagement breaks the standalone services (server/coordinator/storage). Their main code uses commons-io (FileUtils in LocalStorageChecker, IOUtils in coordinator), but the new declarations carry no scope and inherit provided. Since copy-dependencies only collects runtime scope, the -Phadoop-dependencies-included distribution no longer bundles commons-io. That distribution is meant to run without HADOOP_HOME, so the server throws NoClassDefFoundError: org/apache/commons/io/FileUtils at startup. CI misses it because the test classpath still has the provided jar. Declaring commons-io as <scope>${hadoop.scope}</scope> in those three modules aligns it with hadoop: provided by default, compile (bundled) under -Phadoop-dependencies-included.

Comment thread pom.xml
HADOOP-17324: Hadoop 3.2.x hadoop-client-minicluster does not include the shaded
Bouncy Castle classes required by the Kerberos MiniDFS tests.
-->
<hadoop-minicluster.artifactId>hadoop-minicluster</hadoop-minicluster.artifactId>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR description says "Hadoop 3.2 and Spark 4 profiles use hadoop-client-minicluster", which contradicts the code. The hadoop3.2 profile actually pins back to the non-shaded hadoop-minicluster, with a HADOOP-17324 comment: the 3.2.x shaded jar lacks the BouncyCastle needed by the Kerberos MiniDFS tests. The code is correct; just fix the description, e.g. "only the Spark 4 profile switches to hadoop-client-minicluster; hadoop3.2 keeps hadoop-minicluster because the shaded jar lacks BouncyCastle".

Comment thread pom.xml
<hadoop.version>3.4.1</hadoop.version>
<hadoop-client-api.artifactId>hadoop-client-api</hadoop-client-api.artifactId>
<hadoop-client-runtime.artifactId>hadoop-client-runtime</hadoop-client-runtime.artifactId>
<hadoop-minicluster.artifactId>hadoop-client-minicluster</hadoop-minicluster.artifactId>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After spark4 switches to hadoop-client-minicluster, that shaded jar has no BouncyCastle, and spark4 (unlike hadoop3.2) adds no bcprov. It passes today only because -Duniffle.test.skip.kerberos=true skips all Kerberos tests. The @DisabledIfSystemProperty disabledReason only says "MiniKdc is not compatible with JDK 17+", which hides the second reason: spark4 also lacks BouncyCastle. If someone enables these tests under spark4 or drops the flag, KerberizedHadoop will fail the HADOOP-17324 way. Noting this dependency in the spark4 profile or that comment would save the next person the trip.

Comment thread client/pom.xml
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<scope>test</scope>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test-scoped commons-io added to the client module isn't referenced anywhere under client/src (neither main nor test). Is it covering a transitive test dependency after the hadoop artifact switch, or just added along the way? Drop it if it's not needed; add a one-line comment if it is.

@LuciferYang

Copy link
Copy Markdown
Contributor

Are you also working on adding support for Spark 4.2? If so, I’ll hold off on my changes, haha.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants