在使用 HDI 3.6 的集群上,Spark 始终使用旧的 1.6.3 版本

On a cluster using HDI 3.6, Spark always uses the old 1.6.3 version

我有一个 HDInsight 集群 运行ning 3.6,根据 docs 仅捆绑了 Spark 2.1.0。

显然 Livy 尚未与此版本集成,并且尝试 curl Livy(如 Spark 作业的 Azure 教程文档所建议的那样)导致 HTTP 502 BAD GATEWAY 响应- 所以我正在尝试手动提交 spark 作业。

但是,当我通过 ssh 进入主节点并使用 spark-submit 时,我立即注意到包装器脚本打印了以下内容:

SPARK_MAJOR_VERSION is set to 1, using spark1

所以我假设设置 SPARK_MAJOR_VERSION=2 会强制它为 运行 spark2,并且包装器确实检测到它并按应有的方式打印它。但是spark的版本实际上并没有改变。我收到一个二进制不兼容错误(与 Scala 一样神秘 - 关于 funcArrow)。

我查看了 spark-wrapper.sh 文件,发现它处理不同版本的 spark 的位置:

else
    echo -e "SPARK_MAJOR_VERSION is set to ${SPARK_MAJOR_VERSION}, using Spark${SPARK_MAJOR_VERSION}" 1>&2
    SCRIPT="/usr/hdp/current/spark${SPARK_MAJOR_VERSION}-client/bin/${FILE}"
fi

因此,我在 /usr/hdp/current/spark2-client 中启动了 spark-shell 可执行文件,它立即打印出以下内容:

Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.3
      /_/

Using Scala version 2.10.5 (OpenJDK 64-Bit Server VM, Java 1.8.0_131)

Spark 2.1.0 使用 Scala 2.11 - 2.10 会显示弃用警告 - 所以 HDInsight 肯定在使用 Spark 1.x

我是不是遗漏了什么或者这是一个已知问题?

附加信息: 我使用 powershell cmdlet 创建了这个集群 - 但集群肯定是 3.6.

这看起来不像 HDI 3.6 集群。或者实例有问题。 能查下版本吗?检查 Azure 门户或 ssh 会话类型:ls /usr/hdp。此命令将打印实际位的版本文件夹。它应该显示:2.6.0.10-29 或类似的基于 3.6 的集群。

事实证明,因为我正在使用 powershell azure cmdlet 来配置集群,所以我无法指定我需要的集群类型(无论如何我都不知道)。我已经取下了 "faulty" 一个,但我知道在将版本设置为 3.6 时创建它时我没有收到任何错误。似乎 HDInsight 3.6 'necessarily' 没有随 Spark2 一起提供。

简而言之,使用 ARM(Azure 资源管理器)的模板系统进行配置要好得多。这样做会立即让我看到一个默认设置为 Spark2 的提示。查看模板,它很清楚地指出集群的类型是 SPARK2.