开发本地环境--支撑spark连接远程hive数仓

本文介绍了如何在开发环境中,通过设置Spark本地运行模式,简化Maven打包和集群部署的流程,直接在IDE如Idea中运行Spark代码连接远程Hive。关键在于配置SparkMaster为local,并在Windows的hosts文件中映射集群域名。提供了一个测试示例和辅助调试工具类。

一、背景

在开发Spark阶段,可能需要频繁的测试连接Hive、Redis、Kafka、Zookeeper,如果按常规操作操作,如下:

  • 1.Maven打成jar发布包
  • 2.上传至集群(Xshell、FileZilla等类型工具)
  • 3.使用spark2-submit 工具启动

这些步骤时,如果调试次数众多,那将极其麻烦,耗时耗力。

下面介绍一下本地启动spark程序(如在Idea、eclipse等IDE上),通过直接运行本地 Spark 代码中的 main函数即可轻松访问远程Hive数仓。

二、实验方案

2.1 方案说明

如果使用在开发环境本地使用local方式通过spark访问其他外部资源,必须要设置Master 为 local方式, 这里有2种形式:

  • 1.如果使用的是SparkConf对象,则需要使用其setMaster(params)方法,如下:

sparkConf.setMaster( "local[1]" )

  • 2.如果使用的是SparkSession.Builder对象, 则需要使用其master(params)方法,如下:

sessionBuilder
.master( "local[*]" )
.config( "hive.metastore.uris", "thrift://nn1.cdh.com:9083" )

2.2 注意事项

在这里插入图片描述

由hive配置文件 hive-site.xml 可知,配置项 “hive.metastore.uris”使用的是集群的 域名 方式配置的资源路径,而非直接使用IP地址方式。
故本地(如Windows10)中需要对集群的IP和域名在本地做映射配置,这个配置文件在每种操作系统上对应的文件分别为:

  • Linux: /etc/hosts
  • Windows: C:\Windows\System32\drivers\etc\hosts
  • macOS: /etc/hosts

Windows配置实例:
在这里插入图片描述
推荐使用第三方工具SwitchHosts来进行配置:

#CDH Test Cluster
111.111.111.111  nn1.cdh.com nn1
111.111.111.112  nn2.cdh.com nn2
111.111.111.113  dn1.cdh.com dn1
111.111.111.114  dn2.cdh.com dn2
....

三、操作记录

本地Spark连接远程Hive数仓测试类:

package com.david.test

import com.ssss.utils.SparkDebugTools
import org.apache.spark.sql.SparkSession

/**
 * 本地Spark连接远程Hive数仓测试类
 */
object SparkDirectAccessHiveTest {

  def main(args: Array[String]): Unit = {

	// v1.0
    /*val spark = SparkSession
      .builder()
      .appName( "Spark Direct Access Hive Test" )
      .master( "local[*]" )
      .config( "hive.metastore.uris", "thrift://nn1.cdh.com:9083" )
      .enableHiveSupport()
      .getOrCreate()*/

    // v2.0
    val sparkBuilder = SparkSession
      .builder()

    SparkDebugTools.tryEnableLocalRun2( sparkBuilder )

    val spark = sparkBuilder
      .appName( "Spark Direct Access Hive Test" )
      .enableHiveSupport()
      .getOrCreate()

    val df = spark.read.table( "ods.test_table" )
    df.show()

    Thread.sleep( 60 * 1000 )

    spark.close()
  }

}

Spark调试工具类:代码清单

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

/**
 * Spark调试工具类
 *
 * 如果是Windows、MacOS操作系统,则允许用户在本地进行调试.
 */
object SparkDebugTools {

  private val os = System.getProperty( "os.name" ).toLowerCase

  def tryEnableLocalRun1(sparkConf: SparkConf): Unit = {
    println( "--------os=" + os )

    if (os.indexOf( "linux" ) == -1) {
      sparkConf.setMaster( "local[1]" )
    }
  }

  def tryEnableLocalRun2(sessionBuilder: SparkSession.Builder): Unit = {
    println( "--------os=" + os )

    if (os.indexOf( "linux" ) == -1) {
      sessionBuilder
        .master( "local[*]" )
        .config( "hive.metastore.uris", "thrift://nn1.cdh.com:9083" )
    }
  }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值