Spark local模式鏈接集羣hdfs、hive

背景介紹

Spark提供了local、standalone、on yarn等多種運行模式,但爲了保持開發環境與實際運行環境的一致性,一般都是在本地編寫代碼,而後編譯並上傳jar包到Spark集羣調試運行。 可是面對複雜的處理邏輯,或遇到性能問題要修改代碼時,開發人員將不得很少次進行修改、編譯、上傳jar。無休止地重複十分耗費精力,嚴重影響開發效率。sql

Local模式背後的思考

Spark local模式是框架提供的一種使用線程模擬多個進程協調工做的模式,方便咱們在IDE中直接run程序。可是默認狀況下該模式所使用的本地文件系統、本地hive的庫,都與應用真實的運行環境不一致。所以要想使用local模式的快速開發測試,必須先配置local模式使用集羣中的公共資源。apache

如何配置(windows)

集羣環境:hadoop2.7.四、Spark2.1.1 須要軟件:winutils.zip 開發工具:IDEAwindows

  • 配置本地HADOOP_HOME 解壓hadoop-2.7.4.tar.gz到D:\hadoop\hadoop-2.7.4 解壓 winutils.zip 軟件 至 D:\hadoop\hadoop-2.7.4\bin 配置環境變量:HADOOP_HOME D:\hadoop\hadoop-2.7.4 添加 path : %HADOOP_HOME%\bin;bash

  • 拷貝集羣配置文件 集羣文件:core-site.xml、hdfs-site.xml、hive-site.xml 將集羣文件拷貝到工程中的 resources 文件夾app

  • 配置本地DNS解析 目的是讓本地環境可以解析出上述配置文件中的域名框架

  • 配置集羣環境中的HDFS的權限用戶 默認狀況下使用windows本地用戶去讀寫hdfs,很顯然是沒有權限的。 使用以下方式就可解決:工具

System.setProperty("HADOOP_USER_NAME", "hdfs")

複製代碼
  • 運行測試代碼 在IDEA中直接運行以下代碼進行測試:
def main(args: Array[String]): Unit = {
// 設置日誌級別
Logger.getLogger("org").setLevel(Level.INFO)
// 若是在windows本地跑,須要從widnows訪問HDFS,須要指定一個合法的身份
System.setProperty("HADOOP_USER_NAME", "hdfs")

val spark = SparkSession.builder()
.appName("App")
.master("local") // local
.config("HADOOP_USER_NAME","root") // 該種方式不生效
.enableHiveSupport()
.getOrCreate()
val sc = spark.sparkContext
// 導入spark的隱式轉換
import spark.implicits._
// 導入spark sql的functions
import org.apache.spark.sql.functions._

spark.sql("show tables").show()


sc.stop()
spark.stop()
}
複製代碼

總結

配置Spark local模式獲取集羣資源,避免頻繁打jar包、上傳等過程,大大提升開發效率。本文介紹windows下開發環境配置,其餘平臺同理。另外,集羣環境如apache原生版、cdh整合版均已測試可使用。oop

安裝包及項目源碼 提取碼:1i6h性能

相關文章
相關標籤/搜索