您的位置:首页 > 其它

Spark程序编写过程中的常见问题

2015-09-23 15:46 162 查看
1、使用IDEA 或者是 eclipse IDE来编写程序时,关于导包的问题。

在这些IDE过程中,如果网络可以的话,建议选择maven或者是sbt的模式,但是如果网络很差的话,还是老老实实的把我们需要的包导入吧,编写spark程序时,需要导入的 包,只有一个,那就是spark-assembly-1.4.0-hadoop2.6.0.jar,只要是assembly类型的集成包就行,一般都会满足你的基本需求。

(1)导包问题一

导入hadoop的包,在程序中没有用到hadoop的组件的时候,来导入hadoop的包,这样很容易出现问题,比如先导入hadoop的bin包,在导入spark的包,那么这时候程序执行就会出现问题,程序就会报如下的异常:

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties

15/09/23 15:47:15 INFO SparkContext: Running Spark version 1.4.0

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/Maps

at org.apache.hadoop.metrics2.lib.MetricsRegistry.<init>(MetricsRegistry.java:42)

at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.<init>(MetricsSystemImpl.java:94)

at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.<init>(MetricsSystemImpl.java:141)

at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.<init>(DefaultMetricsSystem.java:38)

at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.<clinit>(DefaultMetricsSystem.java:36)

at org.apache.hadoop.security.UserGroupInformation$UgiMetrics.create(UserGroupInformation.java:120)

at org.apache.hadoop.security.UserGroupInformation.<clinit>(UserGroupInformation.java:236)

at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2162)

at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2162)

at scala.Option.getOrElse(Option.scala:120)

at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2162)

at org.apache.spark.SparkContext.<init>(SparkContext.scala:301)

at sparkSQL.SparkSQL_Jdbc01$.initalSparkContext(SparkSQL_Jdbc01.scala:18)

at sparkSQL.SparkSQL_Jdbc01$.main(SparkSQL_Jdbc01.scala:35)

at sparkSQL.SparkSQL_Jdbc01.main(SparkSQL_Jdbc01.scala)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Maps

at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

... 20 more

15/09/23 15:47:15 INFO Utils: Shutdown hook called

这个问题不仅仅是在idea上面,在eclipse上面同样会有这样的问题,这个是我已经做过实验的,可能是跟程序的加载包的顺序有关,而且现在spark已经十分完善了,所以尽量不用导入hadoop的包。

(2)建议导入集成包,拒绝单包导入,这样会很麻烦,而且对于初学者也是一个不小的挑战。

(3)在spark SQL连接oracle数据库的过程中,如果数据库中存在自动生成的ID,一定要注意可能会有overflow precision这样的异常报出,这样报出的原因就是就是自动生成的ID是number类型,并且可能没有指定数据类型的长度,导致的,这个错误及其隐秘,大家要多多注意哦(特别是自己)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: