设置 Jupyter Pyspark 在 EC2 和 EMR 之间工作

问题描述 投票:0回答:4

我有一个在 EMR 中运行的 Spark 集群。我还有一个在第二台 EC2 机器上运行的 jupyter 笔记本。我想通过 jupyter 在我的 EC2 实例上使用 Spark。我正在寻找有关如何配置 Spark 以从 EC2 访问 EMR 集群的参考。搜索只为我提供了如何在 EMR 或 EC2 上设置 Spark 的指南,但没有提供如何从另一个访问其中之一的指南。

我在这里看到了类似的问题:

从 EC2 上运行的 Jupyter/IPython 向 EMR 集群发送命令

但是,那里的设置使用引导操作来设置 zeppelin,并且我不确定如何在 EC2 上编辑我的 hadoop 配置。

amazon-web-services apache-spark amazon-ec2 pyspark jupyter-notebook
4个回答
1
投票

这已经很晚了,但会帮助人们在未来寻找解决方案。

这里的解决方案是将 hadoop、spark 和 hive 配置文件从 EMR 集群节点复制到 EC2 机器,并将它们放置在每个节点相应的配置位置(示例配置文件应该已经存在于类似于 /etc/hadoop/conf 的位置) 。现在,您的 ec2 机器将开始使用 EMR 节点作为所有作业的主节点。

如果您遇到任何 DNS 识别问题,请将所有出现的主节点 DNS 名称替换为实际 IP,或在 /etc/hosts 文件中添加一个条目,使其可被 ec2 机器识别。

sudo scp -i sample.pem /etc/hadoop/conf/ ec2-user@some_ip:/home/ec2-user/spark/hadoop/conf
sudo scp -i sample.pem /etc/hive/conf/ ec2-user@some_ip:/home/ec2-user/spark/hive/conf
sudo scp -i sample.pem /etc/spark/conf/ ec2-user@some_ip:/home/ec2-user/spark/spark/conf

现在使用 sudo copy 命令将它们放在相应的位置


0
投票

正确的方法是在主节点(分配为主节点的 EC2 实例)中运行 Jupyter 并在那里提交 Spark 应用程序。


0
投票

您可以使用 EMR 笔记本来满足您的需求。它位于集群外部,您可以连接到您选择的任何 EMR 集群。

更多详细信息请参见:https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-management-notebooks.html

您还可以从笔记本中添加 Pyspark 作业所需的任何 Python 依赖项。这些将在 EMR 集群上可用,并在您自己的笔记本会话中隔离。

更多详细信息请参见:https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-management-notebooks-scoped-libraries.html


0
投票

要在 EC2 Jupyter Notebook 中配置 SparkSession 以与 EMR (6.x.x) Spark master 连接,请执行以下操作

  1. 在 EMR 集群上,启动 Spark Connect 服务器:
# The version assumed here is 3.5.0
sudo /usr/lib/spark/sbin/start-connect-server.sh --packages org.apache.spark:spark-connect_2.12:3.5.0
# OR 
sudo /usr/lib/spark/sbin/start-connect-server.sh --packages org.apache.spark:spark-connect_2.12:3.5.0 --conf spark.sql.catalogImplementation=hive ----conf spark.hadoop.hive.metastore.uris=thrift://<EMR-MASTER-NODE-PRIVATE-IP>:9083 
# Replace <EMR-MASTER-NODE-PRIVATE-IP> with your EMR master node's private IP address

# Check pyspark version in EMR (Login into EMR server as hadoop user.) 
pyspark --version
# The same version will be referred in the next steps
  1. 在带有 Jupyter Notebook 的 EC2 实例上:

    • 下载并解压 Spark 3.5.0 [ https://spark.apache.org/downloads.html ]
    • 将解压后的内容移动到
      /opt/spark
      或适当的目录
    • 设置环境变量
      export SPARK_HOME=/opt/spark
      export PATH=$SPARK_HOME/bin:$PATH
      export PATH=$SPARK_HOME/sbin:$PATH
      
    • 安装所需的软件包:pandas、pyarrow、grpcio、protobuf
    • 安装与上述 EMR 相同的 pyspark 版本
      pip3 install pyspark==3.5.0
      
  2. 在 EC2 Jupyter Notebook 中,使用以下代码进行连接:

from pyspark.sql import SparkSession
spark = SparkSession.builder \
 .remote("sc://<EMR-MASTER-NODE-PRIVATE-IP>:15002") \
 .config("spark.sql.catalogImplementation", "hive") \
 .config("spark.hadoop.fs.s3.impl", "com.amazon.ws.emr.hadoop.fs.EmrFileSystem") \
 .config("spark.sql.session.localRelationCacheThreshold", "1000") \
 .getOrCreate()
      ```
# Replace <EMR-MASTER-NODE-PRIVATE-IP> with the EMR master node's private IP address.
  1. 在 ec2 jupyter 中使用以下内容验证 Spark 配置。
print("spark master          - ",spark.conf.get("spark.master"))
print("spark executer memory - ",spark.conf.get("spark.executor.memory"))
print("spark driver memory   - ",spark.conf.get("spark.driver.memory"))
print("spark no of cores     - ",spark.conf.get("spark.executor.cores"))
© www.soinside.com 2019 - 2024. All rights reserved.