Intellij IDEA编写Spark应用程序的环境配置和操作步骤

news2024/11/17 0:04:05

本文介绍如何在win系统中使用IDEA开发spark应用程序,并将其打成jar包上传到虚拟机中的三个Ubuntu系统,然后在分布式环境中运行。

主要步骤包括:

  • 安装Scala插件:在Intellij IDEA中安装Scala插件,并重启IDEA。
  • 创建Maven项目:在Intellij IDEA中创建一个Maven项目,选择Scala语言,并添加Spark和HBase依赖。
  • 配置Scala SDK:在Intellij IDEA中添加Scala SDK,并给项目添加Scala支持。
  • 编写Spark应用程序:在src/main/scala目录下创建一个Scala对象,并编写Spark代码。
  • 打包和运行Spark项目:在本地模式下测试Spark应用程序,打包成jar包,上传到虚拟机中的master节点,使用spark-submit命令提交到集群。

 基础环境

 首先确保已经在虚拟机中安装配置好Hadoop,HBase和Spark,并且可以正常运行。本文假设已经按照之前文章的步骤搭建了一个三节点的Hadoop集群,其中scala版本为2.12,hbase版本为2.3.7,spark版本为3.2.3,hadoop版本为3.2.4

一、安装Scala插件

  • 在Intellij IDEA中,选择File->Settings->Plugins,在Marketplace中搜索scala进行安装,安装后根据提示重启IDEA。

二、创建Maven项目

  • 在Intellij IDEA中,选择File->New->Project,选择Maven作为项目类型,填写项目名称和位置。
  • 在pom.xml文件中添加Spark和HBase相关的依赖,注意要与虚拟机中的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,并选择对应的SDK。

四、编写Spark应用程序

  • 在src/main/scala目录下创建一个包,例如com.spark.example,并在该包下创建一个Scala对象,例如WordCountFromHBase。编写Spark应用程序的代码,例如:
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 = {
    //创建Spark配置对象
    val conf = new SparkConf().setAppName("WordCountFromHBase").setMaster("local")
    //创建Spark上下文对象
    val sc = new SparkContext(conf)
    //创建HBase配置对象
    val hbaseConf = HBaseConfiguration.create()
    //设置HBase的Zookeeper地址
    hbaseConf.set("hbase.zookeeper.quorum", "hadoop100:2181,hadoop200:2181,hadoop201:2181")
    //设置HBase的Zookeeper端口
    hbaseConf.set("hbase.zookeeper.property.clientPort", "2181")
    //设置要读取的HBase表名,提前通过hbase shell创建
    val tableName = "testtable"
    hbaseConf.set(TableInputFormat.INPUT_TABLE, tableName)
    //创建HBase连接对象
    val connection: Connection = ConnectionFactory.createConnection(hbaseConf)
    //获取HBase表对象
    val table = connection.getTable(TableName.valueOf(tableName))
    //创建一个扫描对象,指定要读取的列族和列名
    val scan = new Scan()
    scan.addColumn(Bytes.toBytes("f"), Bytes.toBytes("word"))
    //将扫描对象转换为字符串,设置到HBase配置对象中
    hbaseConf.set(TableInputFormat.SCAN, TableMapReduceUtil.convertScanToString(scan))
    //从HBase中读取数据,返回一个RDD
    val hbaseRDD = sc.newAPIHadoopRDD(hbaseConf, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result])
    //对RDD进行单词统计
    val wordCount = hbaseRDD.map(tuple => {
      //获取Result对象
      val result = tuple._2
      //获取word列的值,转换为字符串
      val word = Bytes.toString(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("word")))
      //返回(word, 1)的元组
      (word, 1)
    }).reduceByKey((a, b) => a + b)
    //打印结果
    wordCount.foreach(println)
    //关闭Spark上下文和HBase连接
    sc.stop()
    connection.close()
  }
}

