복붙노트

[HADOOP] Spark (Scala) 드라이버에서 로컬 파일 시스템으로 쓰기 및 읽기

HADOOP

Spark (Scala) 드라이버에서 로컬 파일 시스템으로 쓰기 및 읽기

첫 번째 질문 : hadoop이있는 2 노드 가상 클러스터가 있습니다. 스파크 작업을 수행하는 항아리가 있습니다. 이 jar은 cli 인수로 jar에 실행할 명령을 알려주는 commands.txt 파일의 경로를 사용합니다.

spark-submit을 사용하여 작업을 실행했는데 마스터에서 로컬 인 commands.txt 파일을 찾을 수 없으므로 슬레이브 노드가 실행되고 있지 않은 것으로 나타났습니다.

이것은 내가 그것을 실행하는 데 사용한 명령입니다.

./spark-1.6.1-bin-hadoop2.6/bin/spark-submit --class 

univ.bigdata.course.MainRunner --master yarn\
 --deploy-mode cluster --executor-memory 1g \
--num-executors 4 \
final-project-1.0-SNAPSHOT.jar commands commands.txt

다음과 같이 commands.txt를 hdfs에 업로드하고 hdfs 경로를 제공해야합니까? :

hdfs://master:9000/user/vagrant/commands.txt

두 번째 질문 : cwd에서 드라이버 시스템의 파일에 어떻게 쓰나요? 나는 일반적인 scala filewriter를 사용하여 query_out.txt에 출력을 작성했으며 spark submit을 사용할 때 정상적으로 작동했습니다.

 -master local[]

그러나, 실행할 때

 -master yarn

파일을 찾을 수 없습니다. 예외가 발생하지 않지만 파일을 찾을 수 없습니다. 그것은 결코 쓰여지지 않은 것처럼 존재하지 않습니다. 드라이버 시스템의 파일에 결과를 로컬로 기록하는 방법이 있습니까? 아니면 HDFS에만 결과를 써야합니까?

감사.

해결법

  1. ==============================

    1.질문 1 : 예, hdfs 또는 네트워크 액세스 가능 파일 시스템에 업로드하면 문제를 해결할 수 있습니다.

    질문 1 : 예, hdfs 또는 네트워크 액세스 가능 파일 시스템에 업로드하면 문제를 해결할 수 있습니다.

    질문 2 :

    조금 까다 롭습니다. 결과가 RDD에 있다고 가정하면 collect ()를 호출하여 드라이버 프로세스의 모든 데이터를 집계합니다. 그런 다음 손에 디스크에 쓸 수있는 표준 컬렉션이 있습니다. 모든 결과를 메모리에 저장할 수 있도록 드라이버 프로세스에 충분한 메모리를 제공해야하며 최대 결과 크기를 늘리는 것도 잊지 마십시오. 매개 변수는 다음과 같습니다.

    -드라이버 메모리 16G --conf "spark.driver.maxResultSize = 15g"

    이것은 통신 복잡성과 메모리 (결과 RDD의 크기 모두)에서 스케일링 동작이 절대적으로 좋지 않습니다. 이것은 장난감 프로젝트 또는 데이터 세트가 항상 작은 경우에 가장 쉬운 방법이며 완벽하게 좋습니다. 다른 모든 경우에는 확실히 어느 시점에서 폭발 할 것입니다.

    앞에서 언급했듯이 더 나은 방법은 내장 "saveAs"메서드를 사용하여 hdfs (또는 다른 저장소 형식)에 쓰는 것입니다. http://spark.apache.org/docs/latest/programming-guide.html#actions에 대한 설명서를 확인할 수 있습니다.

    캐시와 같은 여러 계산에서 재사용하기 때문에 RDD 만 유지하려면 RDD를 유지하는 방법도 있습니다.

  2. ==============================

    2.해결책은 매우 간단하여 배포 모드 클러스터를 배포 모드 클라이언트로 변경 한 다음 드라이버를 실행 한 컴퓨터에서 파일 쓰기가 올바르게 수행되었습니다.

    해결책은 매우 간단하여 배포 모드 클러스터를 배포 모드 클라이언트로 변경 한 다음 드라이버를 실행 한 컴퓨터에서 파일 쓰기가 올바르게 수행되었습니다.

  3. ==============================

    3.질문 1에 대한 답변 : --files 태그와 함께 로컬 파일 경로와 함께 스파크 작업을 제출하면 파일이 드라이버 노드에서 모든 작업자 노드의 cwd로 다운로드되므로 해당 이름을 사용하여 액세스 할 수 있습니다.

    질문 1에 대한 답변 : --files 태그와 함께 로컬 파일 경로와 함께 스파크 작업을 제출하면 파일이 드라이버 노드에서 모든 작업자 노드의 cwd로 다운로드되므로 해당 이름을 사용하여 액세스 할 수 있습니다.

  4. from https://stackoverflow.com/questions/38122039/spark-scala-writing-and-reading-to-local-file-system-from-driver by cc-by-sa and MIT license