0

私は初心者で、大きな (1.25 TB の非圧縮) hdfs ファイルを取り、それを Hive 管理テーブルに入れようとしています。任意のパーティションを持つ csv 形式 (sqoop から) の HDFS に既にあり、クエリと結合のために、より整理された形式にしています。Tez を使用して HDP 3.0 を使用しています。これが私のものhqlです:

USE MYDB;

DROP TABLE IF EXISTS new_table;

CREATE TABLE IF NOT EXISTS new_table (
 svcpt_id VARCHAR(20),
 usage_value FLOAT,
 read_time SMALLINT)
PARTITIONED BY (read_date INT)
CLUSTERED BY (svcpt_id) INTO 9600 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC
TBLPROPERTIES("orc.compress"="snappy");

SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.max.dynamic.partitions.pernode=2000;
SET hive.exec.max.dynamic.partitions=10000;
SET hive.vectorized.execution.enabled = true;
SET hive.vectorized.execution.reduce.enabled = true;
SET hive.enforce.bucketing = true;
SET mapred.reduce.tasks = 10000;

INSERT OVERWRITE TABLE new_table
PARTITION (read_date)
SELECT svcpt_id, usage, read_time, read_date
FROM raw_table;

Tez がこれを設定する方法は次のとおりです (私の最近の失敗から):

--------------------------------------------------------------------------------
VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
--------------------------------------------------------------------------------
Map 1      SUCCEEDED   1043       1043        0        0       0       0
Reducer 2    RUNNING   9600        735       19     8846       0       0
Reducer 3     INITED  10000          0        0    10000       0       0
--------------------------------------------------------------------------------
VERTICES: 01/03  [==>>------------------------] 8%    ELAPSED TIME: 45152.59 s
--------------------------------------------------------------------------------

私はしばらくこれに取り組んできました。map 1最初は最初の頂点を実行できなかったので、バケットを追加しました。96 個のバケットで最初のマッパーが実行されましたが、reducer 2意味をなさないディスク容量の問題を引用して失敗しました。次に、バケットの数を 9600 に増やし、タスクを 10000 に減らすと、reduce 2ゆっくりではありますが、頂点が実行を開始しました。今朝、ガベージ コレクターの Java ヒープ スペース エラーが原因で namenode がシャットダウンしたため、エラーが発生したことがわかりました。

誰か私に何かアドバイスはありますか?削減タスクの数、バケットの数、および以下に示すすべての構成で、暗闇の中で撮影しているように感じます。

hive.tez.container.size = 5120MB
hive.exec.reducers.bytes.per.reducer = 1GB
hive.exec.max.dynamic.partitions = 5000
hive.optimize.sort.dynamic.partition = FALSE
hive.vectorized.execution.enabled = TRUE
hive.vectorized.execution.reduce.enabled = TRUE
yarn.scheduler.minimum-allocation-mb = 2G
yarn.scheduler.maximum-allocation-mb = 8G
mapred.min.split.size=?
mapred.max.split.size=?
hive.input.format=?
mapred.min.split.size=?

LLAP を設定していない

私のクラスターには、4 つのノード、32 コア、および 120 GB のメモリがあります。クラスターのストレージの 1/3 以上を使用していません。

4

1 に答える 1