Advertisement

Spark遇到的问题

阅读量:

我是一名Java开发者,在刚开始接触Spark时遇到了诸多挑战。现在将这些经历整理并记录下来,希望能为后来者提供一些建议或经验分享。

1.清除mac缓存:rm -rf /etc/udev/rules.d/70-persistent-net.rules

2.spark-submit \

--class main.scala.SparkWordCount \

--master spark://192.168.109.130:7077 \

/home/yingying/SparkTest.jar \

file:///usr/spark/spark-1.5.1-bin-hadoop2.6/README.md

3.出错Error: 报错信息:无法定位或加载main类org.apache.spark.launcher.Main时,请尝试重新安装一遍Spark即可

4. 出现"*** is already defined as object ***"错误

在正确配置了SogouResult之后执行编译操作时会出现"Sogou is already as an object SogouResult"的错误提示。

该错误很可能并非程序代码本身的问题,可能是Scala JDK版本导致的,在使用Scala 2.11.4时遇到该问题,在换用Scala 2.10.4后重新编译成功。需检查两处配置:Libraries和Global Libraries分别修改为 Scala 2.10.4

def main(args:Array[String]){

val conf = new SparkConf().setAppName("Spark Pi")

val spark = new SparkContext(conf)

val data = spark.textFile("data")

val mappeddata = data.map(num => {(num % 10 , num)})

val count = mappeddata.reduceByKey((a,b) => {a+b}).collect()

val sum_count = count.map(data => {data._2}).sum

var temp = 0

var index = 0

val mid = sum_count/2

for(i <- 0 to 10) {

temp = temp + count(i)

if(temp >= mid) {

index = i

break

}

}

val offset = temp -mid

val result = mappeddata.filter(num => num._1 == index).takeOrdered(offset)

println("Median is "+ result(offset))

spark.stop()

}

Alert TaskScheduler: 当前作业尚未接收任何资源,请检查集群界面以确认工节点已正确注册并拥有足够的资源

为了解决这个问题,在我的计算集群环境中,
每个节点只剩500MB内存可用。
因为我未设置SPARK_EXECUTOR_MEMORY参数,默认情况下采用了1GB内存配置。
因此会导致系统出现内存不足的问题,并产生如上的日志报提示信息。

所以解决办法是添加如下参数:

export SPARK_EXECUTOR_MEMORY=100M

转自:

启动 spark-shell 集群时出现错误时,请检查设置 MASTER=spark://SparkMaster:7077 ./spark-shell 是否正确。解决办法是将 MASTER 设置为 master(==真是令人无奈啊。。)参考链接:

启动 spark-shell 集群时出现错误时,请检查设置 MASTER=spark://SparkMaster:7077 ./spark-shell 是否正确。解决办法是将 MASTER 设置为 master(==真是令人无奈啊。。)参考链接:

7.hadoopdatanode启动不起

例如:

NameNode和DataNode配置参数不一致的问题是许多用户在安装过程中遇到的一个常见问题。具体错误日志如下:

java.io.IOException: Incompatible namespaceIDs in/root/tmp/dfs/data:

NameNode namespaceID = 1307672299; DataNode namespaceID =389959598

当HDFS长时间未启动时(或者长时间未启动),读者可以首先查阅相关日志记录(或者查看相关的日志文件),并对其内容进行详细分析(或者对其进行深入研究)。这将有助于发现潜在的问题所在(或者有助于识别问题根源)。此时系统会向用户提示:NameNode与DataNode所分配的namespace ID存在差异(或者表明NameNode与DataNode所使用的namespace ID并不一致)。

该问题通常是由至少两次格式化操作引起的

参考:http://kisuntech.blog.51cto.com/8003773/1304629

error: spark.util.SparkUncaughtExceptionHandler; error message: uncaught exception in thread named Thread with parameters appclient-registration-retry-thread, 5, and main

spark-submit RECEIVE SIGNAL 15

解决方法:提交任务时,把Master:7077改成192.168.109.130:7077

当某个datanode无法与namenode通信时,请按照以下步骤操作:首先删除该datanode tmp目录下的VERSION文件;接着,在namenode上运行hadoop dfsadmin -refreshNodes命令;随后,在已经死亡的该datanode上运行hadoop-daemon.sh start datanode命令;操作完成后即可恢复工作状态

相关资源链接:http://zhousheng29.iteye.com/blog/1667101(与他的错误原因不同但其解决方案相同)

通过spark-submit提交作业时,在实际路径正确的情况下仍然会报错'file不存在'

至今不知道解决方法,换了个文件就好了,无语==

代码一:object WorldCount {

def main(args:Array[String]){

val master = args(0)

val sc = new SparkContext(master,"WordCount",System.getenv("SPARK_HOME"))

val input = sc.textFile(args(1))

val words = input.flatMap(_.split(" "))

val count = words.map((,1)).reduceByKey(+_)

count.saveAsTextFile(args(2))

}

}

代码二:object WordCount2 {

def main(args:Array[String]){

val master = args(0)

val sc = new SparkContext(master,"WordCount2",System.getenv("SPARK_HOME"))

val input = sc.textFile(args(1))

val wordcount = input.flatMap(.split(" ")).map((,1)).reduceByKey(+)

wordcount.collect

wordcount.saveAsTextFile(args(2))

}

}

由于某些原因导致问题出现的状况下,并非所有的解决方案都能奏效;实际上,在这种情况下,并非所有的解决方案都能奏效;然而在这一过程中,并没有添加额外的功能项;反而在这一过程中,并没有添加额外的功能项;原来花费了一下午的时间去调试各种问题却不得其解确实让人感到沮丧

12.scala程序打包:

首先,在 projectStructure 中将 spark 的库加入到指定位置,并在完成配置后如图所示。

(1)在scr文件夹下设立main文件夹,并在其内部新增一个子文件夹scala。(但不确定是否有必要建立这两个子目錄)

在项目结构中(projectStructure),建议在Artifacts字段中进行操作(→),随后移除所有无用的依赖项包(→),完成后,请参考下图。

(3)Bulid--->bulid Artifacts--->bulid

(4)完活,去工程的文件夹--->out--->artifacts里面就可以找到啦

13.以指定executor-memory的方式启动spark-shell:

在 slave 机器上使用 jps 命令检查进程时会发现 DataNode 存在;然而,在 Web 界面中使用 bin/hadoop dfsadmin -report 命令或者直接运行该命令时会发现 live nodes 数量为零(即 DataNode 没有正常启动)。经过检查发现,在 DataNode 的日志记录中可以看到它一直在试图连接到 master 节点但始终处于重试状态;此外,在经过仔细排查后发现所有主机均可达;无论是通过 ping 命令还是 ssh 连接工具进行测试(结果均为可达状态)。

解决方案:该配置文件core-site.xml存在故障,在sparkslave1内部的核心配置文件中

fs.defaultFS

hdfs://Master:9000

其中master的端口与Master相应配置文件的端口不一致。。。。。

查出bug的一瞬间想手刃自己。。。

全部评论 (0)

还没有任何评论哟~