spark sql

spark-sql  写代码方式
    1、idea里面将代码编写好打包上传到集群中运行,上线使用
        spark-submit提交

    2、saprk shell  (repl) 里面使用sqlContext     测试使用,简单任务使用
        spark-shell --master yarn-client
        不能使用yarn-cluster         

    3、spark-sql    spark-sql --master yarn-client   不能使用yarn-cluster 
        可以整合hive  使用hive的元数据
            1、在hive的hive-site.xml修改一行配置,增加了这一行配置之后,以后在使用hive之前都需要先启动元数据服务
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
             2、将hive-site.xml  复制到spark conf目录下
             cp hive-site.xml /usr/local/soft/spark-2.4.5/conf/

             3、启动hive元数据服务
                 nohup hive --service metastore >> metastore.log 2>&1 &

             4、 将mysql 驱动包复制到saprk jars目录下
             cp mysql-connector-java-5.1.17.jar /usr/local/soft/spark-2.4.5/jars/

             整合好之后在spark-sql 里面就可以使用hive的表了
            spark-sql --master yarn-client  --conf  spark.sql.shuffle.partitions=2
            不能使用cluster模式

            在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/student/';

create table score
(
student_id  string,
cource_id string,
sco int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile
location '/data/score/';

spark jdbc

1、spark和hive整合没有问题
    nohup hive --service metastore >> metastore.log 2>&1 &


2、开启spark jdbc  服务
cd /usr/local/soft/spark-2.4.5/sbin/

./start-thriftserver.sh --master yarn-client


3、在命令行中访问
cd /usr/local/soft/spark-2.4.5/bin/
./beeline 
输入
!connect jdbc:hive2://master:10000

设置sparkshuffle并行度
set spark.sql.shuffle.partitions=2;


开启AQE查询优化
set spark.sql.adaptive.enabled=true;


// hint  sql中的类似注解的写法

// 产生小文件
CREATE TABLE student_copy1 USING CSV
    AS SELECT /*+ REPARTITION(20) */  * FROM student;

//合并小文件, REPARTITION 会产生shuffle ,可以用于增加分区
CREATE TABLE student_copy2 USING CSV
    AS SELECT /*+ REPARTITION(1) */  * FROM student_copy1;

//合并小文件, COALESCE 不会产生shuffle,  不能用于增加分区
CREATE TABLE student_copy3 USING CSV
    AS SELECT /*+ COALESCE(1) */  * FROM student_copy1;


//将表缓存到内存中
cache table student;

//清空缓存
UNCACHE table student;

更新缓存
REFRESH TABLE student;

指定持久化级别  3.0才支持
CACHE TABLE student_gender OPTIONS ('storageLevel' 'MEMORY_ONLY');


大表和小表关联的时候对小表进行广播,实现mapjoin
 select /*+ BROADCAST(a) */ * from student as a join score as b on a.id=b.student_id;

 

posted @ 2021-07-21 17:04  坤坤无敌  阅读(124)  评论(0)    收藏  举报