EMR Studio에서 magic 명령으로 커널 개선 - Amazon EMR

EMR Studio에서 magic 명령으로 커널 개선

개요

EMR Studio와 EMR Notebooks은 magic 명령을 지원합니다. Magic 명령 또는 magic은 IPython 커널이 데이터를 실행하고 분석하는 데 도움이 되도록 제공하는 향상된 기능입니다. IPython은 Python으로 구축된 대화형 쉘 환경입니다.

또한 Amazon EMR은 Spark 관련 커널(PySpark, SparkR 및 Scala 커널)에 특정 magic 명령을 제공하고, 클러스터에서 Livy를 사용하여 Spark 작업을 제출하는 패키지 Sparkmagic을 지원합니다.

EMR 노트북에 Python 커널이 있으면 magic 명령을 사용할 수 있습니다. 마찬가지로 모든 Spark 관련 커널은 Sparkmagic 명령을 지원합니다.

magic이라고도 하는 Magic 명령에는 두 가지 종류가 있습니다.

  • 줄 magic - 이 magic 명령은 단일 % 접두사로 표시되며 한 줄의 코드에서 작동함

  • 셀 magic - 이 magic 명령은 이중 %% 접두사로 표시되며 여러 줄의 코드에서 작동함

사용 가능한 모든 magic에 대한 자세한 내용은 magic 및 Sparkmagic 명령 나열 섹션을 참조하세요.

고려 사항 및 제한

  • EMR Serverless는 spark-submit을 실행하도록 %%sh를 지원하지 않습니다. EMR Notebooks magic은 지원하지 않습니다.

  • Amazon EMR on EKS 클러스터는 EMR Studio용 Sparkmagic 명령을 지원하지 않습니다. 이는 관리형 엔드포인트와 함께 사용하는 Spark 커널이 Kubernetes에 내장되어 있으며, Sparkmagic 및 Livy에서는 지원되지 않기 때문입니다. 다음 예제에서 볼 수 있듯이 Spark 구성을 해결 방법으로 SparkContext 객체에 직접 설정할 수 있습니다.

    spark.conf.set("spark.driver.maxResultSize", '6g')
  • 다음 magic 명령 및 작업은 AWS에 의해 금지됩니다.

    • %alias

    • %alias_magic

    • %automagic

    • %macro

    • %configureproxy_user 수정

    • %env 또는 %set_envKERNEL_USERNAME 수정

magic 및 Sparkmagic 명령 나열

사용 가능한 magic 명령 목록을 보려면 다음 명령을 사용합니다.

  • %lsmagic은 현재 사용 가능한 모든 magic 함수를 나열합니다.

  • %%help는 Sparkmagic 패키지에서 제공하는 현재 사용 가능한 Spark 관련 magic 함수를 나열합니다.

%%configure를 사용하여 Spark 구성

가장 유용한 Sparkmagic 명령 중 하나는 세션 생성 파라미터를 구성하는 %%configure 명령입니다. conf 설정을 사용하여 Apache Spark 구성 설명서에 언급된 모든 Spark 구성을 구성할 수 있습니다.

예 Maven 리포지토리 또는 Amazon S3에서 EMR Notebooks으로 외부 JAR 파일 추가

다음 접근 방식을 사용하여 Sparkmagic에서 지원하는 모든 Spark 관련 커널에 외부 JAR 파일 종속 항목을 추가할 수 있습니다.

%%configure -f {"conf": { "spark.jars.packages": "com.jsuereth:scala-arm_2.11:2.0,ml.combust.bundle:bundle-ml_2.11:0.13.0,com.databricks:dbutils-api_2.11:0.0.3", "spark.jars": "s3://amzn-s3-demo-bucket/my-jar.jar" } }
예 : Hudi 구성

그런 다음 노트북 편집기를 이용해 Hudi를 사용하도록 EMR 노트북을 구성합니다.

