目录

目录 1

1. 约定 1

2. 安装Scala 1

2.1. 下载 2

2.2. 安装 2

2.3. 设置环境变量 2

3. 安装Spark 2

3.1. 下载 2

3.2. 安装 2

3.3. 配置 3

3.3.1. 修改conf/spark-env.sh 3

4. 启动Spark 3

4.1. 运行自带示例 3

4.2. SparkSQL Cli 4

5. 和Hive集成 4

6. 常见错误 5

6.1. 错误1:unknown queue: thequeue 5

6.2. SPARK_CLASSPATH was detected 6

7. 相关文档 6

1. 约定

本文约定Hadoop 2.7.1安装在/data/hadoop/current,而Spark 1.6.0被安装在/data/hadoop/spark,其中/data/hadoop/spark为指向/data/hadoop/spark。

Spark官网为:http://spark.apache.org/(Shark官网为:http://shark.cs.berkeley.edu/,Shark已成为Spark的一个模块,不再需要单独安装)。

以cluster模式运行Spark,不介绍client模式。

2. 安装Scala

联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计Scala。

Scala是一种多范式的编程语言,设计初衷是要集成纯面向对象编程和函数式编程的各种特性。运行在Java虚拟机JVM之上,兼容现有的Java程序,并可调用Java类库。Scala包含编译器和类库,以BSD许可证发布。

2.1. 下载

Spark使用Scala开发的,在安装Spark之前,先在各个节上将Scala安装好。Scala的官网为:http://www.scala-lang.org/,下载网址为:http://www.scala-lang.org/download/,本文下载的是二进制安装包scala-2.11.7.tgz。

2.2. 安装

本文以root用户(实则也可以非root用户,建议事先规划好)将Scala安装在/data/scala,其中/data/scala是指向/data/scala-2.11.7的软链接。

安装方法非常简单,将scala-2.11.7.tgz上传到/data目录,然后在/data/目录下对scala-2.11.7.tgz进行解压。

接着,建立软链接:ln -s /data/scala-2.11.7 /data/scala。

2.3. 设置环境变量

Scala被安装完成后,需要将它添加到PATH环境变量中,可以直接修改/etc/profile文件,加入以下内容即可:

export SCALA_HOME=/data/scala

export PATH=$SCALA_HOME/bin:$PATH

3. 安装Spark

Spark的安装以非root用户进行,本文以hadoop用户安装它。

3.1. 下载

本文下载的二进制安装包,推荐这种方式,否则编译还得折腾。下载网址为:http://spark.apache.org/downloads.html,本文下载的是spark-1.6.0-bin-hadoop2.6.tgz,这个可以直接跑在YARN上。

3.2. 安装

1) 将spark-1.6.0-bin-hadoop2.6.tgz上传到目录/data/hadoop下

2) 解压:tar xzf spark-1.6.0-bin-hadoop2.6.tgz

3) 建立软链接:ln -s spark-1.6.0-bin-hadoop2.6 spark

在yarn上运行spark,不需要每台机器都安装spark,可以只安装在一台机器上。但是只能在被安装的机器上运行spark,原因很简单:需要调用spark的文件。

3.3. 配置

3.3.1. 修改conf/spark-env.sh

可以spark-env.sh.template复制一份,然后增加以下内容:

HADOOP_CONF_DIR=/data/hadoop/current/etc/hadoop

YARN_CONF_DIR=/data/hadoop/current/etc/hadoop

4. 启动Spark

由于运行在Yarn上,所以没有启动Spark这一过程。而是在执行命令spark-submit时,由Yarn调度运行Spark。

4.1. 运行自带示例

./bin/spark-submit --class org.apache.spark.examples.SparkPi \

--master yarn --deploy-mode cluster \

--driver-memory 4g \

--executor-memory 2g \

--executor-cores 1 \

--queue default \

lib/spark-examples*.jar 10

运行输出:

16/02/03 16:08:33 INFO yarn.Client: Application report for application_1454466109748_0007 (state: RUNNING)

16/02/03 16:08:34 INFO yarn.Client: Application report for application_1454466109748_0007 (state: RUNNING)

16/02/03 16:08:35 INFO yarn.Client: Application report for application_1454466109748_0007 (state: RUNNING)

