赞
踩
[test@hadoop102 software]$ tar -zxf /opt/software/spark-2.4.5-bin-without-hive.tgz -C /opt/module
[test@hadoop102 software]$ mv /opt/module/spark-2.4.5-bin-without-hive /opt/module/spark
[test@hadoop102 software]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
source 使其生效
[test@hadoop102 software]$ source /etc/profile.d/my_env.sh
[test@hadoop102 software]$ mv /opt/module/spark/conf/spark-env.sh.template /opt/module/spark/conf/spark-env.sh
[test@hadoop102 software]$ vim /opt/module/spark/conf/spark-env.sh
添加如下内容
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
$()相当于飘号,是将里面的命令执行结果返回给前面的变量
返回的是hadoop所有的依赖
这个class path 是hadoop集群的,返回的是hadoop的所有依赖
[test@hadoop102 software]$ vim /opt/module/hive/conf/spark-defaults.conf
添加如下内容
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop102:9820/spark-history
spark.executor.memory 1g
spark.driver.memory 1g
注意:spark-history:手动创建
启动一个hive客户端就去读取配置文件相当于启动了一个spark客户端
hdfs://hadoop102:9820/spark-history相当于历史日志聚集
[test@hadoop102 software]$ hadoop fs -mkdir /spark-history
[test@hadoop102 software]$ hadoop fs -mkdir /spark-jars
[test@hadoop102 software]$ hadoop fs -put /opt/module/spark/jars/*
<!--Spark依赖位置--> <property> <name>spark.yarn.jars</name> <value>hdfs://hadoop102:9820/spark-jars/*</value> </property> <!--Hive执行引擎--> <property> <name>hive.execution.engine</name> <value>spark</value> </property> <!--Hive和spark连接超时时间--> <property> <name>hive.spark.client.connect.timeout</name> <value>20000ms</value> </property>
注意:hive.spark.client.connect.timeout的默认值是1000ms,如果执行hive的insert语句时,抛如下异常,可以调大该参数到10000ms
FAILED: SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session d9e0224c-3d14-4bf4-95bc-ee3ec56df48e
[test@hadoop102 hive]$ bin/hive
hive (default)> create external table student(id int, name string) location '/student';
hive (default)> insert into table student values(1,'abc');
Caused by: javax.security.sasl.SaslException: Server closed before SASL negotiation finished.
[test@hadoop102 hadoop]$ vim capacity-scheduler.xml
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>1</value>
</property>
默认Yarn的配置下,容量调度器只有一条Default队列(容量调度器是FIFO,如果只有一个队列,启动hive on spark会启动一个session,这个会话一直不结束就会一直占用着队列,后提交的任务会一直等待,所以需要再配置一个队列)。在capacity-scheduler.xml中可以配置多条队列,修改以下属性,增加hive队列。
<property> <name>yarn.scheduler.capacity.root.queues</name> <value>default,hive</value> <description> The queues at the this level (root is the root queue). </description> </property> <property> <name>yarn.scheduler.capacity.root.default.capacity</name> <value>50</value> <description> default队列的容量为50% </description> </property> 同时为新加队列添加必要属性: <property> <name>yarn.scheduler.capacity.root.hive.capacity</name> <value>50</value> <description> hive队列的容量为50% </description> </property> <property> <name>yarn.scheduler.capacity.root.hive.user-limit-factor</name> <value>1</value> <description> 一个用户最多能够获取该队列资源容量的比例 </description> </property> <property> <name>yarn.scheduler.capacity.root.hive.maximum-capacity</name> <value>80</value> <description> hive队列的最大容量 </description> </property> <property> <name>yarn.scheduler.capacity.root.hive.state</name> <value>RUNNING</value> </property> <property> <name>yarn.scheduler.capacity.root.hive.acl_submit_applications</name> <value>*</value> <description> 访问控制,控制谁可以将任务提交到该队列 </description> </property> <property> <name>yarn.scheduler.capacity.root.hive.acl_administer_queue</name> <value>*</value> <description> 访问控制,控制谁可以管理(包括提交和取消)该队列的任务 </description> </property> <property> <name>yarn.scheduler.capacity.root.hive.acl_application_max_priority</name> <value>*</value> <description> 访问控制,控制用户可以提交到该队列的任务的最大优先级 </description> </property> <property> <name>yarn.scheduler.capacity.root.hive.maximum-application-lifetime</name> <value>-1</value> <description> hive队列中任务的最大生命时长 </description> </property> <property> <name>yarn.scheduler.capacity.root.hive.default-application-lifetime</name> <value>-1</value> <description> hive队列中任务的默认生命时长 </description> </property>
[test@hadoop102 ~]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/capacity-scheduler.xml
提交任务的时候只能写叶子节点的队列,不能写叶子的父节点。
mapreduce.job.queuename=hive
[test@hadoop102 hive]$ bin/hive
hive (default)> show databases;
hive (default)> create database gmall;
hive (default)> use gmall;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。