Important
Microsoft SQL Server 2019 빅 데이터 클러스터는 사용 중지되었습니다. SQL Server 2019 빅 데이터 클러스터에 대한 지원은 2025년 2월 28일부터 종료되었습니다. 자세한 내용은 Microsoft SQL Server 플랫폼의 공지 블로그 게시물 및 빅 데이터 옵션을 참조하세요.
이 기사에서는 실패하는 pyspark 노트북 문제를 해결하는 방법을 보여줍니다.
Azure Data Studio에서 PySpark 작업의 아키텍처
Azure Data Studio는 SQL Server 빅 데이터 클러스터의 livy 엔드포인트와 통신합니다.
엔드포인트는 livy 빅 데이터 클러스터 내에서 명령을 실행 spark-submit 합니다. 각 spark-submit 명령에는 YARN을 클러스터 리소스 관리자로 지정하는 매개 변수가 있습니다.
PySpark 세션의 문제를 효율적으로 해결하려면 각 계층(Livy, YARN 및 Spark) 내에서 로그를 수집하고 검토합니다.
이 문제 해결 단계에는 다음이 필요합니다.
- Azure Data CLI
azdata가 설치되고 구성이 클러스터에 올바르게 설정되었습니다. - Linux 명령 및 일부 로그 문제 해결 기술 실행에 대한 숙지
Troubleshooting steps
스택 및 오류 메시지를
pyspark에서 검토합니다.Notebook의 첫 번째 셀에서 애플리케이션 ID를 가져옵니다. 이 애플리케이션 ID를 사용하여
livy, YARN 및 spark 로그를 조사합니다.SparkContext에서는 이 YARN 애플리케이션 ID를 사용합니다.
로그를 가져옵니다.
"
azdata bdc debug copy-logs를 사용하여 조사하십시오"다음 예제에서는 빅 데이터 클러스터 엔드포인트를 연결하여 로그를 복사합니다. 실행하기 전에 예제에서 다음 값을 업데이트합니다.
-
<ip_address>: 빅 데이터 클러스터 엔드포인트 -
<username>: 빅 데이터 클러스터 사용자 이름 -
<namespace>: 클러스터의 Kubernetes 네임스페이스 -
<folder_to_copy_logs>: 로그를 복사할 로컬 폴더 경로
azdata login --auth basic --username <username> --endpoint https://<ip_address>:30080 azdata bdc debug copy-logs -n <namespace> -d <folder_to_copy_logs>Example output
<user>@<server>:~$ azdata bdc debug copy-logs -n <namespace> -d copy_logs Collecting the logs for cluster '<namespace>'. Collecting logs for containers... Creating an archive from logs-tmp/<namespace>. Log files are archived in /home/<user>/copy_logs/debuglogs-<namespace>-YYYYMMDD-HHMMSS.tar.gz. Creating an archive from logs-tmp/dumps. Log files are archived in /home/<user>/copy_logs/debuglogs-<namespace>-YYYYMMDD-HHMMSS-dumps.tar.gz. Collecting the logs for cluster 'kube-system'. Collecting logs for containers... Creating an archive from logs-tmp/kube-system. Log files are archived in /home/<user>/copy_logs/debuglogs-kube-system-YYYYMMDD-HHMMSS.tar.gz. Creating an archive from logs-tmp/dumps. Log files are archived in /home/<user>/copy_logs/debuglogs-kube-system-YYYYMMDD-HHMMSS-dumps.tar.gz.-
Livy 로그를 검토합니다. Livy 로그는
<namespace>\sparkhead-0\hadoop-livy-sparkhistory\supervisor\log에 있습니다.- pyspark Notebook 첫 번째 셀에서 YARN 애플리케이션 ID를 검색합니다.
-
ERR상태를 검색합니다.
Livy 로그의 상태가
YARN ACCEPTED인 예입니다. Livy는 원사 신청서를 제출했습니다.HH:MM:SS INFO utils.LineBufferedStream: YYY-MM-DD HH:MM:SS INFO impl.YarnClientImpl: Submitted application application_<application_id> YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: YYY-MM-DD HH:MM:SS INFO yarn.Client: Application report for application_<application_id> (state: ACCEPTED) YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: YYY-MM-DD HH:MM:SS INFO yarn.Client: YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: client token: N/A YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: diagnostics: N/A YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: ApplicationMaster host: N/A YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: ApplicationMaster RPC port: -1 YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: queue: default YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: start time: ############ YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: final status: UNDEFINED YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: tracking URL: https://sparkhead-1.fnbm.corp:8090/proxy/application_<application_id>/ YY/MM/DD HH:MM:SS INFO utils.LineBufferedStream: user: <account>YARN UI를 검토하기
Azure Data Studio 빅 데이터 클러스터 관리 대시보드에서 YARN 엔드포인트 URL을 얻거나 실행
azdata bdc endpoint list –o table합니다.For example:
azdata bdc endpoint list -o tableReturns
Description Endpoint Name Protocol ------------------------------------------------------ ---------------------------------------------------------------- -------------------------- ---------- Gateway to access HDFS files, Spark https://knox.<namespace-value>.local:30443 gateway https Spark Jobs Management and Monitoring Dashboard https://knox.<namespace-value>.local:30443/gateway/default/sparkhistory spark-history https Spark Diagnostics and Monitoring Dashboard https://knox.<namespace-value>.local:30443/gateway/default/yarn yarn-ui https Application Proxy https://proxy.<namespace-value>.local:30778 app-proxy https Management Proxy https://bdcmon.<namespace-value>.local:30777 mgmtproxy https Log Search Dashboard https://bdcmon.<namespace-value>.local:30777/kibana logsui https Metrics Dashboard https://bdcmon.<namespace-value>.local:30777/grafana metricsui https Cluster Management Service https://bdcctl.<namespace-value>.local:30080 controller https SQL Server Master Instance Front-End sqlmaster.<namespace-value>.local,31433 sql-server-master tds SQL Server Master Readable Secondary Replicas sqlsecondary.<namespace-value>.local,31436 sql-server-master-readonly tds HDFS File System Proxy https://knox.<namespace-value>.local:30443/gateway/default/webhdfs/v1 webhdfs https Proxy for running Spark statements, jobs, applications https://knox.<namespace-value>.local:30443/gateway/default/livy/v1 livy https애플리케이션 ID와 개별 application_master 및 컨테이너 로그를 확인합니다.
YARN 애플리케이션 로그를 검토합니다.
앱에 대한 애플리케이션 로그를 가져옵니다. 예를 들어
kubectl를 사용하여sparkhead-0Pod에 연결합니다.kubectl exec -it sparkhead-0 -- /bin/bash그런 다음, 오른쪽
application_id을 사용하여 해당 셸 내에서 이 명령을 실행합니다.yarn logs -applicationId application_<application_id>오류 또는 스택 찾기.
hdfs에 대한 사용 권한 오류의 예입니다. Java 스택에서
Caused by:를 찾아보세요.YYYY-MM-DD HH:MM:SS,MMM ERROR spark.SparkContext: Error initializing SparkContext. org.apache.hadoop.security.AccessControlException: Permission denied: user=<account>, access=WRITE, inode="/system/spark-events":sph:<bdc-admin>:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:399) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:255) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:193) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1852) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1836) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1795) at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.resolvePathForStartFile(FSDirWriteFileOp.java:324) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2504) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileChecked(FSNamesystem.java:2448) Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=<account>, access=WRITE, inode="/system/spark-events":sph:<bdc-admin>:drwxr-xr-xSPARK UI를 검토합니다.
단계별 작업의 오류를 찾기 위해 더 깊이 파고듭니다.