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%でスタックします。