Spark 의 -- Spark Submit 제출 프로그램 상세 설명

276545 단어 Spark빅 데이터
이 부분의 출처 는 spark 홈 페이지 에서 영문 판 을 볼 수 있 습 니 다.
spark - submit 는 spark 설치 디 렉 터 리 에 있 는 빈 디 렉 터 리 의 다음 셸 스 크 립 트 파일 로 클 러 스 터 에서 프로그램 을 시작 하 는 데 사 용 됩 니 다 (예:
*. py 스 크 립 트);spark 가 지원 하 는 클 러 스 터 모드 에 대해 spark - submit 가 응용 프로그램 을 제출 할 때 통 일 된 인터페이스 가 있 으 며 설정 이 많 지 않 습 니 다.
spark - submit 를 사용 할 때 프로그램의 jar 패키지 와 - jars 옵션 을 통 해 포 함 된 임의의 jar 파일 은 자동 으로 클 러 스 터 에 전 달 됩 니 다.
spark-submit --class   --master  --jars 

1. 바 인 딩 응용 프로그램 의존
코드 가 다른 항목 에 의존 하면 코드 를 Spark 클 러 스 터 에 나 누 어 주기 위해 서 는 이 의존 을 응용 프로그램 에 포장 해 야 합 니 다.sbt 와 Maven 에는 모두 설치 플러그 인 이 있 습 니 다. 통합 jar 를 만 들 때 Spark 와 Hadoop 에 필요 한 의존 도 를 표시 하기 만 하면 이러한 의존 과 응용 을 포장 할 필요 가 없습니다. 프로그램 이 실 행 될 때 클 러 스 터 의 master 는 이러한 의존 도 를 어떻게 호출 하고 제공 하 는 지 알 고 있 기 때 문 입 니 다.하지만 통 합 된 jar 가방 이 있 으 면 빈/spark - submit 스 크 립 트 를 실행 할 때 이 jar 가방 을 전달 합 니 다.
Python 언어 에 있어 서 spark - submit 의 – py - files 매개 변 수 를 사용 하여. py, zip, egg 파일 을 응용 프로그램 과 함께 배포 할 수 있 습 니 다. 응용 프로그램 이 여러 Python 파일 에 의존 하면. zip 또는. egg 파일 로 포장 하 는 것 을 권장 합 니 다.
2. spark - submit 로 프로그램 시작
프로그램 을 포장 하면 빈/spark - submit 스 크 립 트 를 사용 하여 프로그램 을 시작 할 수 있 습 니 다. 이 스 크 립 트 는 Spark 류 경로 (classpath) 와 응용 프로그램 의존 패 키 지 를 설정 할 수 있 고 서로 다른 Spark 가 지원 하 는 클 러 스 터 관리 와 배치 모드 를 설정 할 수 있 습 니 다.작업 을 제출 하면 Standalone 모드 든 Spark on Yarn 모드 든 웹 주소 http:/: 4040 을 통 해 현재 실행 상 태 를 볼 수 있 습 니 다 (구체 적 인 방문 주 소 는 spark 구축 시의 설정 파일 을 봐 야 합 니 다).spark - submit 제출 응용 프로그램의 대략적인 형식 은 다음 과 같 습 니 다.
./bin/spark-submit \
--class  \
--master  \
--deploy-mode  \
--conf = \
... # other options
 \
