【问题标题】:Changing JDK on cluster deployed with ./spark-ec2在使用 ./spark-ec2 部署的集群上更改 JDK
【发布时间】:2016-04-02 18:24:36
【问题描述】:

我已经使用 Spark 部署了一个 Amazon EC2 集群,如下所示:

~/spark-ec2 -k spark -i ~/.ssh/spark.pem -s 2 --region=eu-west-1 --spark-version=1.3.1 launch spark-cluster

我首先将我需要的文件复制到主服务器,然后使用以下方法从主服务器复制到 HDFS:

ephemeral-hdfs/bin/hadoop fs -put ~/ANTICOR_2_10000.txt ~/user/root/ANTICOR_2_10000.txt

我有一个我想运行的 jar,它是用 JDK 8 编译的(我使用了很多 Java 8 功能),所以我用 scp 复制它并运行它:

spark/bin/spark-submit --master spark://public_dns_with_port --class package.name.to.Main job.jar -f hdfs://public_dns:~/ANTICOR_2_10000.txt

问题是 spark-ec2 使用 JDK7 加载集群,所以我得到了 Unsupported major.minor version 52.0

我的问题是,所有我需要将JDK7更改为JDK8的地方?

到目前为止,我在 master 上执行的步骤是:

  • 用 yum 安装 JDK8
  • 使用 sudo alternatives --config java 并将首选 java 更改为 java-8
  • export JAVA_HOME=/usr/lib/jvm/openjdk-8

我必须对所有节点都这样做吗?我还需要更改 hadoop 在ephemeral-hdfs/conf/hadoop-env.sh 使用的 java 路径还是我错过了其他任何地方?

【问题讨论】:

  • 有没有办法为所有奴隶做一次?
  • @M-T-A 不,我没有找到。我发现最有效的方法是使用 Terminator (launchpad.net/terminator) 在所有从属设备中 ssh 并一次手动更改所有从属设备中的 JDK。
  • 为了将来参考,pssh -i -h /root/spark-ec2/slaves <command> 肯定会在所有从属服务器上运行此命令。
  • @M-T-A 我明白了,谢谢你的提示!

标签: hadoop amazon-ec2 apache-spark spark-ec2


【解决方案1】:

不幸的是,Amazon 尚不提供开箱即用的 Java 8 安装:see available versions

您是否看过 this post 以了解如何在运行的实例上安装它?

【讨论】:

    【解决方案2】:

    这是我为所有与默认安装提供的版本不同的 java 安装所做的:-

    1. 在每台机器/节点上配置 JAVA_HOME 环境变量:-

      导出 JAVA_HOME=/home/ec2-user/softwares/jdk1.7.0_25

    2. 修改默认 PATH 并将 "java/bin" 目录放在所有 Nodes/ 机器上 PATH 的其余部分之前。

      导出 PATH=/home/ec2-user/softwares/jdk1.7.0_25/bin/:$M2:$SCALA_HOME/bin/:$HIVE_HOME/bin/:$PATH:

    以上需要使用相同的“操作系统用户”来完成,该用户用于执行/拥有 spark master/worker 进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多