Spark遇到的问题

本人spark小白一枚,最开始使用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: Could not find or load main class org.apache.spark.launcher.Main时,把spark重新装一遍即可= =

 

 

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

 

编写好SogouResult后进行编译,出现"Sogou is already as object SogouResult"的错误,

 

出现这个错误很可能不是程序代码的问题,很可能是使用Scala JDK版本问题,作者在使用scala-2.11.4遇到该问题,换成scala-2.10.4后重新编译该问题得到解决,需要检查两个地方配置:LibrariesGlobal 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()

  }


5.WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

 

解决方法:因为我的集群环境,每个节点只剩下500MB内存了,由于我没有配置SPARK_EXECUTOR_MEMORY参数,默认会使用1G内存,所以会出现内存不足,从而出现上面日志报的警告信息。

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

export SPARK_EXECUTOR_MEMORY=100M

 

转自:http://blog.csdn.net/jiangshouzhuang/article/details/48844859

 

6.集群启动spark-shell,即MASTER=spark://SparkMaster:7077 ./spark-shell出错,解决方法:把MASTER改成master==简直不能再无语。。)相关链接:http://bbs.csdn.net/topics/390941085

 

7.hadoopdatanode启动不起

 

例如:

NameNodeDataNodenamespaceID不一致,这个错误是很多人在安装时会遇到的,日志信息为:

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

NameNode namespaceID = 1307672299; DataNode namespaceID =389959598

HDFS一直没有启动,读者可以查询日志,并通过日志进行分析,以上提示信息显示了NameNodeDataNodenamespaceID不一致。

这个问题一般是由于两次或两次以上的格式化NameNode造成的,有两种方法可以解决,第一种方法是删除DataNode的所有资料(及将集群中每个datanode/hdfs/data/current中的VERSION删掉,然后执行hadoopnamenode-format重启集群,错误消失。<推荐>);第二种方法是修改每个DataNodenamespaceID(位于/hdfs/data/current/VERSION文件中)<优先>或修改NameNodenamespaceID(位于/hdfs/name/current/VERSION文件中),使其一致。

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

 

8.

ERROR util.SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[appclient-registration-retry-thread,5,main]

spark-submit RECEIVE SIGNAL 15

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

 

9.某个datanode突然连不上namenode时,先把这个datanodetmp目录里面的VERISON删掉,然后在namonode上执行hadoop dfsadmin -refreshNodes ,再在死掉的datanode上面执行hadoop-daemon.sh start datanode,然后ok

相关链接:http://zhousheng29.iteye.com/blog/1667101(跟他的错误原因不一样,但是解决方法一样)

 

10.spark-submit提交作业时,读取本地文件明明路径是对的但是报错file doesn exists

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

 

11.

代码一: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))

  }

}

 

代码一不能执行成功但是代码二可以,因为。。。。代码二多了一个collect。。。。哎呦我去,折腾了一下午,宝宝心里苦

 

12.scala程序打包:

(0)最最首先要在projectStruture里面把spark的库添加进去,添加好的时候如图


 

1scr目录下面建目录main,再在main下面建一个目录scala(不知道这两个目录是不是必需的)

2projectStruture里面,Artifacts--->添加上,然后把没用的包都删掉,弄好之后如图

 

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

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


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

 

14.slave机器用jps查看进程的时候有DataNode,但是用web查看的话或者用bin/hadoop dfsadmin -reportlive nodes0. 这说明datanode没有正常启动。看了datanodelog,显示一直在连接master但是一直retry,我查过所有的hosts,并且无论用ping还是ssh都是通的。

解决办法:是配置文件core-site.xml出了问题,sparkslave1的里面的core-site.xml

fs.defaultFS

hdfs://Master:9000

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

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


 


你可能感兴趣的:(Spark)