本ページでは、E-MapReduce Druid で発生する可能性があるいくつかの一般的な問題について説明します。

インデックス作成の失敗を分析

インデックス作成が失敗した場合は、次の手順を実行して失敗のトラブルシューティングを行います。
  • バッチデータインデックス作成の場合
    1. curl コマンドの出力にエラーが表示されるか、情報が表示されない場合は、ファイル形式を確認してください。 または、curl コマンドに -v を追加して、RESTful API から返された値を確認します。
    2. Overlord ページでジョブの実行を確認します。 実行が失敗した場合は、そのページのログを確認してください。
    3. 多くの場合、ログは生成されません。 Hadoop ジョブの場合は、YARN ページを開いて、インデックスジョブが生成されているかどうかを確認します。
    4. エラーが見つからない場合は、E-MapReduce Druid クラスターにログインし、/mnt/disk1/log/druid/overlord—emr-header-1.cluster-xxxx.log で Overlord の実行ログを表示する必要があります。 HA クラスターの場合は、ジョブを送信した Overload を確認します。
    5. ジョブが Middlemanager に送信されたが、Middlemanager からエラーが返された場合、ジョブが送信されたワーカーを Overlord で表示し、ワーカーノードにログインしてMiddlemanager ログ (/mnt/disk1/log/druid/middleManager-emr-header-1.cluster-xxxx.log) を表示します。
  • リアルタイムの Tranquility のインデックス作成

    Tranquility ログをチェックして、メッセージが受信またはドロップされたかどうかを確認します。

    残りのトラブルシューティング手順は、バッチインデックス作成の手順 2〜5 と同じです。

    ほとんどのエラーは、クラスターの構成とジョブに関するものです。 クラスター構成エラーは、メモリパラメーター、クラスター間接続、高セキュリティモードでのクラスターへのアクセス、およびプリンシパルに関するものです。 ジョブエラーは、ジョブ記述ファイルの形式、入力データの解析、およびその他のジョブ関連の構成問題 (ioConfig など) に関するものです。

FAQ リストを取得

  • サービスの起動に失敗します。

    これらの問題のほとんどは、JVM コンポーネントの実行パラメーターの構成の問題が原因です。 たとえば、マシンに大容量のメモリがないにも関わらず、より大きな JVM メモリまたは多数のスレッドで構成されています。

    この問題を解決するには、コンポーネントログを表示し、関連するパラメーターを調整します。 JVM メモリには、ヒープメモリとダイレクトメモリが含まれます。 詳細については、「Apache Druid Performance FAQ」をご参照ください。

  • YARN タスクはインデックス作成中に失敗し、次のような JAR パッケージの競合エラーを示します。Error: class com.fasterxml.jackson.datatype.guava.deser.HostAndPortDeserializer overrides final method deserialize.( Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;)Ljava/lang/Object;.
    この問題を解決するには、インデックス作成ジョブ構成ファイルに次のコンテンツを追加します。
    "tuningConfig" : {
         ...
         "jobProperties" : {
             "mapreduce.job.classloader": "true"
             or
             "mapreduce.job.user.classpath.first": "true"
         }
         ...
     }

    パラメーターmapreduce.job.classloader は、 MapReduce ジョブがスタンドアロンのクラスローダーを使用できるようにし、パラメーター mapreduce.job.user.classpath.first は、MapReduceに JAR パッケージを使用する優先権を与えます。 これら 2 つの構成項目のいずれかを選択できます。 詳細については、「Apache Druid documents」をご参照ください。

  • インデックスタスクのログは、reduce タスクがセグメントディレクトリを作成できないことを報告します。

    この問題を解決するには、以下の手順を実行します。

    • タイプやディレクトリなど、大容量ストレージの設定を確認します。 タイプがローカルの場合は、ディレクトリの権限設定に注意してください。 タイプが HDFS の場合、ディレクトリはフルの HDFS パス (hdfs://:9000/ など) として記述する必要があります。 hdfs_master には IP が推奨されます。 ドメイン名を使用する場合は、emr-header-1 ではなく、emr-header-1.cluster-xxxxxxxx などの完全なドメイン名を使用します。
    • バッチインデックス作成に Hadoop を使用している場合は、セグメントの大容量ストレージを「hdfs」として設定する必要があります。 リモート YARN クラスターが reduce タスクでセグメントディレクトリを作成できないため、ローカルタイプによって MapReduce ジョブが識別されない状態になる可能性があります。(これは、スタンドアロンの E-MapReduce Druid クラスターにのみ適用されます。)
  • 10,000 回以内にディレクトリを作成できませんでした。

    この問題は通常、JVM 構成ファイルの java.io.tmp によって設定されたパスが存在しないために発生します。 パスを設定し、E-MapReduce Druid アカウントがそれにアクセスする権限を持っていることを確認します。

  • com.twitter.finagle.NoBrokersAvailableException: No hosts are available for disco!firehose:druid:overlord

    この問題は通常、ZooKeeper の接続の問題が原因です。 E-MapReduce Druid と Tranquility が ZooKeeper に対して同じ接続文字列を持っていることを確認してください。 E-MapReduce Druid のデフォルトの ZooKeeper パスは /druid であるため、Tranquility 設定の zookeeper.connect に /druid が含まれていることを確認してください。 (Tranquility Kafka には 2 つの ZooKeeper 設定があります。 1 つは E-MapReduce Druid クラスターの ZooKeeper を接続するために使用される zookeeper.connect で、もう 1 つは Kafka クラスターの ZooKeeper を接続するために使用される kafka.zookeeper.connect です。 これら 2 つの ZooKeeper は、同じ ZooKeeper クラスターに属していない場合があります。)

  • MiddleManager は、インデックス作成中に com.hadoop.compression.lzo.LzoCodec クラスが見つからないことを報告します。

    これは、E-MapReduce の Hadoop クラスターが lzo 圧縮で構成されているためです。

    この問題を解決するには、JAR パッケージと EMR HADOOP_HOME/lib ディレクトリの下のネイティブファイルを E-MapReduce Druid のdruid.extensions.hadoopDependenciesDir (デフォルトでは DRUID_HOME/hadoop-dependencies) にコピーします。

  • インデックス作成中に次のエラーが報告されます。
    2018-02-01T09:00:32,647 ERROR [task-runner-0-priority-0] com.hadoop.compression.lzo.GPLNativeCodeLoader - could not unpack the binaries
      java.io.IOException: No such file or directory
              at java.io.UnixFileSystem.createFileExclusively(Native Method) ~[?:1.8.0_151]
              at java.io.File.createTempFile(File.java:2024) ~[?:1.8.0_151]
              at java.io.File.createTempFile(File.java:2070) ~[?:1.8.0_151]
              at com.hadoop.compression.lzo.GPLNativeCodeLoader.unpackBinaries(GPLNativeCodeLoader.java:115) [hadoop-lzo-0.4.21-SNAPSHOT.jar:?]

    この問題は、java.io.tmp パスが存在しないために発生します。 パスを設定し、E-MapReduce Druid アカウントがそれにアクセスする権限を持っていることを確認します。