9

大きなテーブル (10G) と小さなテーブル (230 MB) を 1 つずつ使用してマップ側を実行しようとしています。small i では、キー列で結合した後、すべての列を使用して出力レコードを生成します

以下の設定を使用しました

hive.auto.convert.join=true を設定します。

hive.mapjoin.smalltable.filesize=262144000; を設定します。

ログ:

**2013-09-20 02:43:50     Starting to launch local task to process map join;      maximum       memory = 1065484288

2013-09-20 02:44:05     Processing rows:        200000  Hashtable size: 199999  Memory usage:   430269904       rate:0.404

2013-09-20 02:44:14     Processing rows:        300000  Hashtable size: 299999  Memory usage:   643070664       rate:0.604

Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space
        at java.util.jar.Manifest$FastInputStream.<init>(Manifest.java:313)
        at java.util.jar.Manifest$FastInputStream.<init>(Manifest.java:308)
        at java.util.jar.Manifest.read(Manifest.java:176)
        at java.util.jar.Manifest.<init>(Manifest.java:50)
        at java.util.jar.JarFile.getManifestFromReference(JarFile.java:168)
        at java.util.jar.JarFile.getManifest(JarFile.java:149)
        at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:696)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:228)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at org.apache.hadoop.util.RunJar$1.run(RunJar.java:126)
Execution failed with exit status: 3
Obtaining error information
Task failed!
Task ID:
  Stage-7
Logs:
FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.MapredLocalTask
ATTEMPT: Execute BackupTask: org.apache.hadoop.hive.ql.exec.MapRedTask**

しかし、まだ OOM 例外に直面しています。クラスターに設定されているヒープ サイズは 1 GB です。このマップ側の結合を機能させるために、どのプロパティを検討および調整する必要があるかを支援してください

4

5 に答える 5

10

行の処理: 300000 ハッシュテーブル サイズ: 299999 メモリ使用量: 643070664 レート:0.604

30 万行で、HT はすでにヒープの 60% を使用しています。最初の質問: テーブルの順序は正しいですか? 結合内の小さなテーブルは、実際にデータ内の小さなテーブルですか? クエリを記述するとき、大きなテーブルは JOIN 句の最後にある必要があります。0.9 または 0.11 のどちらの Hive バージョンを使用していますか?

Hive 0.11 を使用していて、結合を正しく指定している場合、最初に試みることはヒープ サイズを増やすことです。上記のデータ (300k 行 ~> 650Mb ヒープ) から、必要なヒープの量を把握できます。

于 2013-09-20T10:19:38.990 に答える
3

set hive.auto.convert.join = false; メモリ例外は発生しません。

于 2016-11-17T07:16:44.743 に答える