本文介紹如何在win系統(tǒng)中使用IDEA開發(fā)spark應(yīng)用程序,并將其打成jar包上傳到虛擬機中的三個Ubuntu系統(tǒng),然后在分布式環(huán)境中運行。
主要步驟包括:
- 安裝Scala插件:在Intellij IDEA中安裝Scala插件,并重啟IDEA。
- 創(chuàng)建Maven項目:在Intellij IDEA中創(chuàng)建一個Maven項目,選擇Scala語言,并添加Spark和HBase依賴。
- 配置Scala SDK:在Intellij IDEA中添加Scala SDK,并給項目添加Scala支持。
- 編寫Spark應(yīng)用程序:在src/main/scala目錄下創(chuàng)建一個Scala對象,并編寫Spark代碼。
- 打包和運行Spark項目:在本地模式下測試Spark應(yīng)用程序,打包成jar包,上傳到虛擬機中的master節(jié)點,使用spark-submit命令提交到集群。
?基礎(chǔ)環(huán)境
?首先確保已經(jīng)在虛擬機中安裝配置好Hadoop,HBase和Spark,并且可以正常運行。本文假設(shè)已經(jīng)按照之前文章的步驟搭建了一個三節(jié)點的Hadoop集群,其中scala版本為2.12,hbase版本為2.3.7,spark版本為3.2.3,hadoop版本為3.2.4
一、安裝Scala插件
- 在Intellij IDEA中,選擇File->Settings->Plugins,在Marketplace中搜索scala進行安裝,安裝后根據(jù)提示重啟IDEA。
二、創(chuàng)建Maven項目
- 在Intellij IDEA中,選擇File->New->Project,選擇Maven作為項目類型,填寫項目名稱和位置。
- 在pom.xml文件中添加Spark和HBase相關(guān)的依賴,注意要與虛擬機中的Spark版本和Scala版本保持一致。本文使用的是Spark 3.2.3和Scala 2.12。例如:
<?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>sparkhbase</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<hbase.version>2.3.7</hbase.version>
<hadoop.version>3.2.4</hadoop.version>
<spark.version>3.2.3</spark.version>
<scala.version>2.12</scala.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</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-streaming_${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>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-mapreduce</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>${hbase.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
</project>
三、配置Scala SDK
- 在Intellij IDEA中,選擇File->Project Structure->Global Libraries,添加Scala SDK,選擇本地安裝的Scala版本。
- 在項目中右鍵選擇Add Framework Support,在彈出的對話框中勾選Scala,并選擇對應(yīng)的SDK。
四、編寫Spark應(yīng)用程序
- 在src/main/scala目錄下創(chuàng)建一個包,例如com.spark.example,并在該包下創(chuàng)建一個Scala對象,例如WordCountFromHBase。編寫Spark應(yīng)用程序的代碼,例如:
import org.apache.hadoop.hbase.{HBaseConfiguration, TableName}
import org.apache.hadoop.hbase.client.{Connection, ConnectionFactory, Scan}
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.{SparkConf, SparkContext}
object WordCountFromHBase {
def main(args: Array[String]): Unit = {
//創(chuàng)建Spark配置對象
val conf = new SparkConf().setAppName("WordCountFromHBase").setMaster("local")
//創(chuàng)建Spark上下文對象
val sc = new SparkContext(conf)
//創(chuàng)建HBase配置對象
val hbaseConf = HBaseConfiguration.create()
//設(shè)置HBase的Zookeeper地址
hbaseConf.set("hbase.zookeeper.quorum", "hadoop100:2181,hadoop200:2181,hadoop201:2181")
//設(shè)置HBase的Zookeeper端口
hbaseConf.set("hbase.zookeeper.property.clientPort", "2181")
//設(shè)置要讀取的HBase表名,提前通過hbase shell創(chuàng)建
val tableName = "testtable"
hbaseConf.set(TableInputFormat.INPUT_TABLE, tableName)
//創(chuàng)建HBase連接對象
val connection: Connection = ConnectionFactory.createConnection(hbaseConf)
//獲取HBase表對象
val table = connection.getTable(TableName.valueOf(tableName))
//創(chuàng)建一個掃描對象,指定要讀取的列族和列名
val scan = new Scan()
scan.addColumn(Bytes.toBytes("f"), Bytes.toBytes("word"))
//將掃描對象轉(zhuǎn)換為字符串,設(shè)置到HBase配置對象中
hbaseConf.set(TableInputFormat.SCAN, TableMapReduceUtil.convertScanToString(scan))
//從HBase中讀取數(shù)據(jù),返回一個RDD
val hbaseRDD = sc.newAPIHadoopRDD(hbaseConf, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result])
//對RDD進行單詞統(tǒng)計
val wordCount = hbaseRDD.map(tuple => {
//獲取Result對象
val result = tuple._2
//獲取word列的值,轉(zhuǎn)換為字符串
val word = Bytes.toString(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("word")))
//返回(word, 1)的元組
(word, 1)
}).reduceByKey((a, b) => a + b)
//打印結(jié)果
wordCount.foreach(println)
//關(guān)閉Spark上下文和HBase連接
sc.stop()
connection.close()
}
}
五、打包和運行Spark項目
- 在Intellij IDEA中右鍵運行WordCountFromHBase對象,可以在本地模式下測試Spark應(yīng)用程序是否正確。如果沒有問題,可以進行打包操作。
- 在Intellij IDEA中打開Maven工具欄,雙擊lifecycle下的package命令,將項目打成jar包。打包完成后的jar包在target目錄下,例如spark-example-1.0-SNAPSHOT.jar。
- 將jar包上傳到虛擬機中的hadoop100主節(jié)點,userjar/目錄。
- 在master節(jié)點上使用spark-submit命令提交Spark應(yīng)用程序到集群,指定jar包路徑和主類名。例如:
spark-submit --class com.spark.example.WordCountFromHBase spark-example-1.0-SNAPSHOT.jar
- 查看Spark應(yīng)用程序的運行結(jié)果,可以在終端中輸出,也可以在Spark Web UI中查看。
打包方式二:?
File->Project Structure->artifacts->點擊加號->JAR->from model->點擊Main Class選項框后的文件夾->點擊Projet->選擇main方法->點擊ok
僅保留類似紅框中函數(shù)名的程序包,去掉多余依賴,打成比較小的jar包,需要linux中的軟件環(huán)境與依賴版本相同才能運行
?
之后Build->Build artifacts->選中項目點擊build即可文章來源:http://www.zghlxwxcb.cn/news/detail-663984.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-663984.html
到了這里,關(guān)于Intellij IDEA編寫Spark應(yīng)用程序的環(huán)境配置和操作步驟的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!