0

Hive0.9でテーブルにインデックスを作成しようとしています。1つのテーブルには10億行、別のテーブルには3,000万行があります。私が使用したコマンドは(テーブルの作成など以外)です

  CREATE INDEX DEAL_IDX_1 ON TABLE DEAL (ID) AS 
  'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
  WITH DEFERRED REBUILD;

  alter index DEAL_IDX_1 ON DEAL rebuild;

  set hive.optimize.autoindex=true;
  set hive.optimize.index.filter=true;

30ミル用。行テーブルでは、再構築プロセスは正常に見えます(マッパーとレデューサーの両方が終了しました)。最後に印刷されます。

  Invalid alter operation: Unable to alter index.
  FAILED: Execution Error, return code 1 
  from org.apache.hadoop.hive.ql.exec.DDLTask

ログを確認すると、エラーが発生しました

java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver"

このエラーが発生した理由はわかりませんが、とにかく、derby-version.jarを追加しました。

add jar /path/derby-version.jar

報告されたエラーは解決されましたが、それでも別のエラーが発生しました。

org.apache.hadoop.hive.ql.exec.FileSinkOperator: 
StatsPublishing error: cannot connect to database

問題を解決する方法がわからない。ただし、ハイブ/ウェアハウスの下に作成されたインデックステーブルが表示されます。

10億行のテーブルの場合、それは別の話です。マッパーはちょうど2%かそこらで立ち往生しました。そしてエラーが表示されました

FATAL org.apache.hadoop.mapred.Child: Error running child : 
java.lang.OutOfMemoryError: Java heap space 

最大ヒープサイズと最大マッパーメモリを適用しようとしました(ハイブの構成設定ではなく、どこかに記載されている設定を参照してください)。

set mapred.child.java.opts =  -Xmx6024m
set mapred.job.map.memory.mb=6000;
set mapred.job.reduce.memory.mb=4000;

ただし、これは役に立ちません。マッパーは同じエラーで2%でスタックします。

4

1 に答える 1