idea对spark程序进行远程提交和调试
第一部分 远程提交本文以WordCount程序来实现idea对spark程序进行远程提交和调试环境利用虚拟机搭建拥有3台主机的spark集群hadoop102hadoop103hadoop104IntelliJ IDEA 2020.3.2 (Ultimate Edition)背景知识若要把 Spark SQL 连接到一个部署好的 Hive 上,你必须把 hive-site.xml 复制到 Spar
第一部分 远程提交
本文以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 目录下
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop102:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
步骤 2: 添加pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>HelloWord1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<spark.version>2.1.0</spark.version>
<scala.version>2.11</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
</project>
步骤 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的设置
对运行进行配置
配置完成后,设置断点,在scala程序右键debug即可
更多推荐
所有评论(0)