[application-arguments]
많이 사용 하 는 매개 변 수 는:
--class:应用程序的入口点(例如,org.apache.spark.examples.SparkPi)
--master:集群的master URL(例如,spark://localhost:7077)
--deploy-mode:将driver部署到worker节点(cluster模式)或者作为外部客户端部署到本地(client模式),默认情况下是client模式
--conf:用key=value格式强制指定Spark配置属性,用引号括起来
--application-jar:包含应用程序和所有依赖的jar包的路径,路径必须是在集群中是全局可见的,例如,hdfs://路径或者file://路径
--application-arguments:传递给主类中main函数的参数

일반적인 배치 전략 은 게 이 트 웨 이 기기 에 응용 프로그램 을 제출 하 는 것 입 니 다. 이 기계 와 Worker 기 계 는 하나의 네트워크 에 배 치 됩 니 다 (예 를 들 어 Standalone 모드 의 EC2 클 러 스 터 중의 Master 노드).이 배치 정책 에서 client 모드 가 더욱 적합 합 니 다. client 모드 의 driver 는 spark - submit 프로 세 스 와 함께 시작 합 니 다. spark - submit 프로 세 스 는 클 라 이언 트 의 역할 을 합 니 다.프로그램의 입 출력 은 콘 솔 에 의존 합 니 다. 그러면 이 모드 는 REPL (예 를 들 어 Spark shell) 에 관 한 프로그램 에 특히 적합 합 니 다.또 다른 배치 전략 은 응용 프로그램 이 Worker 노드 에서 멀리 떨 어 진 기 계 를 통 해 제출 (예 를 들 어 로 컬 또는 휴대용 장치) 하 는 경우, 일반적으로 cluster 모드 를 사용 하여 drivers 와 executors 간 의 네트워크 지연 시간 을 최소 화 하 는 것 이다.cluster 모드 는 Mesos 클 러 스 터 나 Python 프로그램 에서 잠시 지원 되 지 않 습 니 다.
Python 응용 프로그램 에서 간단하게 application - jar 에 JAR 파일 이 아 닌. py 파일 을 전달 한 다음 – py - files 로 Python. zip,. egg 또는. py 파일 을 검색 경로 에 추가 합 니 다.
클 러 스 터 관리자 가 사용 하고 있 는 옵션 도 있 습 니 다.예 를 들 어 Spark Standalone 의 cluster 배치 모드 에 대해 서도 – supervise 를 사용 하여 driver 가 0 (non - zero) 이 아 닌 종료 코드 의 오 류 를 만 났 을 때 자동 으로 재 부팅 할 수 있 습 니 다.spark - submit 에서 - help 를 실행 하여 모든 옵션 을 표시 합 니 다.다음은 자주 사용 하 는 옵션 의 예 입 니 다.
# Run application locally on 8 cores
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master local[8] \
  /path/to/examples.jar \
  100

Run on a Spark standalone cluster in client deploy mode
./bin/spark-submit –class org.apache.spark.examples.SparkPi –master spark://207.184.161.138:7077 –executor-memory 20G –total-executor-cores 100 /path/to/examples.jar 1000
Run on a Spark standalone cluster in cluster deploy mode with supervise
./bin/spark-submit –class org.apache.spark.examples.SparkPi –master spark://207.184.161.138:7077 –deploy-mode cluster –supervise –executor-memory 20G –total-executor-cores 100 /path/to/examples.jar 1000
Run on a YARN cluster
export HADOOP_CONF_DIR=XXX ./bin/spark-submit –class org.apache.spark.examples.SparkPi –master yarn-cluster\# can also be yarn-client for client mode –executor -memory 20G –num-executors 50 /path/to/examples.jar 1000
Run a Python application on a Spark standalone cluster
./bin/spark-submit –master spark://207.184.161.138:7077 examples/src/main/python/pi.py 1000
Run on a Mesos cluster in cluster deploy mode with supervise
./bin/spark-submit –class org.apache.spark.examples.SparkPi –master mesos://207.184.161.138:7077 –deploy-mode cluster –supervise –executor-memory 20G –total-executor-cores 100 http://path/to/examples.jar 1000
3、Master URLs
Spark 에 전 달 된 master url 은 다음 과 같은 임의의 형식 중 하나 일 수 있 습 니 다.
master URL
의의
local
워 커 스 레 드 1 개 를 사용 하여 로 컬 에서 Spark 를 실행 합 니 다 (즉, 병렬 화 되 지 않 았 습 니 다)
local[K]
K 개의 worker 스 레 드 를 사용 하여 Spark 를 로 컬 로 실행 합 니 다 (K 를 기계 의 CPU 핵 수로 설정 하 는 것 이 좋 습 니 다)
local[]
기계 의 CPU 논리 핵 수 에 따라 가능 한 한 Worker 스 레 드 를 많이 사용 합 니 다.
spark://HOST:PORT
주어진 Spark Standalone 군집 에 연 결 된 Master 입 니 다. 이 포트 는 Master 가 설정 한 포트 여야 합 니 다. 기본 값 은 7077 입 니 다.
mesos://HOST:PORT
주어진 Mesos 군집 에 연 결 된 Master 입 니 다. 이 포트 는 Master 가 설정 한 포트 여야 합 니 다. 기본 값 은 5050 입 니 다.Mesos 클 러 스 터 가 ZooKeeper 를 사용 하면 master URL 이 사 용 됩 니 다.mesos://zk://……
yarn-client
client 모드 로 YARN 클 러 스 터 에 연결, 클 러 스 터 위 치 는 HADOOPCONF_DIR 환경 변수 획득
yarn-cluster
cluster 모드 로 YARN 클 러 스 터 에 연결, 클 러 스 터 위 치 는 HADOOPCONF_DIR 환경 변수 획득
4. 파일 에서 설정 불 러 오기
spark - submit 스 크 립 트 는 속성 파일 을 통 해 기본 Spark 설정 값 을 불 러 와 프로그램 에 전달 할 수 있 습 니 다.기본적으로 Spark 디 렉 터 리 에 있 는 conf/spark - default. conf 파일 의 각 설정 항목 을 읽 습 니 다. 자세 한 정 보 는 '기본 설정 불 러 오기' 를 참고 하 십시오.
기본 설정 을 불 러 오 면 spark - submit 명령 의 일부 매개 변수 옵션 을 취소 할 수 있 습 니 다.예 를 들 어 spark. master 속성 을 설정 하면 – master 옵션 을 직접 생략 할 수 있 습 니 다.일반적으로 SparkConf 가 설정 한 속성 값 을 직접 사용 하면 가장 높 은 우선 순 위 를 가 집 니 다. 그 다음 에 spark - submit 명령 에서 전달 하 는 옵션 입 니 다. 마지막 으로 기본 설정 파일 의 값 입 니 다.설정 옵션 이 어디에서 왔 는 지 잘 모 르 면 spark - submit – verbose 인쇄 부 에서 더 세밀 한 디 버 깅 정 보 를 실행 할 수 있 습 니 다.
5. 고급 의존 관리
spark - submit 을 사용 할 때 프로그램의 jar 패키지 와 – jars 에서 선택 한 jar 는 자동 으로 클 러 스 터 에 업로드 되 며, – jars 가 제공 하 는 jar 경로 사이 에 쉼표 로 구분 되 어야 합 니 다. 경로 가 디 렉 터 리 라면 – jars 의 설정 이 작 동 하지 않 습 니 다. abc. jar 에 자세히 설명해 야 합 니 다.Spark 는 아래 URL 형식 을 사용 하여 서로 다른 jar 패키지 배포 정책 을 허용 합 니 다.1. 파일 file 방식: 절대 경로 와 file:/URIs 는 driver 로 서 의 HTTP 파일 서버 이 고 모든 executor 는 driver 의 HTTP 서버 에서 파일 을 끌 어 옵 니 다.2. hdfs 방식: http:, https:, ftp:, 주어진 URI 에서 파일 과 JAR 패 키 지 를 끌 어 옵 니 다.3. 로 컬 local 방식: local:/로 시작 하 는 URI 는 모든 worker 노드 의 로 컬 파일 이 어야 합 니 다. 이 는 네트워크 IO 비용 이 없 거나 NFS/GlusterFS 등 을 통 해 모든 worker 큰 파일/JAR 파일 에 공유 하거나 좋 은 작업 을 할 수 있 음 을 의미 합 니 다.
注意:SparkContextJAR包和文件都会被复制到每个executor节点的工作目录下,这将用掉大量的空间,所以需要清理干净。
YARN下,会自动清理。
Spark Standalone下,可以通过配置spark.worker.cleanup.appDataTtl属性做到自动清理。
用户可以用–packages选项提供一个以逗号分隔的maven清单来包含任意其他依赖。
其它的库(或SBT中的resolvers)可以用–repositories选项添加(同样用逗号分隔),这些命令都可以用在pyspark,spark-shellspark-submit中来包含一些Spark包。

Python 에 있어 서 – py - files 옵션 은 executors 에. egg,. zip,. py 라 이브 러 리 를 나 누 어 줄 수 있 습 니 다.
6. YARN 클 러 스 터 에서 Spark 응용 프로그램 실행
상세 한 것 은 홈 페이지 가 Spark 독립 클 러 스 터 모드 를 참고 하 십시오. – master 가 제공 하 는 주 소 는 Spark 자체 가 제공 합 니 다. Yrn 모드 에서 Spark 자원 관리자 의 주 소 는 사실은 hadop 의 master 주소 이기 때문에 – master 의 주 소 는 Yrn 이 제공 해 야 합 니 다.형식 은 다음 과 같 습 니 다.
$ ./bin/spark-submit –class path.to.your.Classmaster yarndeploy-mode cluster [options] jar> [app options]
다음은 더 상세 한 예 이다.
$ ./bin/spark-submit –class org.apache.spark.examples.SparkPi 
–master yarn
–deploy-mode cluster
–driver-memory 4g
–executor-memory 2g
–executor-cores 1
–queue thequeue
lib/spark-examples.jar
10

실행 과정 은 크게 다음 과 같 습 니 다. 위의 응용 프로그램 이 제출 되면 yarn 클 라 이언 트 프로그램 이 시 작 됩 니 다. 이 프로그램 은 master 의 응용 프로그램 을 시작 합 니 다. SparkPi 는 master 응용 프로그램의 서로 다른 스 레 드 를 시작 합 니 다. yarn 클 라 이언 트 프로그램 은 주기 적 으로 master 응용 프로그램의 상 태 를 검사 하고 콘 솔 에서 이 상 태 를 인쇄 합 니 다. 프로그램 이 끝나 면 yarn 클 라 이언 트 가 끝나 면 바로 나 옵 니 다.드라이브 와 실행 기의 로그 파일 을 보면 서 프로그램 을 디 버 깅 할 수 있 습 니 다.
우선 여기에 놓 고 시간 이 있 으 면 다시 보충 하 자
7. Spark Python 응용 프로그램 실행
라 이브 러 리 와 함께 제출 하 는 문 제 를 해결 하 는 것 이 중요 하 다.방법 1: 라 이브 러 리 를 python 파일 로 제출 합 니 다.우선 이해 해 야 할 것 은 우리 가 python 외부 라 이브 러 리 를 설치 할 때 이 라 이브 러 리 의 기능 은 주로 abc. py 와 같은 클래스 파일 로 이 루어 집 니 다. 우리 가 유사 from spark_learning.utils.default_utils import setDefaultEncoding 를 사용 할 때 이 클래스 파일 에서 어떤 함 수 를 도 입 했 습 니 다.그래서 우리 가 어떤 라 이브 러 리 를 클 러 스 터 에 제출 하려 고 할 때 관련 파일 을 찾 아서 이 파일 을 제출 할 수 있 습 니 다.다음 형식 을 참고 할 수 있 습 니 다 (오류 가 있 을 수 있 습 니 다).

   
   
   
   
  1. #python代码中的import
  2. from spark_learning.utils.default_utils import setDefaultEncoding,initSparkContext,ensureOffset
  3. #submit命令:
  4. bin/spark-submit --jars /home/jabo/software/spark -1.5 .2-bin-hadoop2 .6/lib/spark-streaming-kafka-assembly_2 .10 -1.5 .2.jar
  • –py-files /home/jabo/spark-by-python/spark_learning/utils/default_utils.py
  • /home/jabo/spark-by-python/spark_learning/third_day/streaming_kafka_avg.py
  • 下面是比较正规的做法:
    来源
    用 Java 和 Scala 访问 Spark 提供了许多优点 : 因为 Spark 它自己运行在 JVM 中,运行在 JVM 内部是平台无关的,独立的代码包和它打入到 JAR 文件中的依赖,以及更高的性能。如果您使用 Spark Python API 将会失去这些优势。

    管理依赖并让它们可用于群集上的 Python Job 是很难的。为了确定哪些依赖在群集上是需要的,您必须了解运行在分布式 群集 中的 Spark executor 进程中的 Spark 应用程序的代码。如果您定义的 Python 转换使用的任何的第三方库,比如 NumPy 或者 nltk,当它们运行在远程的 executor 上时 Spark executor 需要访问这些库。

    7.1、独立的依赖关系

    常见的情况中,一个自定义的 Python 包包含了你想要应用到每个 RDD 元素的 功能。下面展示了一个简单的例子 :

    
       
       
       
       
    1. def import_my_special_package(x):
    2. import my.special.package
    3. return x
    4. int_rdd = sc.parallelize([ 1, 2, 3, 4])
    5. int_rdd.map( lambda x: import_my_special_package(x))
    6. int_rdd.collect()

    您创建了一个有 4 个元素名为 int_rdd 的简单的 RDD。然后您应用函数 import_my_special_package 到每个 int_rdd 的元素。这个函数导入了 my.sepcial.package 并且返回了传入的原始参数。这样和使用类或者定义的函数有相同的作用,因为 Spark 需要每个 Spark executor 在需要时导入 my.special.package。

    如果你只需要 my.special.package 内部一个简单的文件,您可以通过在您的 spark-submit 命令中使用 –py-files 选项并指定文件的路径来直接让 Spark 的所有 executor 都可以获取。您也可以以编程的方式通过使用 sc.addPyFiles() 函数来指定。如果您使用的功能来自跨越多个文件的 package,为 package 制作一个 egg,因为 –py-files 标记也接受一个 egg 文件的路径。
    如果您有一个独立的依赖关系,您可以使用两种方式让需要的 Python 依赖是可用的。

    • 如果您只依赖一个单独的文件,您可以使用 –py-files 命令行选项,或者以编程的方式用 sc.addPyFiles(path) 兵指定本地 Python 文件的路径添加这些文件到 SparkContext。
    • 如果您有一个独立模块上的依赖(一个没有其它依赖的模块),您可以创建一个这些模块的 egg 或者 zip 文件,使用 –py-files 命令行选项或者以编程的方式用 sc.addPyFiles(path) 兵指定本地 Python 文件的路径添加这些文件到 SparkContext。

    7.2、复杂的依赖关系

    一些操作依赖有许多依赖关系的复杂的 package。例如,下列的代码片段导入了 Python pandas 数据分析库 :

    
       
       
       
       
    1. def import_pandas(x):
    2. import pandas
    3. return x
    4. int_rdd = sc.parallelize([ 1, 2, 3, 4])
    5. int_rdd.map( lambda x: import_pandas(x))
    6. int_rdd.collect()

    pandas 依赖 NumPy,SciPi,和许多其它的 package。尽管 pandas 作为一个 *.py 文件来分发是很复杂的,您可以为它和它的依赖建一个 egg 并发送它们到 executor。

    7.3、分发 Egg 文件的限制

    在这两个独立的,复杂的依赖关系的情况中,发送 egg 文件是有问题的,因为带有原代码包必须在其上运行的特定主机进行编译。当行业业标准的硬件做分布式计算,你必须假设的是,硬件是多样化的。然而,由于所需的 C 编译,内置客户端主机上一个 Python egg 是特定的客户端的 CPU 架构。因此,分配复杂的 egg,像编译 NumPy,SciPy 的 package 和 pandas 经常出现故障。相反,分发 egg 文件,你应该在群集的每个主机上安装所需的 Python 包,并指定 Python 的二进制文件的路径为 worker 主机使用。
    安装以及保持 Python 环境
    安装和维护的Python环境可能比较复杂,但可以让你使用完整的Python包生态系统。系统管理员在用您需要的依赖在群集的每台主机上安装 Anaconda distribution 或者设置一个 虚拟环境。
    如果您使用 Cloudera Manager,您可以使用方法将 Anaconda distribution 作为一个 Parcel 来部署。

    最低需要的角色 : 群集管理员(或者管理员)

    • 添加下面的 URL https://repo.continuum.io/pkgs/misc/parcels/ 到远程的 Parcel 仓库 URL,像 Parcel 配置设置 中描述的一样。
    • 像 管理 Parcels 中描述的一样下载,分发,并且激活 Parcel。

    Anaconda 被安装在 parcel 目录/Anaconda 中,parcel 目录默认是 /opt/cloudera/parcels,但是可以在 parcel 配置设置中更改。Anaconda parcel 支持 Continuum Analytics。

    如果您没有使用 Cloudera Manager,您可以在您的群集中安装一个虚拟环境通过在每台主机上运行命令 Cluster SSH,Parallel SSH,或者 Fabric。假设每台主机已经安装了 Python 和 pip,在一个 RHEL 6 兼容的系统中上的虚拟环境中使用下面的命令来安装标准的数据栈(NumPy,SciPy,scikit-learn,和 pandas)。

    # Install python-devel:
    yum install python-devel

    # Install non-Python dependencies required by SciPy that are not installed by default:
    yum install atlas atlas-devel lapack-devel blas-devel

    # install virtualenv:
    pip install virtualenv

    # create a new virtualenv:
    virtualenv mynewenv

    # activate the virtualenv:
    source mynewenv/bin/activate

    # install packages in mynewenv:
    pip install numpy
    pip install scipy
    pip install scikit-learn
    pip install pandas

    7.4、设置 Python 路径

    之后您想要使用的 Python 包在您群集中一致的位置,如下所示设置相应的环境变量路径到您的 Python 可执行的文件 :

    • Client 模式 - 用 PYSPARK_PYTHON 设置 executor 路径,用 PYSPARK_DRIVER_PYTHON 设置 driver 路径。
    • Cluster 模式 - 用 spark.yarn.appMasterEnv.PYSPARK_PYTHON 设置 executor 路径,用 spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON 设置 driver 路径。

    为了使这些变量一致,添加相应的 export 语句 :

    • Anaconda parcel - export 变量 /opt/cloudera/parcels/Anaconda/bin/python
    • Virtual environment - export 变量 /path/to/mynewenv/bin/python

    到 sparl-env.sh,检查其他用户没有用条件测试的变量,比如 :

    if [ -z " P Y S P A R K P Y T H O N < / s p a n > " < / s p a n > ] ; < s p a n c l a s s = " h l j s − k e y w o r d " > t h e n < / s p a n > < s p a n c l a s s = " h l j s − b u i l t i n " > e x p o r t < / s p a n > P Y S P A R K P Y T H O N = < s p a n c l a s s = " h l j s − k e y w o r d " > f i < / s p a n > < / c o d e > < / p r e > < p s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 26 p x ! i m p o r t a n t ; " > 在 C l o u d e r a M a n a g e r 中 , 如 下 所 示 在 s p a r k − e n v . s h 中 设 置 环 境 变 量 : < / p > < p s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 26 p x ! i m p o r t a n t ; " > 最 低 需 求 角 色 : 配 置 员 ( 也 可 以 用 群 集 管 理 员 , 管 理 员 ) < / p > < u l s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 25.15 p x ! i m p o r t a n t ; " > < l i s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 25.15 p x ! i m p o r t a n t ; " > 转 到 S p a r k 服 务 。 < / l i > < l i s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 25.15 p x ! i m p o r t a n t ; " > 点 击 配 置 标 签 。 < / l i > < l i s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 25.15 p x ! i m p o r t a n t ; " > 搜 索 s p a r k − c o n f / s p a r k − e n v . s h 的 S p a r k 服 务 高 级 配 置 代 码 段 ( 安 全 阀 ) 。 < / l i > < l i s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 25.15 p x ! i m p o r t a n t ; " > 添 加 变 量 到 属 性 中 。 < / l i > < l i s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 25.15 p x ! i m p o r t a n t ; " > 点 击 保 存 更 改 以 提 交 更 改 。 < / l i > < l i s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 25.15 p x ! i m p o r t a n t ; " > 重 启 服 务 。 < / l i > < l i s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 25.15 p x ! i m p o r t a n t ; " > 部 署 客 户 端 配 置 。 < / l i > < / u l > < p s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 26 p x ! i m p o r t a n t ; " > 在 命 令 行 中 , 在 / e t c / s p a r k / c o n f / s p a r k − e n v . s h 中 设 置 环 境 变 量 。 < / p > < h 2 s t y l e = " f o n t − s i z e : 24 p x ! i m p o r t a n t ; l i n e − h e i g h t : 32 p x ! i m p o r t a n t ; " > < a n a m e = " t 11 " > < / a > 8 、 最 终 提 交 s p a r k 作 业 < / h 2 > < p s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 26 p x ! i m p o r t a n t ; " > 更 详 细 可 < a h r e f = " h t t p : / / w w w . c n b l o g s . c o m / z l s l c h / p / 6638461. h t m l " r e l = " n o f o l l o w " s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 26 p x ! i m p o r t a n t ; " t a r g e t = " b l a n k " > 参 考 文 档 < / a > < / p > < h 3 s t y l e = " f o n t − s i z e : 22 p x ! i m p o r t a n t ; l i n e − h e i g h t : 30 p x ! i m p o r t a n t ; " > < a n a m e = " t 12 " > < / a > 8.1 、 用 y a r n − c l i e n t 模 式 提 交 s p a r k 作 业 < / h 3 > < p s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 26 p x ! i m p o r t a n t ; " > 在 / u s r / l o c a l / s p a r k 目 录 下 创 建 文 件 夹 < / p > < p r e s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < c o d e c l a s s = " l a n g u a g e − c s s " s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < s p a n c l a s s = " h l j s − s e l e c t o r − t a g " > v i < / s p a n > < s p a n c l a s s = " h l j s − s e l e c t o r − t a g " > s p a r k p i < / s p a n > < s p a n c l a s s = " h l j s − s e l e c t o r − c l a s s " > . s h < / s p a n > < / c o d e > < / p r e > s h e l l 文 件 的 内 容 如 下 : < b r > < p r e s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < c o d e c l a s s = " l a n g u a g e − d i f f " s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > {PYSPARK_PYTHON}</span>"</span> ]; <span class="hljs-keyword">then</span> <span class="hljs-built_in">export</span> PYSPARK_PYTHON= <span class="hljs-keyword">fi</span></code></pre><p style="font-size: 16px !important; line-height: 26px !important;">在 Cloudera Manager 中,如下所示在 spark-env.sh 中设置环境变量 : </p><p style="font-size: 16px !important; line-height: 26px !important;">最低需求角色 : 配置员(也可以用群集管理员,管理员)</p><ul style="font-size: 16px !important; line-height: 25.15px !important;"><li style="font-size: 16px !important; line-height: 25.15px !important;">转到 Spark 服务。</li><li style="font-size: 16px !important; line-height: 25.15px !important;">点击 配置 标签。</li><li style="font-size: 16px !important; line-height: 25.15px !important;">搜索 spark-conf/spark-env.sh 的 Spark 服务高级配置代码段(安全阀)。</li><li style="font-size: 16px !important; line-height: 25.15px !important;">添加变量到属性中。</li><li style="font-size: 16px !important; line-height: 25.15px !important;">点击 保存更改 以提交更改。</li><li style="font-size: 16px !important; line-height: 25.15px !important;">重启服务。</li><li style="font-size: 16px !important; line-height: 25.15px !important;">部署客户端配置。</li></ul><p style="font-size: 16px !important; line-height: 26px !important;">在命令行中,在 /etc/spark/conf/spark-env.sh 中设置环境变量。</p><h2 style="font-size: 24px !important; line-height: 32px !important;"><a name="t11"></a>8、最终提交spark作业</h2><p style="font-size: 16px !important; line-height: 26px !important;">更详细可<a href="http://www.cnblogs.com/zlslch/p/6638461.html" rel="nofollow" style="font-size: 16px !important; line-height: 26px !important;" target="_blank">参考文档</a></p><h3 style="font-size: 22px !important; line-height: 30px !important;"><a name="t12"></a>8.1、用yarn-client模式提交spark作业</h3><p style="font-size: 16px !important; line-height: 26px !important;">在/usr/local/spark目录下创建文件夹</p><pre style="font-size: 14px !important; line-height: 22px !important;"><code class="language-css" style="font-size: 14px !important; line-height: 22px !important;"><span class="hljs-selector-tag">vi</span> <span class="hljs-selector-tag">spark_pi</span><span class="hljs-selector-class">.sh</span></code></pre>shell文件的内容如下:<br><pre style="font-size: 14px !important; line-height: 22px !important;"><code class="language-diff" style="font-size: 14px !important; line-height: 22px !important;"> PYSPARKPYTHON</span>"</span>];<spanclass="hljskeyword">then</span><spanclass="hljsbuiltin">export</span>PYSPARKPYTHON=<spanclass="hljskeyword">fi</span></code></pre><pstyle="fontsize:16px!important;lineheight:26px!important;">ClouderaManagersparkenv.sh:</p><pstyle="fontsize:16px!important;lineheight:26px!important;">:</p><ulstyle="fontsize:16px!important;lineheight:25.15px!important;"><listyle="fontsize:16px!important;lineheight:25.15px!important;">Spark</li><listyle="fontsize:16px!important;lineheight:25.15px!important;"></li><listyle="fontsize:16px!important;lineheight:25.15px!important;">sparkconf/sparkenv.shSpark</li><listyle="fontsize:16px!important;lineheight:25.15px!important;"></li><listyle="fontsize:16px!important;lineheight:25.15px!important;"></li><listyle="fontsize:16px!important;lineheight:25.15px!important;"></li><listyle="fontsize:16px!important;lineheight:25.15px!important;"></li></ul><pstyle="fontsize:16px!important;lineheight:26px!important;">/etc/spark/conf/sparkenv.sh</p><h2style="fontsize:24px!important;lineheight:32px!important;"><aname="t11"></a>8spark</h2><pstyle="fontsize:16px!important;lineheight:26px!important;"><ahref="http://www.cnblogs.com/zlslch/p/6638461.html"rel="nofollow"style="fontsize:16px!important;lineheight:26px!important;"target="blank"></a></p><h3style="fontsize:22px!important;lineheight:30px!important;"><aname="t12"></a>8.1yarnclientspark</h3><pstyle="fontsize:16px!important;lineheight:26px!important;">/usr/local/spark</p><prestyle="fontsize:14px!important;lineheight:22px!important;"><codeclass="languagecss"style="fontsize:14px!important;lineheight:22px!important;"><spanclass="hljsselectortag">vi</span><spanclass="hljsselectortag">sparkpi</span><spanclass="hljsselectorclass">.sh</span></code></pre>shell<br><prestyle="fontsize:14px!important;lineheight:22px!important;"><codeclass="languagediff"style="fontsize:14px!important;lineheight:22px!important;">SPARK_HOME/bin/spark-submit 
    –class org.apache.spark.examples.JavaSparkPi
    –master yarn-client
    –num-executors 1
    –driver-memory 1g
    –executor-memory 1g
    –executor-cores 1

    KaTeX parse error: Expected 'EOF', got '\或者 $SPARK_HOME/bin/spark-submit
    > –class org.apache.spark.examples.JavaSparkPi
    > --master yarn-cluster
    > --num-executors 1
    > --driver-memory 1g
    > --executor-memory 1g
    > --executor-cores 1
    > S P A R K H O M E / l i b / s p a r k − e x a m p l e s − < s p a n c l a s s = " h l j s − n u m b e r " > 1.6 < / s p a n > . < s p a n c l a s s = " h l j s − n u m b e r " > 1 < / s p a n > − h a d o o p 2. < s p a n c l a s s = " h l j s − n u m b e r " > 6.0 < / s p a n > . j a r < / c o d e > < / p r e > 修 改 该 s h e l l 文 档 权 限 < b r > < p r e s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < c o d e c l a s s = " l a n g u a g e − c s s " s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < s p a n c l a s s = " h l j s − s e l e c t o r − t a g " > c h m o d < / s p a n > 777 < s p a n c l a s s = " h l j s − s e l e c t o r − t a g " > s p a r k p i < / s p a n > < s p a n c l a s s = " h l j s − s e l e c t o r − c l a s s " > . s h < / s p a n > < / c o d e > < / p r e > 然 后 运 行 以 下 代 码 就 可 启 动 应 用 程 序 < b r > < p r e s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < c o d e c l a s s = " l a n g u a g e − u n d e f i n e d " s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > . / s p a r k p i . s h < / c o d e > < / p r e > < p s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 26 p x ! i m p o r t a n t ; " > 当 然 也 可 以 在 l i n u x 下 设 置 定 时 器 来 定 时 运 行 该 应 用 程 序 。 < / p > < h 3 s t y l e = " f o n t − s i z e : 22 p x ! i m p o r t a n t ; l i n e − h e i g h t : 30 p x ! i m p o r t a n t ; " > < a n a m e = " t 13 " > < / a > 8.2 、 用 y a r n − c l u s t e r 模 式 提 交 s p a r k 作 业 < / h 3 > < p s t y l e = " f o n t − s i z e : 16 p x ! i m p o r t a n t ; l i n e − h e i g h t : 26 p x ! i m p o r t a n t ; " > 在 / u s r / l o c a l / s p a r k 目 录 下 创 建 文 件 夹 < / p > < p r e s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < c o d e c l a s s = " l a n g u a g e − c s s " s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < s p a n c l a s s = " h l j s − s e l e c t o r − t a g " > v i < / s p a n > < s p a n c l a s s = " h l j s − s e l e c t o r − t a g " > s p a r k p i < / s p a n > < s p a n c l a s s = " h l j s − s e l e c t o r − c l a s s " > . s h < / s p a n > < / c o d e > < / p r e > s h e l l 文 件 的 内 容 如 下 : < b r > < p r e s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > < c o d e c l a s s = " l a n g u a g e − d i f f " s t y l e = " f o n t − s i z e : 14 p x ! i m p o r t a n t ; l i n e − h e i g h t : 22 p x ! i m p o r t a n t ; " > SPARK_HOME/lib/spark-examples-<span class="hljs-number">1.6</span>.<span class="hljs-number">1</span>-hadoop2.<span class="hljs-number">6.0</span>.jar</code></pre>修改该shell文档权限<br><pre style="font-size: 14px !important; line-height: 22px !important;"><code class="language-css" style="font-size: 14px !important; line-height: 22px !important;"><span class="hljs-selector-tag">chmod</span> 777 <span class="hljs-selector-tag">spark_pi</span><span class="hljs-selector-class">.sh</span></code></pre>然后运行以下代码就可启动应用程序<br><pre style="font-size: 14px !important; line-height: 22px !important;"><code class="language-undefined" style="font-size: 14px !important; line-height: 22px !important;">./spark_pi.sh</code></pre><p style="font-size: 16px !important; line-height: 26px !important;">当然也可以在linux下设置定时器来定时运行该应用程序。</p><h3 style="font-size: 22px !important; line-height: 30px !important;"><a name="t13"></a>8.2、用yarn-cluster模式提交spark作业</h3><p style="font-size: 16px !important; line-height: 26px !important;">在/usr/local/spark目录下创建文件夹</p><pre style="font-size: 14px !important; line-height: 22px !important;"><code class="language-css" style="font-size: 14px !important; line-height: 22px !important;"><span class="hljs-selector-tag">vi</span> <span class="hljs-selector-tag">spark_pi</span><span class="hljs-selector-class">.sh</span></code></pre>shell文件的内容如下:<br><pre style="font-size: 14px !important; line-height: 22px !important;"><code class="language-diff" style="font-size: 14px !important; line-height: 22px !important;"> SPARKHOME/lib/sparkexamples<spanclass="hljsnumber">1.6</span>.<spanclass="hljsnumber">1</span>hadoop2.<spanclass="hljsnumber">6.0</span>.jar</code></pre>shell<br><prestyle="fontsize:14px!important;lineheight:22px!important;"><codeclass="languagecss"style="fontsize:14px!important;lineheight:22px!important;"><spanclass="hljsselectortag">chmod</span>777<spanclass="hljsselectortag">sparkpi</span><spanclass="hljsselectorclass">.sh</span></code></pre><br><prestyle="fontsize:14px!important;lineheight:22px!important;"><codeclass="languageundefined"style="fontsize:14px!important;lineheight:22px!important;">./sparkpi.sh</code></pre><pstyle="fontsize:16px!important;lineheight:26px!important;">linux</p><h3style="fontsize:22px!important;lineheight:30px!important;"><aname="t13"></a>8.2yarnclusterspark</h3><pstyle="fontsize:16px!important;lineheight:26px!important;">/usr/local/spark</p><prestyle="fontsize:14px!important;lineheight:22px!important;"><codeclass="languagecss"style="fontsize:14px!important;lineheight:22px!important;"><spanclass="hljsselectortag">vi</span><spanclass="hljsselectortag">sparkpi</span><spanclass="hljsselectorclass">.sh</span></code></pre>shell<br><prestyle="fontsize:14px!important;lineheight:22px!important;"><codeclass="languagediff"style="fontsize:14px!important;lineheight:22px!important;">SPARK_HOME/bin/spark-submit
    –class org.apache.spark.examples.JavaSparkPi
    –master yarn-client
    –num-executors 1
    –driver-memory 1g
    –executor-memory 1g
    –executor-cores 1

    KaTeX parse error: Expected 'EOF', got '\或者 $SPARK_HOME/bin/spark-submit
    > –class org.apache.spark.examples.JavaSparkPi
    > --master yarn-cluster
    > --num-executors 1
    > --driver-memory 1g
    > --executor-memory 1g
    > --executor-cores 1
    > $SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar修改该shell文档权限

    chmod 777 spark_pi.sh
    然后运行以下代码就可启动应用程序
    ./spark_pi.sh
    当然也可以在linux下设置定时器来定时运行该应用程序




    좋은 웹페이지 즐겨찾기