五、打包和运行Spark项目

  • 在Intellij IDEA中右键运行WordCountFromHBase对象,可以在本地模式下测试Spark应用程序是否正确。如果没有问题,可以进行打包操作。
  • 在Intellij IDEA中打开Maven工具栏,双击lifecycle下的package命令,将项目打成jar包。打包完成后的jar包在target目录下,例如spark-example-1.0-SNAPSHOT.jar。
  • 将jar包上传到虚拟机中的hadoop100主节点,userjar/目录。
  • 在master节点上使用spark-submit命令提交Spark应用程序到集群,指定jar包路径和主类名。例如:
spark-submit --class com.spark.example.WordCountFromHBase spark-example-1.0-SNAPSHOT.jar
  • 查看Spark应用程序的运行结果,可以在终端中输出,也可以在Spark Web UI中查看。

打包方式二: 

File->Project Structure->artifacts->点击加号->JAR->from model->点击Main Class选项框后的文件夹->点击Projet->选择main方法->点击ok

仅保留类似红框中函数名的程序包,去掉多余依赖,打成比较小的jar包,需要linux中的软件环境与依赖版本相同才能运行

 

之后Build->Build artifacts->选中项目点击build即可


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

航空保障装备虚拟3d展览展示仿真系统助力企业降本增效

航空装备被认为是一个现代化国家核心竞争力的集中体现。航空装备制造业不仅是维护发展环境稳定的重要保障&#xff0c;也是推动经济转型升级的战略性产业。 3D虚拟展示技术是数字化转型中一项不可或缺的技术手段&#xff0c;将3D虚拟现实技术与工业制造业的有机融合&#xff0c…

chatgpt赋能python:Python第三方包安装方法详解

Python第三方包安装方法详解 为什么要安装第三方包&#xff1f; 在Python编程中&#xff0c;常常需要使用到一些额外的功能模块&#xff0c;但是Python自身不具备这些功能&#xff0c;需要通过安装第三方包来实现。例如&#xff0c;Python标准库中没有Jupyter Notebook工具&a…

T5、RoBERTa、悟道·天鹰、紫东太初、CPM作者谈基础模型前沿技术丨大模型科研、创业避坑指南...

导读 大语言模型日益火爆&#xff0c;学者们的研究方向是指明灯。那么相关大模型重要项目的主要贡献者怎么看&#xff1f;6月9日的北京智源大会“基础模型前沿技术”论坛邀请了T5、RoBERTa、悟道天鹰、紫东太初、CPM等重要模型工作作者出席。 图注&#xff1a;五位嘉宾现场讨论…

chatgpt赋能python:Python如何设置画布颜色:一份详尽指南

Python如何设置画布颜色&#xff1a;一份详尽指南 在计算机图形学中&#xff0c;画布颜色是指画布的背景颜色。当然&#xff0c;通过Python设置画布颜色非常简单&#xff0c;本篇文章将为您提供一份详尽指南。 什么是画布颜色&#xff1f; 在Python中创建一个画布时&#xf…

MySQL 官方示例数据库如何下载

文章结构 下载 MySQL 的示例数据库示例数据库介绍以及安装后续就是自己使用了参考网址 MySQL 提供了一些非常好的用来演示 MySQL 各项功能的示例数据库&#xff0c;同 Oracle 也提供了示例数据库。但是很少有人知道 MySQL 也提供&#xff0c;或许是因为它没有像 Oracle 一样在安…

chatgpt赋能python:Python教程:如何设置画布大小?

Python教程&#xff1a;如何设置画布大小&#xff1f; 在Python中&#xff0c;我们可以使用各种图形库来创建各种类型的图。有时&#xff0c;我们需要调整图像的大小以适应我们的需求。所以&#xff0c;在这篇文章中&#xff0c;我将介绍如何使用Python来设置画布大小。 什么…

cocos creator 帧同步游戏示例

最近闲来无事重新研究一下同步策略里面的帧同步&#xff0c;首先说下帧同步与状态同步的区别&#xff0c; 1&#xff1a;帧同步&#xff1a; 帧同步是一种多人游戏中常用的网络同步技术&#xff0c;用于确保不同玩家之间的游戏状态保持一致。在帧同步中&#xff0c;所有玩家通…

chatgpt赋能python:Python计算字符串中的小写字母

