spark-1.5.1在java代码中使用hivecontext时抛出hive1.2.0的内存不足错误

wa7juj8i  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(244)

我有一个spark-1.5.1,用于hadoop2.6,在本地机器上以独立模式运行。我试图从一个示例java应用程序运行一个配置单元查询,将spark.master指向(spark://impetus-i0248u:7077)spark master在本地计算机上运行。下面是一段java代码:

SparkConf sparkconf = new SparkConf().set("spark.master", "spark://impetus-i0248u:7077").set("spark.app.name", "sparkhivesqltest")
        .set("spark.cores.max", "2").set("spark.executor.memory", "2g").set("worker_max_heapsize","2g").set("spark.driver.memory", "2g");

 SparkContext sc = new SparkContext(sparkconf);

HiveContext sqlContext = new HiveContext(sc);
DataFrame jdbcDF = sqlContext.sql("select * from bm.rutest");

List<Row> employeeFullNameRows = jdbcDF.collectAsList();

hivecontext正在正确初始化,因为它能够与配置单元元存储建立连接。我在家里遇到了一个例外 jdbcDF.collectAsList(); 以下是spark尝试提交作业时出现的错误:
提交2010年12月15日20:00:42信息日程安排程序:在hivejdbctest的collectaslist中提交resultstage 0(mappartitionsrdd[3]中缺少的2个任务。java:30)15/12/10 20:00:42 info taskschedulerimpl:添加任务集0.0和2个任务15/12/10 20:00:42 info tasksetmanager:在阶段0.0中启动任务0.0(tid 0,172.26.52.54,任意,2181字节)15/12/10 20:00:42信息tasksetmanager:在阶段0.0中启动任务1.0(tid 1,172.26.52.54,任意,2181字节)
异常:java.lang.outofmemoryerror从线程“sparkdriver akka.remote.default-remote-dispatcher-5”中的uncaughtexceptionhandler抛出线程“shuffle-server-1”中的异常异常异常:java.lang.outofmemoryerror从线程“shuffle-server-1”中的uncaughtexceptionhandler抛出线程“threaddeathwatcher-2-1”中的异常异常:从线程“threaddeathwatcher-2-1”中的uncaughtexceptionhandler引发java.lang.outofmemoryerror
异常:从线程“sparkdriver akka.remote.default-remote-dispatcher-6”线程“qtp1003369013-56”中的uncaughtexceptionhandler引发的java.lang.outofmemoryerror异常:从线程“qtp1003369013-56”中的uncaughtexceptionhandler引发的java.lang.outofmemoryerror
异常:从线程“sparkdriver akka.remote.default-remote-dispatcher-21”中的uncaughtexceptionhandler引发java.lang.outofmemoryerror
异常:从线程“sparkdriver akka.actor.default-dispatcher-17”中的uncaughtexceptionhandler引发java.lang.outofmemoryerror
异常:java.lang.outofmemoryerror从线程“sparkdriver akka.remote.default-remote-dispatcher-23”中的uncaughtexceptionhandler抛出“shuffle-server-2”异常:java.lang.outofmemoryerror从线程“shuffle-server-2”中的uncaughtexceptionhandler抛出
异常:从线程“sparkdriver akka.actor.default-dispatcher-2”中的uncaughtexceptionhandler抛出java.lang.outofmemoryerror
下面是spark-env.sh中添加的配置

SPARK_EXECUTOR_CORES=2
SPARK_EXECUTOR_MEMORY=3G
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=2G
SPARK_EXECUTOR_INSTANCES=2
SPARK_WORKER_INSTANCES=1

如果我将spark.master设置为local[*],它可以正常工作,但是当我将它指向在我的机器上运行的master时,我会得到上面提到的异常。如果我尝试使用相同的配置连接到mysql db,它就可以正常工作。
注:表格只有一行。
请帮帮我。。!

3pvhb19x

3pvhb19x1#

以下是对你问题中概念的解释:-
local[*]=执行是多线程的,而不是分布式的。在单机上测试作业时有利于开发。它适用于您的情况,因为数据不会被洗牌或从执行器移动到驱动程序……所有这些都在一个jvm和本地环境中。
collectaslist-此方法将从驱动程序节点上的执行器收集所有数据,这导致洗牌和洗牌是一个内存密集型过程,因为它需要序列化、网络和磁盘io。
javardd().tolocaliterator()=产生与collect()相同的结果,但在每个分区上按顺序工作,不涉及洗牌。注意,我们在RDD中只使用这个顺序的分区,并且分区中的项的顺序已经得到了很好的定义。
因此,考虑到上面的情况,当您使用local box时,很有可能local(*)或collectaslist()可能不会给出任何oom,但是collect()可能会产生内存异常。

相关问题