wqy1027

eeee

 

Spark整合hive

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;

posted on 2022-10-28 19:03  不想写代码的小玉  阅读(127)  评论(0编辑  收藏  举报

导航