元ドキュメント: エラーコード一覧
エラーコード一覧
概要
本ドキュメントでは、TDSQL Boundless の HBase 互換モードで発生する一般的なエラーコードとその対処方法について説明します。
接続関連のエラー
| エラーコード | エラーメッセージ | 説明 | 対処方法 |
|---|---|---|---|
| 1001 | ConnectionRefused | サーバーへの接続が拒否されました | ホスト名・ポート番号の設定を確認してください。サーバーが起動していることを確認してください。 |
| 1002 | AuthenticationFailed | 認証に失敗しました | ユーザー名とパスワードが正しいことを確認してください。 |
| 1003 | ConnectionTimeout | 接続がタイムアウトしました | ネットワーク接続を確認してください。接続タイムアウトの設定値を見直してください。 |
| 1004 | TooManyConnections | 接続数が上限に達しました | 不要な接続を閉じてください。接続プールの設定を見直してください。 |
テーブル操作関連のエラー
| エラーコード | エラーメッセージ | 説明 | 対処方法 |
|---|---|---|---|
| 2001 | TableNotFoundException | 指定されたテーブルが見つかりません | テーブル名が正しいことを確認してください。 |
| 2002 | TableExistsException | テーブルが既に存在します | 別のテーブル名を使用するか、既存テーブルを削除してください。 |
| 2003 | TableNotEnabledException | テーブルが無効化されています | admin.enableTable() を実行してテーブルを有効化してください。 |
| 2004 | ColumnFamilyNotFoundException | 指定されたカラムファミリーが見つかりません | カラムファミリー名が正しいことを確認してください。 |
データ操作関連のエラー
| エラーコード | エラーメッセージ | 説明 | 対処方法 |
|---|---|---|---|
| 3001 | RowKeyTooLarge | 行キーがサイズ上限を超えています | 行キーを短くしてください。上限は 64 KB です。 |
| 3002 | CellTooLarge | セルのサイズが上限を超えています | データを分割するか、圧縮を検討してください。 |
| 3003 | InvalidRowKey | 行キーが不正です | 行キーの形式を確認してください。空の行キーは使用できません。 |
| 3004 | OperationTimeout | 操作がタイムアウトしました | 操作タイムアウトの設定値を見直してください。データ量が多い場合はバッチサイズを小さくしてください。 |
スキャン関連のエラー
| エラーコード | エラーメッセージ | 説明 | 対処方法 |
|---|---|---|---|
| 4001 | ScannerTimeout | スキャンがタイムアウトしました | スキャンタイムアウトの設定値を増やしてください。スキャン範囲を絞り込んでください。 |
| 4002 | ScannerResetException | スキャナーがリセットされました | スキャナーを再作成して操作をリトライしてください。 |
| 4003 | InvalidFilterException | フィルターの設定が不正です | フィルターの設定を確認してください。 |
サーバー側のエラー
| エラーコード | エラーメッセージ | 説明 | 対処方法 |
|---|---|---|---|
| 5001 | ServerOverloaded | サーバーが過負荷状態です | しばらく待ってからリトライしてください。リクエスト頻度を下げてください。 |
| 5002 | RegionUnavailable | リージョンが利用できません | しばらく待ってから自動的にリカバリされます。問題が解消しない場合は管理者に連絡してください。 |
| 5003 | InternalServerError | サーバー内部エラー | 管理者に連絡してください。 |
エラーハンドリングの実装例
java
import org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException;
public class ErrorHandlingExample {
public static void putWithRetry(Table table, Put put, int maxRetries) {
int retryCount = 0;
while (retryCount < maxRetries) {
try {
table.put(put);
return; // 書き込み成功
} catch (RetriesExhaustedWithDetailsException e) {
retryCount++;
System.err.println("書き込みに失敗しました(試行回数: " + retryCount + "): " + e.getMessage());
if (retryCount >= maxRetries) {
throw new RuntimeException("最大リトライ回数に達しました。", e);
}
try {
// エクスポネンシャルバックオフ
Thread.sleep((long) Math.pow(2, retryCount) * 1000);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new RuntimeException("リトライ待機中に割り込みが発生しました。", ie);
}
} catch (Exception e) {
throw new RuntimeException("予期しないエラーが発生しました。", e);
}
}
}
}推奨事項
- すべてのデータ操作に適切なエラーハンドリングを実装してください。
- 一時的なエラー(タイムアウト、サーバー過負荷等)に対しては、エクスポネンシャルバックオフを用いたリトライ処理を実装してください。
- エラーログを適切に記録し、問題の原因特定に役立ててください。