SPARK编译的一些记录

来源:互联网 发布:批量word转pdf windows 编辑:程序博客网 时间:2024/06/05 17:21

SPARK编译的一些记录

标签(空格分隔): spark


由于发行版的spark-sql不支持一些比如‘insert overwrite directory’的特性,而在开发中确实需要使用到这些特性,之前的选择是使用livy来避开了这一特性,最近看到spark已经merge了这个特性的PR,于是尝试着编译,使用新的spark。

Spark编译

  • 参考这篇文章 慕课网_Michael__PK
  • 选择了使用spark的/dev/make-distribution.sh脚本进行编译,依赖的环境有JDK1.8,maven。我本地的maven版本是3.0.5,最好还是使用更新些的版本,直接执行
./dev/make-distribution.sh --name custom-spark --tgz  -Phadoop-2.6 -Phive -Phive-thriftserver -Pmesos -Pyarn
  • 第一次编译的时候使用了‘-Psparkr’,编译不通过,应该是我本地没装R的原因,考虑到项目中用不到R,于是去掉这个参数进行编译,大概10分钟左右,编译完毕。
  • 将编译后的‘spark-2.3.0-SNAPSHOT-bin-custom-spark.tgz’解压即可。
  • 运行spark-shell,发现在local模式下正常运行,在yarn上无法初始化SparkContext

Unsupported major.minor version 52.0

  • 经过查看yarn的8088端口的报错信息,发现是Unsupported major.minor version 52.0,即java版本不匹配,52.0对应于jdk8,进行编译的环境是jdk8,查看集群的几台机器上发现java版本也是jdk8.
  • 后来想到可能是cloudera manager的jdk版本制定的和机器上环境变量的版本不同,通过查看发现机器上装了三个版本的jdk,jdk6,7,8.还有个default是jdk6.于是显式的制定jdk的位置,从cm上,host–configuration–advanced–java-home,显式指定jdk的位置,重启集群和服务。spark-shell运行成功。

linux 逻辑卷重新分区

  • 在启动集群时,发现集群的log目录将近满了,使用df -h 命令查看发现 /目录下只分了50g,/home目录下分了1T多,很不合理,于是重新分区。
  • 参考这篇文章CentOS 7 调整 home分区 扩大 root分区

运行 insert overwrite directory permission deny

  • 编译完spark之后,使用beeline连接spark-sql。在hive-site.xml中配置完之后,连接。
  • 运行‘insert overwrite directory时,发现权限不够,而写入的路径明明是777的,通过查看log发现原来是spark运行过程中会在777的路径下新建644的文件夹写入中间数据,而使用beeline连接时,未输入用户,用户是anonymous’,所以写入受限。
  • 于是重新连接beeline,输入相应的用户和密码即可。