Есть учебный кластер hadoop 3.0, 1 name node + 3 slaves.
В hdfs загружен paruqet файл, размером 15Гб.
Структурой:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
+-------------------+------+
| time|carnum|
+-------------------+------+
|2017-09-14 21:50:21| E5TC|
|2017-09-14 21:50:22| A9DC|
|2017-09-14 21:50:23| MU6V|
|2017-09-14 21:50:24| G19X|
|2017-09-14 21:50:25| 0FNB|
|2017-09-14 21:50:26| BUUB|
|2017-09-14 21:50:27| ARTA|
На namenode поднят hive (metastore+hiveserver2)
parquet создан так:
1.
2.
3.
CREATE TABLE avro_cc2 ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS AVRO TBLPROPERTIES ('avro.schema.url'='/user/data/cc2.avsc');
CREATE EXTERNAL TABLE parquet_test LIKE avro_cc2 STORED AS PARQUET LOCATION 'hdfs://10.242.5.88:9000/user/data/cam_car2.parquet';
К hive подключаюсь через DBeaver и выполняю запрос
1.
SELECT count(*) FROM parquet_test
Запрос падает и в консоли, где запущен hiveserver2
пишет
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Query ID = hadoop_20180302160736_ab3ea221-e35d-4a3e-a52f-d9492db68b84
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Job running in-process (local Hadoop)
2018-03-02 16:07:40,325 Stage-1 map = 0%, reduce = 0%
Ended Job = job_local1144706347_0008 with errors
Error during job, obtaining debugging information...
Job Tracking URL: http://localhost:8080/
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched:
Stage-Stage-1: HDFS Read: 0 HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 0 msec
OK
Exception in thread "HiveServer2-Handler-Pool: Thread-33" java.lang.OutOfMemoryError: Java heap space
При этом код (Spark локальный, не на сервере) выполняется
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
String hdfsuri = "hdfs://10.242.5.88:9000";
String path = "/user/data/";
String fileName = "cam_car2.parquet";
SparkSession spark = SparkSession.builder()
.appName("Java Spark SQL basic example")
.config("spark.master", "local[*]")
.config("spark.sql.crossJoin.enabled", "true").getOrCreate();
Dataset<Row> sqlLoadedDF = spark.read().load(apploaded_prq_fpath);
sqlLoadedDF.createOrReplaceTempView("v_cc");
Dataset<Row> usrs_CntApplod_WeekReg = spark.sql("SELECT count(*) as cnt FROM v_cc ");
usrs_CntApplod_WeekReg.show();
и позвращает
1.
2.
3.
4.
5.
+----------+
| cnt|
+----------+
|1000000000|
+----------+
Правильно понимаю, что проблемы в настройках памяти для Hive? по идее же hive разбирает SQL на цепочки MR, которые должны выполниться в Hadoop кластере, почему ему памяти то не хватает.
Или как раз вот это WARNING: Hive-on-MR is deprecated in Hive 2
и говорит о том, это не так.