16/02/03 16:08:36 INFO yarn.Client: Application report for application_1454466109748_0007 (state: RUNNING)

16/02/03 16:08:37 INFO yarn.Client: Application report for application_1454466109748_0007 (state: RUNNING)

16/02/03 16:08:38 INFO yarn.Client: Application report for application_1454466109748_0007 (state: RUNNING)

16/02/03 16:08:39 INFO yarn.Client: Application report for application_1454466109748_0007 (state: RUNNING)

16/02/03 16:08:40 INFO yarn.Client: Application report for application_1454466109748_0007 (state: FINISHED)

16/02/03 16:08:40 INFO yarn.Client:

client token: N/A

diagnostics: N/A

ApplicationMaster host: 10.225.168.251

ApplicationMaster RPC port: 0

queue: default

start time: 1454486904755

final status: SUCCEEDED

tracking URL: http://hadoop-168-254:8088/proxy/application_1454466109748_0007/

user: hadoop

16/02/03 16:08:40 INFO util.ShutdownHookManager: Shutdown hook called

16/02/03 16:08:40 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-7fc8538c-8f4c-4d8d-8731-64f5c54c5eac

4.2. SparkSQL Cli

通过运行即可进入SparkSQL Cli交互界面,但要在Yarn上以cluster运行,则需要指定参数--master值为yarn(注意不支持参数--deploy-mode的值为cluster,也就是只能以client模式运行在Yarn上):

./bin/spark-sql --master yarn

为什么SparkSQL Cli只能以client模式运行?其实很好理解,既然是交互,需要看到输出,这个时候cluster模式就没法做到了。因为cluster模式,ApplicationMaster在哪机器上运行,是由Yarn动态确定的。

5. 和Hive集成

Spark集成Hive非常简单,只需以下几步:

1) 在spark-env.sh中加入HIVE_HOME,如:export HIVE_HOME=/data/hadoop/hive

2) 将Hive的hive-site.xml和hive-log4j.properties两个文件复制到Spark的conf目录下。

完成后,再次执行spark-sql进入Spark的SQL Cli,运行命令show tables即可看到在Hive中创建的表。

示例:

./spark-sql --master yarn --driver-class-path /data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar

6. 常见错误

6.1. 错误1:unknown queue: thequeue

运行:

./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

时报如下错误,只需要将“--queue thequeue”改成“--queue default”即可。

16/02/03 15:57:36 INFO yarn.Client: Application report for application_1454466109748_0004 (state: FAILED)

16/02/03 15:57:36 INFO yarn.Client:

client token: N/A

diagnostics: Application application_1454466109748_0004 submitted by user hadoop to unknown queue: thequeue

ApplicationMaster host: N/A

ApplicationMaster RPC port: -1

queue: thequeue

start time: 1454486255907

final status: FAILED

tracking URL: http://hadoop-168-254:8088/proxy/application_1454466109748_0004/

user: hadoop

16/02/03 15:57:36 INFO yarn.Client: Deleting staging directory .sparkStaging/application_1454466109748_0004

Exception in thread "main" org.apache.spark.SparkException: Application application_1454466109748_0004 finished with failed status

at org.apache.spark.deploy.yarn.Client.run(Client.scala:1029)

at org.apache.spark.deploy.yarn.Client$.main(Client.scala:1076)

at org.apache.spark.deploy.yarn.Client.main(Client.scala)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)

at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)

at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)

at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)

at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

16/02/03 15:57:36 INFO util.ShutdownHookManager: Shutdown hook called

16/02/03 15:57:36 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-54531ae3-4d02-41be-8b9e-92f4b0f05807

6.2. SPARK_CLASSPATH was detected

SPARK_CLASSPATH was detected (set to '/data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar:').

This is deprecated in Spark 1.0+.

Please instead use:

- ./spark-submit with --driver-class-path to augment the driver classpath

- spark.executor.extraClassPath to augment the executor classpath

意思是不推荐在spark-env.sh中设置环境变量SPARK_CLASSPATH,可以改成如下推荐的方式:

./spark-sql --master yarn --driver-class-path /data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar

7. 相关文档

《HBase-0.98.0分布式安装指南》

《Hive 0.12.0安装指南》

《ZooKeeper-3.4.6分布式安装指南》

《Hadoop 2.3.0源码反向工程》