%%configure { "conf": { "spark.jars": "hdfs://apps/hudi/lib/hudi-spark-bundle.jar,hdfs:///apps/hudi/lib/spark-spark-avro.jar", "spark.serializer": "org.apache.spark.serializer.KryoSerializer", "spark.sql.hive.convertMetastoreParquet":"false" } }

%%sh를 사용하여 spark-submit 실행

%%sh magic는 연결된 클러스터 인스턴스의 하위 프로세스에서 쉘 명령을 실행합니다. 일반적으로 Spark 관련 커널 중 하나를 사용하여 연결된 클러스터에서 Spark 애플리케이션을 실행합니다. 하지만 Python 커널을 사용하여 Spark 애플리케이션을 제출하려는 경우 다음 magic을 사용할 수 있습니다. 이때 버킷 이름을 소문자로 바꾼 버킷 이름으로 바꿉니다.

%%sh spark-submit --master yarn --deploy-mode cluster s3://amzn-s3-demo-bucket/test.py

이 예제에서는 클러스터가 s3://amzn-s3-demo-bucket/test.py의 위치에 액세스할 수 있어야 합니다. 그렇지 않으면 명령이 실패합니다.

%%sh magic과 함께 Linux 명령을 사용할 수 있습니다. Spark 또는 YARN 명령을 실행하려면 다음 옵션 중 하나를 사용하여 emr-notebook Hadoop 사용자를 생성하고 사용자에게 명령을 실행할 권한을 부여합니다.

%%display를 사용하여 Spark DataFrame 시각화

%%display magic을 사용하여 Spark DataFrame을 시각화할 수 있습니다. 이 magic을 사용하려면 다음 명령을 실행합니다.

%%display df

다음 이미지와 같이 결과를 테이블 형식으로 보도록 선택합니다.

결과를 테이블 형식으로 표시하는 %%display magic 사용 출력.

다섯 가지 유형의 차트로 데이터를 시각화하도록 선택할 수도 있습니다. 옵션으로, 파이, 산점도, 선형, 영역 및 막대 차트가 있습니다.

결과를 차트 형식으로 표시하는 %%display magic 사용 출력.

EMR Notebooks magic 사용

Amazon EMR은 Python3 및 Spark 기반 커널과 함께 사용할 수 있는 다음과 같은 EMR Notebooks magic을 제공합니다.

  • %mount_workspace_dir - Workspace의 다른 파일에서 코드를 가져오고 실행할 수 있도록 Workspace 디렉터리를 클러스터에 마운트

    참고

    %mount_workspace_dir을 사용하면 Python 3 커널만 로컬 파일 시스템에 액세스할 수 있습니다. Spark 실행기는 이 커널로 마운트된 디렉터리에 액세스할 수 없습니다.

  • %umount_workspace_dir - 클러스터에서 Workspace 디렉토리를 마운트 해제합니다.

  • %generate_s3_download_url - 노트북 출력에 Amazon S3 객체의 임시 다운로드 링크 생성

사전 조건

