我在Hive表中有450万条记录 . 我的要求是通过Spark thrift服务器将此表缓存为临时表,直线使Tableau可以查询临时表并生成报告 .

我有4个节点集群,每个节点有50g RAM和25个vCores . 我在Spark 1.4.1中使用HDP2.3

问题:

我能够在不到一分钟的时间内缓存表,并能够从临时表中获取正确的计数 . 但问题是当我尝试用一列执行选择查询(使用beeline,相同的spark sqlContext)时,遇到OOM错误 .

尝试下面的配置没有任何运气:

1)sudo ./sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.bind.host = 10.74.129.175 --hiveconf hive.server2.thrift.port = 10002 --master yarn-client --driver-内存35g --driver-cores 25 --num-executors 4 --executor-memory 35g --executor-cores 25

$SPARK_HOME./bin/beeline> cache table temp1 as select * from hive_table;

在spark-default文件中设置下面的配置 - spark.driver.maxResultSize 20g spark.kryoserializer.buffer.max 2000mb spark.rdd.compress true spark.speculation true

2)sudo ./sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.bind.host = 10.74.129.175 --hiveconf hive.server2.thrift.port = 10002 --master yarn-client --driver-内存35g --driver-cores 5 --num-executors 11 --executor-memory 35g --executor-cores 5

$SPARK_HOME./bin/beeline> cache table temp1 as select * from hive_table;

在spark-default文件中设置下面的配置 - spark.driver.maxResultSize 20g spark.kryoserializer.buffer.max 2000mb spark.rdd.compress true spark.speculation true

根据我的理解,我在驱动程序机器上有足够的RAM,应该能够将select的结果带给驱动程序 .