《在Linux上编译Hadoop-2.4.0》

《Accumulo-1.5.1安装指南》

《Drill 1.0.0安装指南》

《Shark 0.9.1安装指南》

更多,敬请关注技术博客:http://aquester.cublog.cn

Yarn上运行spark-1.6.0的更多相关文章

  1. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

  2. Apache Spark源码走读之10 -- 在YARN上运行SparkPi

    y欢迎转载,转载请注明出处,徽沪一郎. 概要 “spark已经比较头痛了,还要将其运行在yarn上,yarn是什么,我一点概念都没有哎,再怎么办啊.不要跟我讲什么原理了,能不能直接告诉我怎么将spar ...

  3. 在Eclipse上运行Spark(Standalone,Yarn-Client)

    欢迎转载,且请注明出处,在文章页面明显位置给出原文连接. 原文链接:http://www.cnblogs.com/zdfjf/p/5175566.html 我们知道有eclipse的Hadoop插件, ...

  4. Spark学习之在集群上运行Spark(6)

    Spark学习之在集群上运行Spark(6) 1. Spark的一个优点在于可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力. 2. Spark既能适用于专用集群,也可以适用于共享的云计算 ...

  5. 在Yarn上运行spark-shell和spark-sql命令行

    转载自:http://lxw1234.com/archives/2015/08/448.htm 如果你已经有一个正常运行的Hadoop Yarn环境,那么只需要下载相应版本的Spark,解压之后做为S ...

  6. Spark学习之在集群上运行Spark

    一.简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力.好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样.也就是说 ...

  7. Hadoop 系列文章(三) 配置部署启动YARN及在YARN上运行MapReduce程序

    这篇文章里我们将用配置 YARN,在 YARN 上运行 MapReduce. 1.修改 yarn-env.sh 环境变量里的 JAVA_HOME 路径 [bamboo@hadoop-senior ha ...

  8. 在集群上运行Spark

    Spark 可以在各种各样的集群管理器(Hadoop YARN.Apache Mesos,还有Spark 自带的独立集群管理器)上运行,所以Spark 应用既能够适应专用集群,又能用于共享的云计算环境 ...

  9. 《Spark 官方文档》在Mesos上运行Spark

    本文转自:http://ifeve.com/spark-mesos-spark/ 在Mesos上运行Spark Spark可以在由Apache Mesos 管理的硬件集群中运行. 在Mesos集群中使 ...

随机推荐

  1. typscript 语法1

    let isDone: boolean = false; let decLiteral: number = 0xf00d; let names: string = 'boob'; /** 使用模版字符 ...

  2. Java 静态代理和动态代理例子

    代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委 ...

  3. webserive学习记录4-获取天气的例子

    学习到了如何创建使用webservice服务,下面就实际应用一下,从网络上获取天气数据. 先从网络上找到免费的webservice服务, 如这个网站:http://www.webxml.com.cn/ ...

  4. js正则表达使用实例

    (1)替换掉htmlStr中所有的<font..>和</font> var htmlstr='<font color="#fff">ABC< ...

  5. ASP.NETAutocomplete control

    分享一个Ajax autocomplete control, 原文链接:http://forums.asp.net/t/1157595.aspx 首先,引入ScriptManager <asp: ...

  6. HTTP协议图示详解

    一.概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. ...

  7. java并发:AtomicInteger 以及CAS无锁算法【转载】

    1 AtomicInteger解析 众所周知,在多线程并发的情况下,对于成员变量,可能是线程不安全的: 一个很简单的例子,假设我存在两个线程,让一个整数自增1000次,那么最终的值应该是1000:但是 ...

  8. C/C++ 宏

    0. #define MALLOC(n, type) \ ( (type *) malloc((n)* sizeof(type))) 1. 宏可以像函数一样被定义,例如:    #define min ...

  9. iOS 静态库的封装

    参考网址:http://www.jianshu.com/p/b754709135fb http://www.jianshu.com/p/443a5b8f3894   注意:封装静态库时要注意的地方: ...

  10. 【Python基础教程第2版】——第二讲:列表和元组

    引言: 什么是数据结构? 数据结果是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合.Python中最常用的数据结构是序列. Python包含6种内建的序列:列表和元组(最常用:列表可以修 ...