【问题标题】:Apache Toree to connect to a remote spark clusterApache Toree 连接到远程 Spark 集群
【发布时间】:2017-02-17 18:15:18
【问题描述】:

有没有办法将 Apache Toree 连接到远程 spark 集群?我看到常见的命令是

jupyter toree install --spark_home=/usr/local/bin/apache-spark/

如何在远程服务器上使用 spark 而无需在本地安装?

【问题讨论】:

  • 还有,有没有办法连接到远程 spark yarn 集群。

标签: apache-spark apache-toree


【解决方案1】:

确实有一种方法可以让 Toree 连接到远程 Spark 集群。

我发现最简单的方法是克隆现有的 Toree Scala/Python 内核,并创建一个新的 Toree Scala/Python 远程内核。这样您就可以选择在本地或远程运行。

步骤:

  1. 复制现有内核。在我的特定 Toree 安装中,内核的路径位于:/usr/local/share/jupyter/kernels/,因此我执行了以下命令:
    cp -pr /usr/local/share/jupyter/kernels/apache_toree_scala/ /usr/local/share/jupyter/kernels/apache_toree_scala_remote/

  2. 编辑/usr/local/share/jupyter/kernels/apache_toree_scala_remote/ 中的新kernel.json 文件,并将必需的Spark 选项添加到__TOREE_SPARK_OPTS__ 变量。从技术上讲,只需要--master <path>,但您也可以在变量中添加--num-executors、--executor-memory 等。

  3. 重启 Jupyter。

我的 kernel.json 文件如下所示:

{
  "display_name": "Toree - Scala Remote",
  "argv": [
    "/usr/local/share/jupyter/kernels/apache_toree_scala_remote/bin/run.sh",
    "--profile",
    "{connection_file}"
  ],
  "language": "scala",
  "env": {
    "PYTHONPATH": "/opt/spark/python:/opt/spark/python/lib/py4j-0.9-src.zip",
    "SPARK_HOME": "/opt/spark",
    "DEFAULT_INTERPRETER": "Scala",
    "PYTHON_EXEC": "python",
    "__TOREE_OPTS__": "",
    "__TOREE_SPARK_OPTS__": "--master spark://192.168.0.255:7077 --deploy-mode client --num-executors 4 --executor-memory 4g --executor-cores 8 --packages com.databricks:spark-csv_2.10:1.4.0"
  }
}

【讨论】:

  • 注意,如果环境变量SPARK_OPTS存在,则优先,__TOREE_SPARK_OPTS__有任何作用。如果是这样的话,应该去修改SPARK_OPTS而不是__TOREE_SPARK_OPTS__
【解决方案2】:

这是一个可能的示例,其中包含任何远程集群安装的一些直观细节。对于我的远程集群,即 Cloudera 5.9.2,这些是特定步骤。 (您也可以使用此示例通过一些智能编辑与非 Cloudera 集群一起安装。)

使用 OS/X 构建 CDH 版本(如果使用发行版则跳过):

  1. 转到 https://github.com/Myllyenko/incubator-toree 并克隆此 repo

  2. 下载 Docker

  3. 设置“签名” - 我设置这个已经有一段时间了 - 你需要在上面的构建上签名。待定

  4. 'new branch git',编辑 .travis.xml、README.md 和 build.sbt 文件,将 5.10.x 更改为 5.9.2

  5. 启动 Docker,在 make release 目录中 cd,使用 make release 构建,等待,等待,签署 3 个构建

  6. 将文件 ./dist/toree-pip/toree-0.2.0-spark-1.6.0-cdh5.9.2.tar.gz 复制到可以访问 YARN 控制的 Spark 集群的 spark-shell 机器

  7. 将你的 repo 合并、提交等到你的主 repo,如果这将是关键任务

Spark 机器安装:

警告:作为最后的手段,可能需要以 root 身份完成某些步骤

  1. 安装 pip / anaconda(参见其他文档)

  2. 安装 Jupyter sudo pip install jupyter

  3. 安装 toree sudo pip install toree-0.2.0-spark-1.6.0-cdh5.9.2 或使用 apache-toree 分发版

将 Toree 配置为与 Jupyter 一起运行(示例): 编辑并添加到~/.bash_profile

echo $PATH
PATH=$PATH:$HOME/bin
export PATH
echo $PATH

