spark1.6转到spark2.3总结(依赖、版本、初始化问题)

问题:pom里面不写spark版本(<spark.version>2.0.0</spark.version>)的话,可能会默认用spark1.6导致版本冲突异常——语法通过但无法编译运行

问题(spark版本必须对应Scala版本):参考https://mvnrepository.com/artifact/org.apache.spark/spark-hive上面的spark和Scala混搭版本(不用理会hive版本)组合jar和pom写法如下图——

spark1.6转到spark2.3总结(依赖、版本、初始化问题)

或者先看看自己的spark自带的jar依赖到底用啥Scala版本(spark1.6似乎没有这个目录):

spark1.6转到spark2.3总结(依赖、版本、初始化问题)

若没对应上版本的话,会出现各种乱七八糟的异常,比如无法使用dataframe,报hive metastore初始化失败;

 

问题(依赖):idea的maven工程里,project structure -> modules -> dependencies 和 pom.xml依赖设置,如spark-core依赖只写project structure会出现找不到依赖的异常,虽然语法没问题;但是如果是下面这个包:

import org.apache.spark.mllib.linalg.distributed.RowMatrix

只写pom,不在project structure -> modules -> dependencies配置的话,语法都过不了,这个mllib比较奇葩(看起来是由于org.apache.spark前缀跟其他的包有歧义了,但hive等其他的包没有此问题)。

参考解决方式:一般pom设置就能跑起来了(对大部分jar包project structure依赖加不加似乎无所谓);spark-shell没有此困扰;

 

 

问题(初始化):spark2.0要指定本地测试的工作路径.config("spark.sql.warehouse.dir","file:///work/4/test/spark-warehouse")否则:URISyntaxException: Relative path in absolute URI...

 

 

 

问题(虚拟机):Ubuntu里面要先启动Hadoop服务(后启动spark),才能使用dataset、dataframe等,否则报拒绝连接等异常;

 

问题:spark2.3查询hbase0.96.1.1出现空指针异常(或者spark2.2这里卡住不动),这应该是spark2本身的bug:

NoSuchMethodError: org.apache.hadoop.mapreduce.InputSplit.getLocationInfo()...

spark1.6转到spark2.3总结(依赖、版本、初始化问题)

点进到对应源码位置会发现spark2.+没有getLocationInfo函数,估计是spark从1升2的时候删掉了,但这里没改好。

解决方式:换到spark1.6就好了o(╯□╰)o