このトピックでは、Hive サービス関連の問題のトラブルシューティング方法について説明します。
例外の特定
Hive クライアントでパフォーマンス例外などの例外が発生した場合、次の手順を実行して例外を特定できます。
Hive サービスがデプロイされているクラスターの CPU、メモリ、ネットワーク、およびディスクを確認します。
次の手順を実行して、Hive サービスのコンポーネントが想定どおりに実行されているかどうかを確認します。
Hive の HiveMetaStore コンポーネントと HiveServer2 コンポーネントで例外が発生するかどうかを確認します。例外が発生した場合は、対応するメトリックに基づいて問題をトラブルシューティングします。たとえば、GC 関連のメトリックがメモリ使用量が過剰であることを示している場合は、メモリサイズを調整する必要があります。詳細については、「Hive サービスのメモリパラメーターの変更」をご参照ください。
クラスターの [監視] タブに移動します。[メトリック監視] タブで、HiveMetaStore コンポーネントと HiveServer2 コンポーネントの主要なメトリックを確認し、関連パラメーターを変更する必要があるかどうかを判断します。詳細については、「Hive の確認項目と主要なメトリック」をご参照ください。
HiveMetaStore コンポーネントまたは HiveServer2 コンポーネントのログを確認します。ほとんどの場合、コンポーネントのログは /mnt/disk1/log/hive/ ディレクトリに保存されます。HiveMetaStore コンポーネントまたは HiveServer2 コンポーネントの .log、.err、.out、および GC ログを確認して、コンポーネントで発生する例外の原因を特定できます。
HiveMetaStore データベース関連の問題
問題 1: Host xxxx is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
原因: クライアントがデータベースに接続するときに頻繁にエラーが発生します。その結果、データベースはクライアントから送信された接続要求を拒否します。
解決策:
解決策 1: max_connect_errors パラメーターの値を増やします。変更はすぐに有効になります。
重要max_connect_errors パラメーターは、クライアントがデータベースパスワードをブルートフォースクラッキングするのを防ぐために使用されます。このパラメーターを過度に大きな値に設定しないことをお勧めします。
データベースにログオンし、次のコマンドを実行して max_connect_errors パラメーターの値を表示します。
show global variables like '%max_connect_errors%'次のコマンドを実行して、max_connect_errors パラメーターをより大きな値に設定します。
set global max_connect_errors=[A larger value]
解決策 2: 次のコマンドを実行して、例外が発生したホストのキャッシュデータをクリアします。データベースにログオンして flush hosts コマンドを実行して、キャッシュデータをクリアすることもできます。
mysqladmin -u root -p flush-hosts
問題 2: Metastore Connection Driver : com.mysql.jdbc.Driver Metastore connection User: xxx ,stderr=org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure
原因: セルフマネージド ApsaraDB for RDS インスタンスで Hive メタストアデータベースが初期化されていません。
解決策: Hive メタストアデータベースを初期化します。詳細については、「独立した ApsaraDB RDS for MySQL データベースの構成」トピックの「メタストアサービスの初期化」セクションをご参照ください。
HiveMetaStore 関連の問題
問題: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Could not connect to meta store using any of the URIs provided
原因 1: HiveMetaStore コンポーネントが中断されているか、HiveMetaStore コンポーネントの負荷が大きくなっています。たとえば、GC が長時間続いています。
解決策:
HiveMetaStore コンポーネントの GC ログを確認し、HiveMetaStore コンポーネントのメモリサイズを増やします。詳細については、「Hive サービスのメモリパラメーターの変更」をご参照ください。
HiveMetaStore コンポーネントのログを確認します。ログに
java.lang.OutOfMemoryErrorが表示された場合は、HiveMetaStore コンポーネントのメモリサイズを増やします。詳細については、「Hive サービスのメモリパラメーターの変更」をご参照ください。hive.metastore.transactional.event.listenersパラメーターとhive.metastore.event.db.listenerパラメーターが構成されているかどうかを確認します。一部のリスナーは、HiveMetaStore コンポーネントのメモリ使用量が急激に増加する原因となる可能性があります。リスナーが構成されている場合は、リスナーの設定を削除し、HiveMetaStore コンポーネントを再起動します。多数のクライアント要求または同時要求が HiveMetaStore コンポーネントに送信される場合は、HiveMetaStore コンポーネントのメモリサイズを増やします。デフォルトのメモリサイズは 500 MiB です。詳細については、「Hive サービスのメモリパラメーターの変更」をご参照ください。
HiveMetaStore コンポーネントのログのエラーメッセージを確認します。 HiveMetaStore コンポーネントを起動できない場合は、データベースリンクの構成が正しいかどうかを確認します。
原因 2: クライアントが HiveMetaStore コンポーネントに接続されていません。これは、セルフマネージド Elastic Compute Service (ECS) インスタンスにデプロイされているクライアントで問題の一般的な原因です。
解決策: クライアントが HiveMetaStore コンポーネントに接続されているかどうかを確認します。クライアントが HiveMetaStore コンポーネントに接続されていない場合は、クライアントと HiveMetaStore コンポーネント間の接続を確立します。
HiveServer2 関連の問題
問題 1: HiveServer2 が予期せず再起動し、しばらくしてから想定どおりに実行される
原因: HiveServer2 で例外が発生している可能性があります。実行された SQL ステートメントの数が増加しているか、サービスのワークロードが大きいかどうかを確認します。サービスのワークロードが大きい場合は、HiveServer2 コンポーネントのメモリサイズを調整します。
解決策: HiveServer2 コンポーネントがデプロイされているマシンの環境を確認し、「例外の特定」に記載されている手順に従ってコンポーネントを確認します。
問題 2: Unexpected end of file when reading from HS2 server. The root cause might be too many concurrent connections
原因: HiveServer2 が過負荷になっています。
解決策: Flink ジョブなどのアプリケーションが Hive CLI を継続的に呼び出しているかどうかを確認します。アプリケーションが Hive CLI を継続的に呼び出している場合は、アプリケーションを停止します。異常なアプリケーションが見つからない場合は、メモリサイズを調整し、hive.server2.thrift.max.worker.threads パラメーターを変更します。メモリサイズの調整方法の詳細については、「Hive サービスのメモリパラメーターの変更」をご参照ください。
問題 3: Could not connect to any of [xxx, 10000]
原因: HiveServer2 で例外が発生している可能性があります。
解決策: HiveServer2 コンポーネントがデプロイされているマシンの環境を確認するか、「例外の特定」に記載されている手順に従ってコンポーネントを確認します。
問題 4: java.lang.OutOfMemoryError: Compressed class space
原因: HiveServer コンポーネントの圧縮クラス空間が不足しています。
解決策: 次の操作を実行して、HiveServer コンポーネントの圧縮クラス空間を増やします。E-MapReduce (EMR) コンソールで、Hive サービスページの [hive-env.shXX:CompressedClassSpaceSizehive_server2_opts] タブに移動します。[] タブで、[] タブをクリックし、hive_server2_opts 構成項目の パラメーターの値を増やします。構成項目の他のパラメーターのデフォルト値は保持します。たとえば、XX:CompressedClassSpaceSize パラメーターを 512m に設定できます。