FAQ:StarRocks における Hadoop 3.4.3 Wildfly Native SSL ライブラリ問題
背景
StarRocks は、同梱する Hadoop 依存関係を 3.4.2 から 3.4.3 にアップグレードしました(PR #69503)。Hadoop 3.4.3 には HADOOP-19719 が含まれており、OpenSSL 3.0 への対応のために Wildfly OpenSSL バインディングが 2.1.4.Final から 2.2.5.Final に更新されています。しかし、新しいネイティブライブラリ(libwfssl.so)は GLIBC 2.34+ を前提にビルドされており、古い Linux ディストリビューションでは互換性の問題が発生します。
影響を受ける StarRocks バージョン: 4.1.0+、4.0.7+、3.5.14+
典型的な症状
この問題が発生すると、CN/BE ノードが SSL コンテキスト初期化時に SIGSEGV(セグメンテーションフォルト) でクラッシュすることがあります。FE では以下のようなエラーが報告されます:
SQL Error [1064] [42000]: Access storage error. Error message: failed to get file schema:
A error occurred: errorCode=2001 errorMessage:Channel inactive error!
GitHub Issue #70478 では、FILES() 関数を使用して Azure Data Lake 上の Parquet ファイルをクエリした際にこの問題が発生しています。
*** SIGSEGV (@0x0) received by PID (TID 0x...) ***
@ 0x7b9b67093453 SSL_CTX_new_ex
@ 0x7b9b6a09d95a Java_org_wildfly_openssl_SSLImpl_makeSSLContext0
@ 0x7b9a68544be1 (unknown)
原因は、Wildfly の JNI 呼び出し Java_org_wildfly_openssl_SSLImpl_makeSSLContext0 が OpenSSL 3.x ABI 向けにコンパイルされた libwfssl.so をロードするためです。しかし starrocks_be プロセス内では、libwfssl.so からの OpenSSL シンボル解決はディスク上のシステム OpenSSL 3.x 共有ライブラリに届く前に、starrocks_be バイナリへ静的リンクされた OpenSSL 1.x のシンボル(StarRocks thirdparty 由来)で先に解決されてしまいます。3.x の呼び出し側(SSL_CTX_new_ex など)が 1.x 実装にディスパッチされるため、SSL コンテキスト初期化時に JVM がクラッシュします。したがって、ホスト側に OpenSSL 3.x や開発ヘッダをインストールしても本クラッシュは解消しません。BE プロセス内の OpenSSL 1.x が常にシンボル解決を横取りしてしまうためです。
Q1:Wildfly OpenSSL ネイティブライブラリとは何ですか?
Hadoop は Wildfly OpenSSL を使用して、ネイティブ OpenSSL を Java の JSSE(Java Secure Socket Extension)API にバインドしています。これにより、Hadoop の S3A、Azure Blob(ABFS)、Azure Data Lake(ADL)コネクタは、JVM 内蔵の SSL 実装ではなく、ネイティブ OpenSSL を用いて TLS/SSL 接続を処理できます。正常に動作する場合、高スループットな暗号化 I/O において性能向上が期待できます。
Q2:Hadoop 3.4.3 では何が問題ですか?
Hadoop 3.4.3 は OpenSSL 3.0 対応のため、Wildfly OpenSSL を 2.2.5.Final にアップグレードしました(HADOOP-19719)。新しいネイティブライブラリ(libwfssl.so)は GLIBC 2.34+ 向けにビルドされ、OpenSSL 3.x ABI を前提としています。しかし starrocks_be バイナリは依然として thirdparty から OpenSSL 1.x を静的リンクしているため、次の 2 種類の障害が発生します:
| プラットフォーム | GLIBC バージョン | システム OpenSSL | 障害内容 |
|---|---|---|---|
| RHEL 8 / CentOS 8 | 2.28 | 1.1.1 | ロード時失敗:UnsatisfiedLinkError: GLIBC_2.34 not found により libwfssl.so がそもそもロードできない。 |
| Ubuntu 22.04 | 2.35 | 3.0.2 | 実行時 ABI 衝突:libwfssl.so はロードされるが、その OpenSSL シンボル解決は starrocks_be 内部に静的リンクされた OpenSSL 1.x に向かうため、システムの OpenSSL 3.x には届かず SSL_CTX_new_ex でクラッシュする。libssl-dev のインストールでは解消しません。 |
| RHEL 9 / Ubuntu 24.04 | 2.34+ | 3.0+ | Ubuntu 22.04 と同じ実行時 ABI 衝突:BE プロセス内部の静的 OpenSSL 1.x がシステムの OpenSSL 3.x を上書きする。openssl-devel のインストールでも解消しません。 |
影響を受ける環境では、以下の問題が発生する可能性があります:
- JVM の不安定化(CN/BE ノードで
hs_errクラッシュログが生成される) - クラウドストレージ(AWS S3、Azure Blob、Azure Data Lake)への SSL/TLS 接続失敗
- 暗号化されていない接続や異常な接続へのサイレントフォールバック
Q3:どのように対処すればよいですか?
環境に応じて、以下の解決策を選択できます。
解決策 1:Wildfly Native SSL を無効化(推奨)
Hadoop に JVM 内蔵の SSL 実装(JSSE)を使用させ、Wildfly/OpenSSL のネイティブ経路を無効化します。本方法は最も安全で移植性が高い対策です。
すべての CN/BE ノードの core-site.xml に設定を追加してください。
<configuration>
<!-- Disable Wildfly native SSL for AWS S3 (S3A connector) -->
<property>
<name>fs.s3a.ssl.channel.mode</name>
<value>default_jsse</value>
</property>
<!-- Disable Wildfly native SSL for Azure Data Lake (ADL connector) -->
<property>
<name>adl.ssl.channel.mode</name>
<value>Default_JSSE</value>
</property>
<!-- Disable Wildfly native SSL for Azure Blob Storage (ABFS connector) -->
<property>
<name>fs.azure.ssl.channel.mode</name>
<value>Default_JSSE</value>
</property>
</configuration>
core-site.xml の配置場所:
- StarRocks BE/CN:
$STARROCKS_HOME/conf/core-site.xml - Broker プロセス:
$BROKER_HOME/conf/core-site.xml
設定後は、すべての関連サービスを再起動してください。
解決策 2:BE パッケージから wildfly-openssl JAR を削除
根本原因は、wildfly-openssl-*.Final.jar に同梱された libwfssl.so が OpenSSL 3.x ABI 向けにコンパイルされている一方、starrocks_be バイナリが依然として StarRocks thirdparty から OpenSSL 1.x を静的リンクしている点にあります。BE プロセス内では libwfssl.so の OpenSSL シンボル解決が、starrocks_be に組み込まれた 1.x シンボルで先に解決され、システムの OpenSSL 3.x 共有ライブラリには届きません。3.x の呼び出しが 1.x 実装にディスパッチされるため、SSL_CTX_new_ex でクラッシュします。Ubuntu での apt install libssl-dev や RHEL での yum install openssl-devel はこれを変えられません。これらのパッケージがホストの OpenSSL を 3.x に更新したとしても、BE プロセス内部の静的 OpenSSL 1.x が常にシンボル解決で勝ってしまうためです。過去のドキュメントで libssl-dev / openssl-devel のインストールを勧めるものがあっても、本クラッシュに対しては無効として扱ってください。
確実な対処は、当該 JAR を削除して Hadoop がネイティブライブラリをロードできないようにし、JSSE に自動フォールバックさせることです:
rm -f $STARROCKS_HOME/lib/hadoop/common/wildfly-openssl-2.2.5.Final.jar
すべての CN/BE ノード(Broker を配置している場合はすべての Broker ノードも)で実行し、サービスを再起動してください。
issue #71898 の修正を含む StarRocks のビルド以降は、java-extensions/pom.xml で hadoop-common、hadoop-aws、hadoop-azure、hadoop-azure-datalake の 4 つの依存に対し <exclusion>org.wildfly.openssl:wildfly-openssl</exclusion> が宣言されているため、java-extensions/hadoop-lib から BE へ JAR が配られること自体がなくなります。保険として build.sh 側でも ${STARROCKS_OUTPUT}/be/lib/hadoop/common/wildfly-openssl-2.2.5.Final.jar を rm -rf で削除しています。アップグレード後の手動削除は不要です。
Q4:どのクラウドストレージコネクタが影響を受けますか?
| コネクタ | 設定項目 | 推奨値 |
|---|---|---|
| AWS S3(S3A) | fs.s3a.ssl.channel.mode | default_jsse |
| Azure Data Lake(ADL) | adl.ssl.channel.mode | Default_JSSE |
| Azure Blob(ABFS) | fs.azure.ssl.channel.mode | Default_JSSE |
Azure Data Lake Store SDK は AdlStoreOptions.setSSLChannelMode() によるプログラム設定も可能ですが、StarRocks では core-site.xml による設定が標準的です。
Q5:Native SSL を無効化すると性能に影響はありますか?
影響はありますが、多くのワークロードでは軽微です。
- Wildfly + OpenSSL(ネイティブ経路)は、大規模な暗号化 I/O において高いスループットを提供します
- JVM の JSSE 実装は、最新の JDK(Java 11 以降)では十分に最適化されており、多くの StarRocks のデータレイククエリには十分です
RHEL 9 や Ubuntu 24.04(GLIBC 2.34+、OpenSSL 3.0)などの対応環境では、最大性能のために default または openssl モードを使用することも可能です。
Q6:修正が有効かどうかを確認するには?
設定変更およびサービス再起動後、以下を確認してください:
-
問題が発生していた処理を再実行(例:外部 S3/Azure テーブルへのクエリ)
-
BE/CN ログを確認し、以下が出力されていないことを確認:
hs_err_pid*.log(JVM クラッシュログ)GLIBC_2.34やlibwfssl.soを含むUnsatisfiedLinkErrororg.wildfly.opensslに関連するスタックトレース
-
SSL 接続が正常に確立されていることを確認:
default_jsse使用時:標準的な JSSE ハンドシェイクログ(Wildfly 関連ログなし)default使用時:Failed to load OpenSSL. Falling back to the JSSEが出る場合あり(正常動作)
Q7:RHEL 8 / CentOS 8 では特に問題になりますか?
はい。
RHEL 8 は GLIBC 2.28 を使用しており、必要な 2.34 より大幅に古いため:
- ネイティブライブラリはロードできません
- Hadoop 3.4.3 のリリースノートでも、「RHEL8 では動作しないため JVM の SSL を使用すること」と明記されています
推奨:
- RHEL 8 では常に
default_jsseを使用 - 長期的には RHEL 9 への移行を検討
Q8:FIPS 準拠環境ではどうなりますか?
影響を受ける可能性があります。
FIPS 準拠の SSL ライブラリを使用している Linux 環境では、Wildfly OpenSSL のネイティブバインディングと互換性がない場合があります。
そのため:
- 原則として
default_jsse(JVM SSL)を使用してください - ネイティブライブラリの互換性が確認されている場合を除き、使用は推奨されません
Q9:StarRocks 側での対策は?
- Java 拡張のビルドレイヤで
wildfly-opensslを除外(issue #71898) 最新の StarRocks ビルドではjava-extensions/pom.xml内のhadoop-common、hadoop-aws、hadoop-azure、hadoop-azure-datalakeすべてに<exclusion>org.wildfly.openssl:wildfly-openssl</exclusion>を追加しており、java-extensions/hadoop-libから BE へこの JAR が配布されなくなります。さらに保険として、build.shは${STARROCKS_OUTPUT}/be/lib/hadoop/common/から残存するwildfly-openssl-2.2.5.Final.jarをrm -rfで削除します。この除外は暫定的なものであり、StarRocks thirdparty の OpenSSL が 3.x にアップグレードされ、BE プロセス内部の ABI がlibwfssl.soの想定と一致した時点で復元される予定です。 - ドキュメント整備
本 FAQ および
core-site.xml設定ガイドを提供
補足:以前、Ubuntu ランタイム Docker イメージに
libssl-devを追加する対応(PR #70688)も検討されましたが、クラッシュの真因はlibwfssl.soの OpenSSL 3.x 呼び出しがstarrocks_beに静的リンクされた OpenSSL 1.x にディスパッチされることであり、ホスト側の OpenSSL パッケージ不足ではありません。したがってlibssl-devやopenssl-develをインストールしても結果は変わりません。本項目の依存除外方式がこれに代わる正式な対策です。
クイックリファレンス:最小対応
すべての CN/BE ノード(Broker を配置している場合はすべての Broker ノードも)で、以下のいずれかを実施し、サービスを再起動してください。apt install libssl-dev や yum install openssl-devel に頼らないでください。本クラッシュは解消しません。
方法 A:wildfly-openssl JAR を削除する
rm -f $STARROCKS_HOME/lib/hadoop/common/wildfly-openssl-2.2.5.Final.jar
方法 B:$STARROCKS_HOME/conf/core-site.xml で JSSE を強制する
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.s3a.ssl.channel.mode</name>
<value>default_jsse</value>
</property>
<property>
<name>adl.ssl.channel.mode</name>
<value>Default_JSSE</value>
</property>
<property>
<name>fs.azure.ssl.channel.mode</name>
<value>Default_JSSE</value>
</property>
</configuration>
参考資料
- HADOOP-19719: Upgrade to wildfly version with support for openssl 3
- HADOOP-19262: Upgrade wildfly-openssl for JDK 17+
- FLINK-38284: Flink downstream tracking issue
- Hadoop S3A Troubleshooting Guide
- Hadoop S3A Performance Guide (SSL Channel Mode)
- Wildfly OpenSSL GitHub Repository
- StarRocks Issue #70478: SIGSEGV on Azure ADLS2 query (4.0.7)
- StarRocks PR #69503: Upgrade Hadoop 3.4.2 to 3.4.3
- StarRocks Issue #71898: BE パッケージから
wildfly-opensslを除外 - StarRocks PR #70688: Install libssl-dev for Ubuntu runtime(置き換え済み・本クラッシュは解消しません)