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



我有一个HADOOP 2.6的spark-1.5.1在本地机器上以独立模式运行。我正试图从一个示例java应用程序中运行一个hive查询,将spark.master指向(spark://impetus-i0248u:7077)火花大师在我的本地机器上运行。这是一段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尝试提交作业时出现的错误:

提交时间:10年12月15日20:00:42信息DAGScheduler:缺少提交2来自ResultStage 0的任务(位于的collectAsList处的MapPartitionsRDD[3]HiveJdbcTest.java:30)10年12月15日20:00:42信息任务调度Impl:添加任务集0.0,包含2个任务2010年12月15日20:00:42信息任务集管理器:在阶段0.0中启动任务0.0(TID 0,172.26.52.54,ANY,2181字节)10年12月15日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"中出现异常线程"shuffle-server-1"异常:java.lang.OutOfMemoryError从线程"shuffle-server-1"中的UnaughtException处理程序引发线程"threadDeathWatcher-2-1"出现异常异常:中的UnaughtException处理程序引发java.lang.OutOfMemoryErrorthread"threadDeathWatcher-2-1"

异常:从引发java.lang.OutOfMemoryError线程中未捕获异常处理程序"sparkDriver akka.remote.default-remote-dispatcher-6"中出现异常线程"qtp1003369013-56"异常:java.lang.OutOfMemoryError从线程"qtp1003369013-56"中的UnaughtException处理程序抛出

异常:从引发java.lang.OutOfMemoryError线程中未捕获异常处理程序"sparkDriver akka.remote.default-remote-dispatcher-21"

异常:从引发java.lang.OutOfMemoryError线程中未捕获异常处理程序"sparkDriver akka.aactor.default-dispatcher-17"

异常:从引发java.lang.OutOfMemoryError线程中未捕获异常处理程序"sparkDriver akka.remote.default-remote-dispatcher-23"中出现异常线程"shuffle-server-2"异常:java.lang.OutOfMemoryError从线程"shuffle-server-2"中的UnaughtException处理程序抛出

异常:从引发java.lang.OutOfMemoryError线程中未捕获异常处理程序"sparkDriver akka.aactor.default-dispatcher-2"

以下是在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时,我会得到上面提到的异常。如果我尝试连接到mysqldb,使用相同的配置,它可以正常工作。

附言:这张表只有一行。

请帮忙。。!

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

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

因此,考虑到以上情况,当您使用local box时,local(*)或collectAsList()可能不会给出任何OOM,但collect()可能会产生内存异常。

相关内容

  • 没有找到相关文章

最新更新