---------------------------------------------------------------------------------------------------------------------
一 spark on yarn
集群方式运行,提交任务之后与客户端就没有联系,提交任务之后可以直接退出客户端
集群方式提交,日志在集群中
1.集群模式 cluster
spark-submit --class org.apache.spark.examples.SparkPi
--master yarn \
--deploy-mode cluster \
--deiver-memory 1g \
--executor-memory 1g \
--executor-cores 1\
/spark/examples/jars/spark-examples_2.11-2.0.2.jar \
10
客户端方式提交与集群方式提交有区别,日志会返回到客户端,yarn集群控制台中看不到日志
2.client模式
spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
-deploy-mode client \
--driver-memory 1g \
--executor-memory 512m \
--executor-cores 1 \
/spark/examples/jars/spark-examples_2.11-2.0.2.jar \
10
cluster模式 : Driver 程序在Yarn中运行,应用程序的运行结果不能显示在客户端,所以最好运行那些将结果最终保存在外部存储介质(如hdfs ,redis ,mysql)而非stdout输出的应用程序,客户端最终显示的仅是作为Yarn的job简单运行情况
client模式 :Driver 运行在Client上,应用程序运行结果会在客户端显示,所有适合运行结果有输出的应用程序(如spark-shell)
使用spark-shell启动,必须要使用客户端模式提交,因为会在当前窗口中写shell流程代码,即driver必须在本地
---------------------------------------------------------------------------------------------------------------------
二 . spark on hive 执行hivesql的时候底层有mapreduce改成了spark
需要编译spark源码,编码流程如下
1.下载hive包,下载mavem工具,安装对应版本的scala
2.编译spark源码
(1)注意编译spark选择不带hive的
(2)将下载好的源码解压进入目录执行
.
/dev/make-distribution
.sh --name
"hadoop2-without-hive"
--tgz
"-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided,orc-provided"
详情见 spark-hive源码编译
https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started
spark源码下载官方地址
http://spark.apache.org/downloads.html
spark源码编译地址
http://spark.apache.org/docs/1.5.0/building-spark.html
spark源码编译教程
http://blog.csdn.net/yanran1991326/article/details/46506595
hive on spark 与坑指南
http://www.cnblogs.com/linbingdong/p/5806329.html
将编译后的spark下的lib下的spark-assembly-*.jar拷贝到hive的lib目录下
hive-site.xml添加如下配置
<property>
<!--设置底层计算引擎-->
<name>hive.execution.engine</name>
<value>spark</value>
</property>
<property>
<!--在hdfs上hive数据存放目录,启动hadoop后需要在hdfs上手动创建-->
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<!--默认metastore在本地,添加配置改为非本地-->
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<!--记录spark事件,用于应用程序在完成后重构 webUI-->
<name>spark.eventLog.enabled</name>
<value>true</value>
</property>
<property>
<!--hdfs目录存在-->
<name>spark.eventLog.dir</name>
<value>hdfs:///hive_on_sparklogs</value>
</property>
<property>
<!--每一个executor的内存大小-->
<name>spark.executor.memory</name>
<value>512m</value>
</property>
<property>
<!--序列化对象-->
<name>spark.serializer</name>
<value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<property>
<!--先上传spark-assembly-1.6.1-hadoop2.6.0.jar包到hdfs上,并配置,避免任务运行时不需要下载-->
<name>spark.yarn.jar</name>
<value>hdfs://mini1:9000/spark-assembly-1.6.1-hadoop2.6.0.jar</value>
</property>
最重要的参数只有第一个,即设置计算引擎,其他参数搭建hive的时候就配置好了
---------------------------------------------------------------------------------------------------------------------
三 . spark-sql on hive 通过spark-sql操作hive表中所有的数据
spark on hive有两个重要文件夹
1元数据元数据文件夹 metastore_db 这个文件夹通过配置可以设置为mysql
2.表数据文件夹 spark-warehouse 这个启动的时候可以通过 --conf spark.sql.warehouse.dir设置路径
spark-sql on hive配置方式
(1)将hive-site.xml拷贝到spark/conf目录下
(2)把hive目录下的mysql驱动拷贝到spark的jars目录下
(3)分发所有配置和mysql驱动到spark的其他节点
(4)启动spark-sql操作hive的sql语句
启动需要添加配置,即设置数据路径
--conf spark.sql.warehouse.dir=hdfs://mini1:9000/user/hive/warehouse
操作实例
spark-sql \
--master spark://mini1:7077 \
--executor-memory 1g --total--executor-cores 2 \
--conf spark.sql.warehouse.dir=hdfs://mini1:9000/user/hive/warehouse