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 @   坤坤无敌  阅读(116)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示