当前位置: 首页 > 知识库问答 >
问题:

SPARK-1.5.1在java代码中使用HiveContext为hive 1.2.0抛出内存不足错误

臧亦
2023-03-14
 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正得到正确的初始化,因为它能够建立与hive转移瘤的连接。在jdbcdf.collectaslist();处出现异常

spark试图提交作业时出现的错误如下:

提交15/12/10 20:00:42 INFO DagScheduler:从ResultStage 0(在HiveJDBCTest.java:30处的collectAsList处的MapPartitionSrdd[3])提交2个缺少的任务15/12/10 20:00:42 INFO TaskSchedulerImpl:用2个任务添加任务集0.0 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 INFO TaskSetManager:在阶段0.0中启动任务1.0(TID 1,172.26.52.54,任意,2181字节)15/12/10 20:00:42 INFO TaskSetManager:在阶段0.0中启动任务1.0(TID 1,172.26.52.54,任意,2181字节)

异常:从线程“sparkdriver-akka.remote.default-remote-dispatcher-5”中的uncaugtExceptionHandler引发的异常:从线程“shuffle-server-1”中的uncaugtExceptionHandler引发的异常:从线程“shuffle-server-1”中的uncaugtExceptionHandler引发的异常:从线程“threaddeathWatcher-2-1”中的异常:从线程“threaddeathWatcher-2-1”中的uncaugtExceptionHandler引发的异常:java.lang.outofMemoryError引发的异常:从线程“threaddeathWatcher-2-1”中的uncaugtExceptionHandler引发的异常

异常:从线程“sparkdriver-akka.remote.default-remote-dispatcher-6”中的uncaugtExceptionHandler引发的java.lang.OutofMemoryError在线程“qtp1003369013-56”中的异常:从线程“qtp1003369013-56”中的uncaugtExceptionHandler引发的java.lang.OutofMemoryError

异常:从线程“sparkdriver-akka.remote.default-remote-dispatcher-21”中的UncaughtExceptionHandler引发java.lang.OutofMemoryError

异常:从线程“sparkdriver-akka.actor.default-dispatcher-17”中的UncaughtExceptionHandler抛出java.lang.OutofMemoryError

异常:从线程“sparkdriver-akka.remote.default-remote-dispatcher-23”中的uncaugtExceptionHandler引发的java.lang.OutofMemoryError异常:从线程“shuffle-server-2”中的uncaugtExceptionHandler引发的java.lang.OutofMemoryError异常

异常:从线程“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,它可以正常工作。

共有1个答案

董花蜂
2023-03-14

以下是对你问题中概念的解释:-

  1. local[*]=执行是多线程的,不是分布式的。当作业在单机上测试时,有利于开发。它适用于您的情况,因为数据不会被洗牌或从执行器移动到驱动程序...所有这些都在一个JVM和本地中。
  2. CollectasList-此方法将从驱动程序节点上的执行程序收集所有数据,这会导致洗牌,而洗牌是一个内存密集型过程,因为它需要序列化、网络和磁盘IO。
  3. javardd().tolocaliterator()=生成与collect()相同的结果,但顺序地处理每个分区,不涉及洗牌。请注意,我们在RDDs中只使用这种分区顺序,并且分区中项的顺序定义得很好。

因此,考虑到以上情况,当您使用本地框时,local(*)或collectAsList()很有可能不提供任何OOM,但collect()可能会产生内存异常。

 类似资料:
  • 我实现了firebasegoogle(com.google.firebase:firebaseauth:9.0.2),但是当我调用 我收到一条消息,内存不足。我是初学者,我不知道原因。如何解决这个问题?这是日志:

  • 我从记忆中得到消息。我是Android的初学者,我不知道原因。我如何解决这个问题?下面是日志: 1.424 4944-4944/com.bsp.AndroidTraining E/ART:抛出OutOfMemoryError“在OOM之前无法分配带有12个空闲字节和12B的162字节分配”(递归情况)06-10 02:03:51.454 494-4944/com.bsp.androidTraini

  • 如果内存不足,我必须抛出异常。我真的不是专家。用这个方法怎么做?

  • 最近我被要求在我的代码中捕获可抛出的内容。所以我们遇到了一个争论,我们是否应该这样做,我给出了一个OutOfMemoryError的例子,在这种情况下,即使我们捕获到错误,我们的代码也不会被进一步处理。 所以为了测试这个理论,我们为它创建了示例代码。 在Wed Jun 16 14:20:41 IST 2021时间运行测试 try Block内部 catch Block内部 Java.lang.Ou

  • 我已经建立了一个Spark and Flink k-means应用程序。我的测试用例是一个3节点集群上的100万个点的集群。 当内存瓶颈开始时,Flink开始外包给磁盘,工作缓慢,但工作正常。然而,如果内存已满,Spark将失去执行器,并再次启动(无限循环?)。 我尝试在邮件列表的帮助下自定义内存设置,谢谢。但是火花仍然不起作用。 是否需要设置任何配置?我是说Flink的记忆力很差,斯帕克也必须能

  • 当我将大数据保存到hdfs时,我正在体验OOME 我在Spark-Submit中使用这个: 当我增加框架时,现在的错误是:Java.lang.outofMemoryError:Java堆空间,所以我必须将驱动程序内存和执行程序内存增加到2G才能工作。如果累加Collection.value.length是500,000,我需要使用3G。这正常吗? 该文件只有146MB,包含200,000行(对于2