Python计算字符串中的小写字母 在搜索引擎优化中&#xff0c;我们经常需要计算一个文本中小写字母的数量。Python语言的强大和灵活性使得它成为实现这一目标的理想选择。在本文中&#xff0c;我们将介绍如何使用Python语言计算字符串中的小写字母。 了解Python字符串 在Pyth…

Nodejs三、模块化

零、文章目录 Nodejs三、模块化 1、模块化的基本概念 &#xff08;1&#xff09;模块化是什么 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 &#xff08;2&#xff…

基于Java汽车养护管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

计算机网络408题(2020-2022)

2020年 2021年 下面借此大题来分析主机H1访问Web服务器的应用场景的全部过程。 2022年 综合大题 冲突域是指一组设备共享同一段物理网络&#xff0c;当其中一个设备发送数据时&#xff0c;其他设备必须等待&#xff0c;以避免数据冲突。在一个冲突域中&#xff0c;当两个或多…

计算机网络管理 实验4(二) SNMP报文管理信息结构SMI及其规定的ASN.1分析并使用Wireshark抓包分析sysContact的相关信息

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

关系数据库SQL数据查询

关系数据库SQL数据查询 数据查询 一、单表查询 1.查询仅涉及一个表&#xff0c;选择表中的若干列 [例1] 查询全体学生的学号与姓名。SELECT Sno,SnameFROM Student; [例2] 查询全体学生的姓名、学号、所在系。SELECT Sname,Sno,SdeptFROM Student;查询全部列 选出所有属…

python代码实现生成二维码

二维码结构&#xff1a; 从图中我们可以看出二维码结构整体划分为功能图形和编码区两大部分&#xff0c;功能图形又细分为&#xff1a;空白区、位置探测图形、位置探测图形分隔符、定位图形、校正图形&#xff0c;而编码区细分为&#xff1a;格式信息、版本信息、数据和纠错码字…

Flutter进阶-List数组的深浅拷贝问题

浅拷贝&#xff1a;拷贝指针深拷贝&#xff1a;拷贝一份新的对象 浅拷贝出现的问题&#xff1a;操作一个数组另一个数组也发生改变 List list [1, 2, 3, 4, 5]; List copyList list; copyList[0] abc; print(list);///打印&#xff1a; [abc,2,3,4,5] print(copyList);///打…

机器学习——博客推荐系统

前言 在当今的信息时代&#xff0c;技术博客已成为知识、见解和娱乐的重要来源。随着博客内容的日益丰富&#xff0c;找到最相关和最引人入胜的文章对用户来说可能是一项艰巨的任务。为了应对这一挑战&#xff0c;我们需要一个全面的博客推荐系统&#xff0c;利用尖端技术和机…

RabbitMQ + SpringCloud使用及避坑(大章)

RabbitMQ 的开发语言是Erlang&#xff0c;它的源码阅读起来学习成本太高了&#xff0c;所以这里就不详细看了&#xff0c;本次主要是结合springCloud 的项目来真正使用RabbitMQ 的几种交换器&#xff0c;还有一些业务场景的模拟&#xff0c;最主要的还是避坑。 为什么说是避坑…

JavaSE进阶--玩转IO流

文章目录 前言一、File类介绍1、概念引入2、实际应用2.1 操作文件2.2 操作文件夹 二、IO流介绍三、字符流1、读文件1.1 一次读一个1.2 一次读多个&#xff0c;使用char数组去装 2、写文件2.1 一次写一个2.2 一次写完&#xff0c;使用字符数组 3、文件复制3.1 综合应用3.2 使用缓…

ESP32(MicroPython)LVGL输入字符显示到OLED屏幕

本程序用于输入字符显示到OLED屏幕&#xff08;按回车键输出字符到屏幕&#xff09;&#xff0c;依次输出六行字符&#xff0c;再按回车会清空屏幕并从第一行开始输出。 代码如下 import lvgl as lv import time from espidf import VSPI_HOST from ili9XXX import ili9341…

模拟随机验证码

网拷一篇中英文文本&#xff0c;去除标点空格作为验证码字符集。 (本笔记适合对 python 的随机模块有一定了解的的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&a…