EMR Notebooks magic을 설치하려면 먼저 다음 작업을 완료해야 합니다.

  • 클러스터 EC2 인스턴스에 대한 서비스 역할(EC2 인스턴스 프로파일)에 Amazon S3에 대한 읽기 액세스 권한이 있는지 확인합니다. AmazonElasticMapReduceforEC2Role 관리형 정책을 포함하는 EMR_EC2_DefaultRole은 이 요구 사항을 충족합니다. 사용자 지정 역할 또는 정책을 사용하는 경우 필요한 S3 권한이 있는지 확인합니다.

    참고

    EMR Notebooks magic은 클러스터에서 노트북 사용자로 실행되며 EC2 인스턴스 프로파일을 사용하여 Amazon S3와 상호 작용합니다. EMR 클러스터에 Workspace 디렉터리를 마운트하면 해당 클러스터에 연결할 권한이 있는 모든 Workspace와 EMR Notebooks가 마운트된 디렉터리에 액세스할 수 있습니다.

    디렉터리는 기본적으로 읽기 전용으로 마운트됩니다. s3fs-fusegoofys에서 읽기-쓰기 마운트를 허용하는 동안에는 디렉터리를 읽기-쓰기 모드로 마운트하도록 마운트 파라미터를 수정하지 않는 것이 좋습니다. 쓰기 액세스를 허용하면 디렉터리에 대한 모든 변경 사항이 S3 버킷에 기록됩니다. 실수로 삭제하거나 덮어쓰는 것을 방지하기 위해 S3 버킷의 버전 관리를 활성화할 수 있습니다. 자세한 내용은 S3 버킷에서 버전 관리 사용을 참조하세요.

  • 클러스터에서 다음 스크립트 중 하나를 실행하여 EMR Notebooks magic에 대한 종속 항목을 설치합니다. 이미 실행 중인 클러스터가 있는 경우 스크립트를 실행하려면 사용자 지정 부트스트랩 작업 사용 작업을 수행하거나 Amazon EMR 클러스터에서 명령 및 스크립트 실행 지침을 따를 수 있습니다.

    설치할 종속 항목을 선택할 수 있습니다. s3fs-fusegoofys 모두 Amazon S3 버킷을 클러스터의 로컬 파일 시스템으로 마운트할 수 있는 사용자 공간의 파일 시스템(FUSE) 도구입니다. s3fs 도구는 POSIX와 비슷한 경험을 제공합니다. goofys 도구는 POSIX 호환 파일 시스템보다 성능을 선호하는 경우 적합합니다.

    Amazon EMR 7.x 시리즈는 EPEL 리포지토리를 지원하지 않는 Amazon Linux 2023을 사용합니다. Amazon EMR 7.x를 실행하는 경우 s3fs-fuse GitHub 지침에 따라 s3fs-fuse를 설치합니다. 5.x 또는 6.x 시리즈를 사용하는 경우 다음 명령을 사용하여 s3fs-fuse를 설치합니다.

    #!/bin/sh # Install the s3fs dependency for EMR Notebooks magics sudo amazon-linux-extras install epel -y sudo yum install s3fs-fuse -y

    또는

    #!/bin/sh # Install the goofys dependency for EMR Notebooks magics sudo wget https://github.com/kahing/goofys/releases/latest/download/goofys -P /usr/bin/ sudo chmod ugo+x /usr/bin/goofys

EMR Notebooks magic 설치

참고

Amazon EMR 릴리스 6.0~6.9.0 및 5.0~5.36.0에서는 emr-notebooks-magics 패키지 버전 0.2.0 이상에서만 %mount_workspace_dir magic을 지원합니다.

EMR Notebooks magic을 설치하려면 다음 단계를 완료합니다.

  1. 노트북에서 다음 명령을 실행하여 emr-notebooks-magics 패키지를 설치합니다.

    %pip install boto3 --upgrade %pip install botocore --upgrade %pip install emr-notebooks-magics --upgrade
  2. 커널을 다시 시작하여 EMR Notebooks magic을 로드합니다.

  3. 다음 명령을 사용하여 설치를 확인합니다. 그러면 %mount_workspace_dir에 대한 출력 도움말 텍스트가 표시됩니다.

    %mount_workspace_dir?

%mount_workspace_dir을 사용하여 Workspace 디렉토리 마운트

%mount_workspace_dir magic을 사용하면 Workspace 디렉터리를 EMR 클러스터에 마운트하여 디렉터리에 저장된 다른 파일, 모듈 또는 패키지를 가져오고 실행할 수 있습니다.

다음 예제에서는 전체 Workspace 디렉터리를 클러스터에 마운트하고, 디렉터리 마운트 시 goofys를 사용하도록 선택적 <--fuse-type> 인수를 지정합니다.

%mount_workspace_dir . <--fuse-type goofys>

Workspace 디렉터리가 마운트되었는지 확인하려면 다음 예제를 사용하여 ls 명령으로 현재 작업 디렉터리를 표시합니다. 출력에는 Workspace에 있는 모든 파일이 표시됩니다.

%%sh ls

