问题1:scala版本不一致导致报错 (java.lang.ClassNotFoundException: scala.Serializable)
解决办法:
1. 通过spark-shell查看远程spark依赖的scala版本:(图-1.1)

2. 在本地maven项目中添加对应版本的依赖:(图-1.2)

3.pom中的scala版本也保持一致 (图-1.3)

问题2:无法连接远程spark
解决办法:
1. SparkConf配置master为远程地址 (图-2.1)

2.从远程服务器上拷贝hive-site.xml到项目resources目录下(图-2.2)

3. 修改hive-site.xml中的配置,把metastore相关的配置改为远端配置 (图-2.3)

问题3:没有权限访问hdfs
解决办法:
1. 指定HADOOP_USER_NAME为hadoop的启动用户,参见 (图-2.1)代码
2. 在远端使用 hdfs dfs -chmod -R 777 /xxx 修改hdfs访问权限
问题4:运行报错:protocol message end-group tag did not match expected tag
解决办法:
1. 远端执行:hdfs getconf -confKey fs.default.name 结果如图(图-4.1)

2. 查看第一步返回的结果和本地hive-seite.xml中的端口是否一致,有的用户使用的是8020,如果不一致,修改为何第一步的一致的端口
3.参见 (图-2.1)代码,如果远端使用了hostname配置的hadoop集群,本地电脑设置/etc/host,
比如:172.100.200.76 hadoop01
然后把配置的远端地址172.100.200.76替换成 hadoop01,如图(图-2.1)代码把spark地址也使用hostname
问题5:远端使用hive查询正常,但是本地spark-sql返回无结果
解决办法:
1. 可能是hive表创建的时候指定的格式问题,比如我的日志表用的jsonDer,关闭spark的convertMetastoreParquet和convertMetastoreOrc (图-5.1)

问题6:运行报异常,内存溢出或者越界之类的信息
解决办法:
1.在远端spark的conf目录下分别配置spark-defaults.conf和spark-env.sh
spark -defaults.conf : spark.driver.memory 4g
spark-env.sh : SPARK_EXECUTOR_MEMORY=4G
2. 代码中指定内存 spark.executor.memory 参见图 (图-5.1)
其他注意点:
1.jdk版本问题,可以在pom中和scala_compiler.xml(位置在.idea目录下)中指定target:jvm-1.8
2.远端hadoop全家桶和spark启动最好是用同一个用户,比如笔者是用的hadoop
3.运行报错:Unable to create log directory /xxx/xxx/xx/${user.name},笔者开始还以为是hdfs权限问题,因为报错路径和hdfs的路径一致,但是hdfs设置777依然报错,实际上是本地无法创建这个目录(笔者mac系统),自己手动创建这个目录并给予写权限就可以了
4.依赖版本一定要和系统的环境版本注意保持一致,依赖从maven仓库中能搜到各种版本,
5.本地开发完成后,maven打包成jar包,上传到远端服务器,运行命令:
spark-submit --master yarn --class sparkKafka.App /home/hadoop/sparkKafka01-1.0.jar
最后附上笔者最后的调试结果,执行sparksql从hive数据仓中捞出日志数据,如图(图-6.1),看到你,整个世界瞬间变美好了,哈哈哈
