背景介紹
Spark提供了local肆氓、standalone、on yarn等多種運(yùn)行模式谢揪,但為了保持開發(fā)環(huán)境與實(shí)際運(yùn)行環(huán)境的一致性,通常都是在本地編寫代碼凳鬓,然后編譯并上傳jar包到Spark集群調(diào)試運(yùn)行患民。
但是面對復(fù)雜的處理邏輯,或遇到性能問題要修改代碼時匹颤,開發(fā)人員將不得不多次進(jìn)行修改、編譯辽慕、上傳jar赦肃。無休止地重復(fù)十分耗費(fèi)精力,嚴(yán)重影響開發(fā)效率他宛。
Local模式背后的思考
Spark local模式是框架提供的一種使用線程模擬多個進(jìn)程協(xié)調(diào)工作的模式,方便我們在IDE中直接run程序堕汞。但是默認(rèn)情況下該模式所使用的本地文件系統(tǒng)讯检、本地hive的庫琐鲁,都與應(yīng)用真實(shí)的運(yùn)行環(huán)境不一致人灼。因此要想使用local模式的快速開發(fā)測試,必須先配置local模式使用集群中的公共資源奈泪。
如何配置(windows)
集群環(huán)境:hadoop2.7.4灸芳、Spark2.1.1
需要軟件:winutils.zip
開發(fā)工具:IDEA
配置本地HADOOP_HOME
解壓hadoop-2.7.4.tar.gz到D:\hadoop\hadoop-2.7.4
解壓 winutils.zip 軟件 至 D:\hadoop\hadoop-2.7.4\bin
配置環(huán)境變量:HADOOP_HOME D:\hadoop\hadoop-2.7.4
添加 path : %HADOOP_HOME%\bin;拷貝集群配置文件
集群文件:core-site.xml、hdfs-site.xml冯遂、hive-site.xml
將集群文件拷貝到工程中的 resources 文件夾配置本地DNS解析
目的是讓本地環(huán)境能夠解析出上述配置文件中的域名配置集群環(huán)境中的HDFS的權(quán)限用戶
默認(rèn)情況下使用windows本地用戶去讀寫hdfs谒获,很顯然是沒有權(quán)限的。
使用如下方式就可解決:
System.setProperty("HADOOP_USER_NAME", "hdfs")
- 運(yùn)行測試代碼
在IDEA中直接運(yùn)行如下代碼進(jìn)行測試:
def main(args: Array[String]): Unit = {
// 設(shè)置日志級別
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
// 導(dǎo)入spark的隱式轉(zhuǎn)換
import spark.implicits._
// 導(dǎo)入spark sql的functions
import org.apache.spark.sql.functions._
spark.sql("show tables").show()
sc.stop()
spark.stop()
}
總結(jié)
配置Spark local模式獲取集群資源炒俱,避免頻繁打jar包爪膊、上傳等過程,大大提高開發(fā)效率僵芹。本文介紹windows下開發(fā)環(huán)境配置小槐,其他平臺同理。另外凿跳,集群環(huán)境如apache原生版、cdh整合版均已測試可以使用茧彤。
安裝包及項(xiàng)目源碼
提取碼:1i6h