idea对spark程序进行远程提交和调试

第一部分 远程提交

本文以WordCount程序来实现idea对spark程序进行远程提交和调试

环境

  • 利用虚拟机搭建拥有3台主机的spark集群

    hadoop102

    hadoop103

    hadoop104

  • IntelliJ IDEA 2020.3.2 (Ultimate Edition)

背景知识

若要把 Spark SQL 连接到一个部署好的 Hive 上,你必须把 hive-site.xml 复制到 Spark的配置文件目录中($SPARK_HOME/conf)。即使没有部署好 Hive, Spark SQL 也可以运行。 需要注意的是,如果你没有部署好 Hive, Spark SQL 会在当前的工作目录中创建出自己的 Hive 元数据仓库,叫作 metastore_db。此外,如果你尝试使用 HiveQL 中的CREATE TABLE (并非 CREATE EXTERNAL TABLE)语句来创建表,这些表会被放在你默认的文件系统中的 /user/hive/warehouse 目录中(如果你的 classpath 中有配好的 hdfs_site.xml,默认的文件系统就是 HDFS,否则就是本地文件系统)。

 

步骤

步骤 1: 拷贝 hive-site.xml 到 resources 目录下




    
      javax.jdo.option.ConnectionURL
      jdbc:mysql://hadoop102:3306/metastore?createDatabaseIfNotExist=true
      JDBC connect string for a JDBC metastore
    
      javax.jdo.option.ConnectionDriverName
      com.mysql.jdbc.Driver
      Driver class name for a JDBC metastore
    
            hive.metastore.uris
            thrift://hadoop102:9083
            Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.
    
      javax.jdo.option.ConnectionUserName
      root
      username to use against metastore database
    
      javax.jdo.option.ConnectionPassword
      000000
      password to use against metastore database
    
    
        hive.cli.print.header
        true
    
    
        hive.cli.print.current.db
        true
    

步骤 2: 添加pom依赖



    4.0.0
​
    org.example
    HelloWord1
    1.0-SNAPSHOT
​
    
        2.1.0
        2.11
    
​
​
    
        
            org.apache.spark
            spark-core_${scala.version}
            ${spark.version}
        
        
            org.apache.spark
            spark-sql_${scala.version}
            ${spark.version}
        
        
            org.apache.spark
            spark-hive_${scala.version}
            ${spark.version}
        
    

步骤 3: 代码

在代码中指定 spark.sql.warehouse.dir 参数

.config("spark.sql.warehouse.dir", "hdfs://hadoop102:9000/user/hive/warehouse")

package com.xdb.test
​
import org.apache.spark.sql.SparkSession
​
object HiveDemo {
  def main(args: Array[String]): Unit = {
    val master = "local[*]"
​
    val spark: SparkSession = SparkSession
      .builder()
      .master(master)
      .appName("Test")
      .enableHiveSupport()
      .config("spark.sql.warehouse.dir", "hdfs://hadoop102:9000/user/hive/warehouse")
      .getOrCreate()
    import spark.sql
​
    sql("show tables").show
    /*    +--------+--------------+-----------+
    |database|     tableName|isTemporary|
    +--------+--------------+-----------+
    | default|      business|      false|
      | default|          dept|      false|
      | default|dept_partition|      false|
      | default|           emp|      false|
      +--------+--------------+-----------+*/
  }
}
​

验证完毕。

 

第二部分 对程序进行远程调试

1.集群配置文件spark-env.sh

首先,在集群配置文件spark-env.sh中加入一下代码

export SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"

这里对上面的几个参数进行说明:

-Xdebug 启用调试特性-Xrunjdwp 启用JDWP实现,包含若干子选项:transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。address=8888 JVM在8888端口上监听请求,这个设定为一个不冲突的端口即可。server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。suspend=y y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待。

2.idea的设置

对运行进行配置

idea对spark程序进行远程提交和调试_第1张图片

 

配置完成后,设置断点,在scala程序右键debug即可

idea对spark程序进行远程提交和调试_第2张图片


 

你可能感兴趣的:(大数据,spark,hive,大数据)