Workspace에서 변경을 완료하면 다음 명령을 사용하여 Workspace 디렉터리를 마운트 해제할 수 있습니다.

참고

Workspace가 중지되거나 분리된 경우에도 Workspace 디렉터리는 클러스터에 마운트된 상태로 유지됩니다. Workspace 디렉터리를 명시적으로 마운트 해제해야 합니다.

%umount_workspace_dir

%generate_s3_download_url을 사용하여 Amazon S3 객체 다운로드

generate_s3_download_url 명령은 Amazon S3에 저장된 객체에 대한 사전 서명된 URL을 생성합니다. 사전 서명된 URL을 사용하여 객체를 로컬 시스템에 다운로드할 수 있습니다. 예를 들어 generate_s3_download_url을 실행하여 코드가 Amazon S3에 작성한 SQL 쿼리의 결과를 다운로드할 수 있습니다.

사전 서명된 URL은 기본적으로 60분 동안 유효합니다. --expires-in 플래그에 시간(초)을 지정하여 만료 시간을 변경할 수 있습니다. 예를 들어, --expires-in 1800은 30분 동안 유효한 URL을 생성합니다.

다음 예제는 전체 Amazon S3 경로(s3://EXAMPLE-DOC-BUCKET/path/to/my/object)를 지정하여 객체에 대한 다운로드 링크를 생성합니다.

%generate_s3_download_url s3://EXAMPLE-DOC-BUCKET/path/to/my/object

generate_s3_download_url 사용에 대해 자세히 알아보려면 다음 명령을 실행하여 도움말 텍스트를 표시합니다.

%generate_s3_download_url?

%execute_notebook을 사용하여 헤드리스 모드에서 노트북 실행

%execute_notebook magic을 사용하면 헤드리스 모드에서 다른 노트북을 실행하고 실행한 각 셀의 출력을 볼 수 있습니다. 이 magic을 사용하려면 Amazon EMR과 Amazon EC2가 공유하는 인스턴스 역할에 대한 추가 권한이 필요합니다. 추가 권한을 부여하는 방법에 대한 자세한 내용을 보려면 %execute_notebook? 명령을 실행합니다.

장기 실행 작업에서는 미활동으로 인해 시스템이 절전 모드로 전환되거나 인터넷 연결이 일시적으로 끊길 수 있습니다. 이로 인해 브라우저와 Jupyter Server 간 연결이 끊어질 수 있습니다. 이 경우 Jupyter 서버에서 실행하고 전송한 셀의 출력이 손실될 수 있습니다.

%execute_notebook magic을 사용하여 헤드리스 모드에서 노트북을 실행하면 로컬 네트워크에 장애가 발생하더라도 EMR Notebooks는 실행된 셀의 출력을 캡처합니다. EMR Notebooks는 실행한 노트북과 이름이 같은 새 노트북에 출력을 증분식으로 저장합니다. 그러면 EMR Notebooks는 노트북을 Workspace 내 새 폴더에 배치합니다. 헤드리스 실행은 동일한 클러스터에서 수행되고 서비스 역할 EMR_Notebook_DefaultRole을 사용하지만 추가 인수를 통해 기본값을 변경할 수 있습니다.

헤드리스 모드에서 노트북을 실행하려면 다음 명령을 사용합니다.

%execute_notebook <relative-file-path>

헤드리스 실행에 대한 클러스터 ID 및 서비스 역할을 지정하려면 다음 명령을 사용합니다.

%execute_notebook <notebook_name>.ipynb --cluster-id <emr-cluster-id> --service-role <emr-notebook-service-role>

Amazon EMR과 Amazon EC2가 인스턴스 역할을 공유하는 경우 역할에 다음과 같은 추가 권한이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:StartNotebookExecution", "elasticmapreduce:DescribeNotebookExecution", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::<AccoundId>:role/EMR_Notebooks_DefaultRole" } ] }
참고

%execute_notebook magic을 사용하려면 emr-notebooks-magics 패키지 버전 0.2.3 이상을 설치합니다.