我在Hive表中有450万条记录。 我的要求是通过Spark thrift服务器将此表缓存为临时表,直线使Tableau可以查询临时表并生成报告。
我有4个节点集群,每个节点有50g RAM和25个vCores。我正在使用HDP2.3和Spark 1.4.1
我能够在不到一分钟的时间内缓存表,并能够从临时表中获取正确的计数。但问题是当我尝试使用一列执行选择查询(使用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-memory 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是的 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-memory 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是的 spark.speculation true
根据我的理解,我在驱动程序机器上有足够的RAM,应该能够将select的结果带到驱动程序。