更新时间:2024-06-12 GMT+08:00
分享

在本地Windows环境中调测Spark应用

在程序代码完成开发后,您可以在Windows环境中运行应用。使用Scala或Java语言开发的应用程序在IDEA端的运行步骤是一样的。

  • Windows环境中目前只提供通过JDBC访问Spark SQL的程序样例代码的运行,其他样例代码暂不提供。
  • 用户需保证Maven已配置华为镜像站中SDK的Maven镜像仓库,具体可参考配置华为开源镜像仓

编包并运行程序

  1. 获取样例代码。

    下载样例工程的Maven工程源码和配置文件,请参见获取MRS应用开发样例工程

    将样例代码导入IDEA中。

  2. 获取配置文件。

    1. 从集群的客户端中获取文件。在“$SPARK_HOME/conf”中下载hive-site.xml与spark-defaults.conf文件到本地。
    2. 在集群的FusionInsight Manager页面下载所使用用户的认证文件到本地。

  3. 在HDFS中上传数据。

    1. 在Liunx中新建文本文件data,将如下数据内容保存到data文件中。
      Miranda,32 
      Karlie,23 
      Candice,27
    2. 在HDFS客户端,执行如下命令获取安全认证。

      cd {客户端安装目录}

      kinit {用于认证的业务用户}

    3. 在Linux系统HDFS客户端使用命令hadoop fs -mkdir /data(hdfs dfs命令有同样的作用),创建对应目录。
    4. 在Linux系统HDFS客户端使用命令hadoop fs -put data /data,上传数据文件。

  4. 在样例代码中配置相关参数。

    1. 认证用户配置。

      userPrincipal配置为所使用的用户。

      userKeytabPath配置为下载的keytab文件的路径。

      Krb5ConfPath配置为下载的krb5.conf文件的路径。

      域名配置为DEFAULT_REALM,在KerberosUtil类中修改DEFAULT_REALM为集群的域名。

    2. 将securityConfig拼接的字符串中user.principal与user.keytab修改为相应的用户名与路径。注意这里keytab的路径需要使用“/”。

    3. 将加载数据的sql语句改为“LOAD DATA INPATH 'hdfs:/data/data' INTO TABLE CHILD”。

  5. 在程序运行时添加运行参数,分别为hive-site.xml与spark-defaults.conf文件的路径。

  6. 运行程序。

查看调试结果

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/mavenlocal/org/apache/logging/log4j/log4j-slf4j-impl/2.6.2/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/mavenlocal/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
---- Begin executing sql: CREATE TABLE IF NOT EXISTS CHILD (NAME STRING, AGE INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ----
Result	
---- Done executing sql: CREATE TABLE IF NOT EXISTS CHILD (NAME STRING, AGE INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ----
---- Begin executing sql: LOAD DATA INPATH 'hdfs:/data/data' INTO TABLE CHILD ----
Result	
---- Done executing sql: LOAD DATA INPATH 'hdfs:/data/data' INTO TABLE CHILD ----
---- Begin executing sql: SELECT * FROM child ----
NAME	AGE	
Miranda	32	
Karlie	23	
Candice	27	
---- Done executing sql: SELECT * FROM child ----
---- Begin executing sql: DROP TABLE child ----
Result	
---- Done executing sql: DROP TABLE child ----

Process finished with exit code 0

相关文档