Как использовать GraphFrames на бессерверном сервере EMR

Резюме выполненных шагов:

  1. Загрузил скрипт python на S3.
  2. Создал виртуальную среду, которая устанавливает графические фреймы, и загрузил ее на S3.
  3. Добавил VPC в мое приложение EMR.
  4. Добавлен пакет graphframes для искровой конфигурации.

Сообщение об ошибке было:

22/09/11 18:44:49 INFO Utils: /home/hadoop/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar ранее был скопирован в /tmp/spark-d0c75876-b210-4ce2-b2f8-cd65e59d00db/userFiles-1aef56b8-1c39-4158-b9a2-ee810a844314/org.slf4j_slf4j-api-1.7.16.jar
22/09/11 18:44:49 ИНФОРМАЦИЯ Исполнитель: Загрузка файла:/tmp/spark-ae6aefff- 23d3-447e-a743-5ed41621fad0/pyspark_ge.tar.gz#environment with timestamp 1662921887645
22/09/11 18:44:49 INFO Utils: Copying /tmp/spark-ae6aefff-23d3-447e-a743-5ed41621fad0/pytarpark_ge. .gz в /tmp/spark-7f9cf09a-dc6e-41e0-b187-61f1b5a80670/pyspark_ge.tar.gz
09.22.11 18:44:49 ИНФО Исполнитель: Распаковка файла архива: /tmp/spark-ae6aefff-23d3-447e-a743-5ed41621fad0/pyspark_ge.tar.gz#environment from /tmp/spark-7f9cf09a-dc6e- 41e0-b187-61f1b5a80670/pyspark_ge.tar.gz в /tmp/spark-d0c75876-b210-4ce2-b2f8-cd65e59d00db/userFiles-1aef56b8-1c39-4158-b9a2-ee810a844314/среда 114/09 4:
198 INFO Executor: Получение spark://[2600:1f18:61b4:c700:3016:ab0c:287a:ccaf]:34507/jars/org.slf4j_slf4j-api-1.7.16.jar с отметкой времени 166292188764522/09/11
18 :44:50 ОШИБКА Utils: Прерывание задачи
java.io.IOException: Не удалось подключиться к /2600:1f18:61b4:c700:3016:ab0c:287a:ccaf:34507
в org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:288)

Может ли кто-нибудь указать мне решение/документацию, которая помогает решить эту проблему?

ПРИЛОЖЕНИЕ
Я также пытался добавить только пакет graphframes, но получил ошибку "numpy not found".

Более подробные шаги

  1. скрипт питона:
      import sys
from operator import add
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext
from graphframes import *

print('job started')

conf = (SparkConf()
    .setMaster("local")
    .setAppName("GraphDataFrame")
    .set("spark.executor.memory", "1g"))
sc = SparkContext(conf = conf)
sqlContext = SQLContext(sc)

if __name__ == "__main__":
    # Create a Vertex DataFrame with unique ID column "id"

    v = sqlContext.createDataFrame([
        ("a", "Alice", 34),
        ("b", "Bob", 36),
        ("c", "Charlie", 30),
        ], ["id", "name", "age"])

    # Create an Edge DataFrame with "src" and "dst" columns
    e = sqlContext.createDataFrame([
        ("a", "b", "friend"),
        ("b", "c", "follow"),
        ("c", "b", "follow"),
        ], ["src", "dst", "relationship"])

    # Create a GraphFrame
    from graphframes import *
    g = GraphFrame(v, e)

    # Query: Get in-degree of each vertex.
    print(g.inDegrees.show())

    # Query: Count the number of "follow" connections in the graph.
    g.edges.filter("relationship = 'follow'").count()

    # Run PageRank algorithm, and show results.
    results = g.pageRank(resetProbability=0.01, maxIter=20)
    print(results.vertices.select("id", "pagerank").show())

    sc.stop()
  1. Virtualenv Dockerfile скомпилирован и скопирован на S3.
      FROM --platform=linux/amd64 amazonlinux:2 AS base
RUM yum install -y python
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install venv-pack==0.2.0
RUN python3 -m pip install graphframes
...
  1. Просто добавил сгенерированный по умолчанию VPC с NAT.
  2. Добавлены граффреймы Conf:
      --conf spark.jars.packages=graphframes:graphframes:0.8.2-spark3.2-s_2.12
  1. Конф для virtualenv
      --conf spark.archives=s3://bucket_name/venv.tar.gz#environment  
--conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=./environment/bin/python  
--conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=./environment/bin/python  
--conf spark.executorEnv.PYSPARK_PYTHON=./environment/bin/python  

0 ответов

Другие вопросы по тегам