export CDH_SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark
export SPARK_HOME=/opt/cloudera/parcels/CDH-5.9.2-1.cdh5.9.2.p0.3/lib/spark
export PYTHONPATH=$PYTHONPATH:$SPARK_HOME/python:$SPARK_HOME/python/lib
export SPARK_CONF_DIR=/etc/spark/conf
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
PATH=$PATH:$SPARK_HOME/bin
export PATH
echo $PATH

export SPARK_PKGS=$(cat << END | xargs echo | sed 's/ /,/g'
com.databricks:spark-csv_2.10:1.5.0
END
)

export SPARK_JARS=$(cat << END | xargs echo | sed 's/ /,/g'
/home/mymachine/extras/someapp.jar
/home/mymachine/extras/jsoup-1.10.3.jar
END
)

export TOREE_JAR="/usr/local/share/jupyter/kernels/apache_toree_scala/lib/toree-assembly-0.2.0-spark-1.6.0-cdh5.9.2-incubating.jar"

export SPARK_OPTS="--master yarn-client --conf spark.yarn.config.gatewayPath=/opt/cloudera/parcels --conf spark.scheduler.mode=FAIR --conf spark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-5.9.2-1.cdh5.9.2.p0.3/lib/hadoop/lib/native:/opt/cloudera/parcels/CDH-5.9.2-1.cdh5.9.2.p0.3/lib/hadoop --conf spark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-5.9.2-1.cdh5.9.2.p0.3/lib/hadoop/lib/native:/opt/cloudera/parcels/CDH-5.9.2-1.cdh5.9.2.p0.3/lib/hadoop --conf spark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-5.9.2-1.cdh5.9.2.p0.3/lib/hadoop/lib/native:/opt/cloudera/parcels/CDH-5.9.2-1.cdh5.9.2.p0.3/lib/hadoop --conf spark.yarn.historyServer.address=http://yourCDHcluster.net:18088  --conf spark.default.parallelism=20  --conf spark.driver.maxResultSize=1g --conf spark.driver.memory=1g  --conf spark.executor.cores=4 --conf spark.executor.instances=5  --conf spark.executor.memory=1g --packages $SPARK_PKGS --jars $SPARK_JARS"

function jti() {
    jupyter toree install \
    --replace \
    --user \
    --kernel_name="CDH 5.9.2 Toree" \
    --debug \
    --spark_home=${SPARK_HOME} \
    --spark_opts="$SPARK_OPTS" \
    --log-level=0
}
function jn() {
    jupyter notebook --ip=127.0.0.1 --port=8888 --debug --log-level=0
}

如果您希望使用不同的端口访问 Toree - 现在是您编辑 8888 的机会@

  1. 退出您的 Toree / spark-shell 机器

  2. ssh 回到那台机器ssh -L 8888:localhost:8888 toreebox.cdhcluster.net(假设8888 是bash 文件中的端口)

  3. 我希望作为用户(不是 root)您可以键入 jti 将 Toree 安装到 Jupyter 中(注意:了解此步骤可能有助于将其他内核安装到 Jupyter - 边栏:@jamcom 提到 生成的文件,但此步骤会自动生成此部分。该文件以用户而不是 root 身份隐藏在您的主目录树中。

  4. 作为用户,键入 jn 以启动 Jupyter Notebook。等待几秒钟,直到浏览器 URL 可用,然后将该 URL 粘贴到您的浏览器中。

  5. 您现在运行了 Jupyter,因此请选择一个新的 CDH 5.9.2 Toree 或您安装的版本。这将启动一个新的浏览器窗口。由于您有一些 Toree 经验,因此请选择 sc.getConf.getAll.sortWith(_._1 &lt; _._1).foreach(println) 之类的内容,以使延迟实例化的 spark 上下文继续运行。当您的作业提交到集群时,请务必耐心等待,如果您的集群很忙,您可能需要等待很长时间,或者您的作业需要等待一段时间才能在集群中处理。

提示和技巧:

我在第一次运行时遇到了问题,随后的运行从未发现该问题。 (问题问题可能已在 github 中修复)

有时,我必须在 YARN 上关闭旧的“Apache Toree”应用程序才能启动新的 Toree。

有时,我的虚拟机可能有一个孤立的 JVM。如果您在启动 Jupyter Notebook/Toree 时遇到内存错误或意外断开连接,请使用 top 检查您的进程列表。并且...杀死额外的 JVM(小心识别丢失的进程)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2018-07-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多