2017-11-09 11 views
1

우리는 Apache Hadoop YARN에서 Spark 작업을 실행하고 있습니다. 나는이 작업에 "LD_PRELOAD 트릭"을 사용해야 할 특별한 필요가있다. (패닉이 발생하기 전에는 프로덕션 실행을위한 것이 아니며 자동화 된 작업 테스트의 일부 임).Apache Spark (또는 YARN)과 함께 LD_PRELOAD 사용

나는 작업과 추가 파일을 제출하는 방법을 알고, 나는 그렇게 거의 솔루션 제공 spark-defaults.conf 이러한 설정을 추가하는 노드에서 환경 변수를 설정하는 방법을 알고 :

spark.files=/home/todd/pwn_connect.so 
spark.yarn.appMasterEnv.LD_PRELOAD=pwn_connect.so 
spark.executorEnv.LD_PRELOAD=pwn_connect.so 

는하지만이 얻을 컨테이너 로그의 오류 :

ERROR: ld.so: object 'pwn_connect.so' from LD_PRELOAD cannot be preloaded: ignored. 

문제는 LD_PRELOAD가 제공하는 상대 경로를 허용하지 않는 것 같습니다. 하지만 절대 경로를 제공하는 방법을 모르겠습니다. 노드의 로컬 파일 시스템에서 이러한 파일을 배치 할 수있는 단서가 없습니다.

답변

0

먼저 YARN에서 실행될 때는 spark.files이 사용되지 않습니다. spark.yarn.dist.files이어야합니다. 그리고 --files 인수가 spark-submit에게 제공된 경우이 값을 덮어 씁니다. LD_PRELOAD를 들어

, 작동 두 가지 해결책이 있습니다 : 사용할 수 있습니다

  1. 상대 경로는; 그들은 ./로 시작해야합니다 :

    spark.yarn.dist.files=/home/todd/pwn_connect.so 
    spark.yarn.appMasterEnv.LD_PRELOAD=./pwn_connect.so 
    spark.executorEnv.LD_PRELOAD=./pwn_connect.so 
    

    (./없이 상대 경로가 아니라 현재 작업 디렉토리 대신에 LD_LIBRARY_PATH를 검색).

    spark.yarn.dist.files=/home/todd/pwn_connect.so 
    spark.yarn.appMasterEnv.LD_PRELOAD=$PWD/pwn_connect.so 
    spark.executorEnv.LD_PRELOAD=$PWD/pwn_connect.so 
    
    : 절대 경로를 선호하는 경우

  2. Spark source code를 검사하는 것은 환경 변수 할당을 포함하여 전체 명령 행 쉘에 의해 확장 될 수 있습니다, 그래서 표현 $PWD가 현재 작업 디렉토리로 확대 될 것으로 보여