Spark-SQL 写代码方式
-
1、在IDEA中将代码编写好打包上传到集群中运行(上线使用)
使用spark-submit提交
-
2、spark-shell (repl) 里面使用sqlContext 测试使用,简单任务使用
spark-shell --master yarn-client
不能使用yarn-cluster
-
-
3、spark-sql
spark-sql --master yarn-client
不能使用yarn-cluster
-
4、整合hive 使用hive的元数据
-
在hive的hive-site.xml修改一行配置
在使用之前都需要先启动元数据服务
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property> -
将hive-site.xml 复制到spark conf目录下
cp /usr/local/soft/hive-1.2.1/conf/hive-site.xml /usr/local/soft/spark-2.4.5/conf/
-
启动hive元数据服务
hive --service metastore
(推荐 更方便查看日志)或
nohup hive --service metastore >> metastore.log 2>&1 &
-
将mysql 驱动包复制到spark jars目录下
cp /usr/local/soft/hive-1.2.1/lib/mysql-connector-java-5.1.49.jar /usr/local/soft/spark-2.4.5/jars/
-
整合好之后在spark-sql 里面就可以使用hive的表了
不能使用yarn-cluster模式
spark-sql --master yarn-client --conf spark.sql.shuffle.partitions=2
-
在spark-sql中设置运行参数
set spark.sql.shuffle.partitions=2;
-
-
建表
create table student(
id string,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile
location '/data/spark/stu/input/';
create external table score(
student_id string,
cource_id string,
sco int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile
location '/data/spark/score/input/'; - 在idea中实现需要将hive-site.xml拉进idea项目的resource中(使用sz hive-site.xml命令把文件拉到桌面,然后放进idea里)
- 需要在idea中添加pom依赖
-
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2.11</artifactId> <version>${spark.version}</version> </dependency>
-
查询
-
1、统计每个班级前三名
select tt1.id
,tt1.name
,tt1.clazz
,tt1.sum_score
,tt1.rn
from (
select t1.id
,t1.name
,t1.clazz
,t2.sum_score
,row_number() over(partition by t1.clazz order by t2.sum_score desc) as rn
from student t1
join (
select student_id as id
,sum(sco) as sum_score
from score
group by student_id
) t2 on t1.id = t2.id
) tt1 where tt1.rn <= 3;
-