spark on yarn & spark on hive & spark-sql on hive

---------------------------------------------------------------------------------------------------------------------

一     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\

扫描二维码关注公众号,回复: 6201019 查看本文章

    /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

猜你喜欢

转载自www.cnblogs.com/demo123/p/10848402.html