基于华为云DLI运行Spark作业
概述 数据湖探索(Data Lake Insight,简称DLI)是完全兼容Apache Spark、Apache Flink、openLooKeng(基于Apache Presto)生态,提供一站式的流处理、批处理、交互式分析的Serverless融合处理分析服务。用户不需要管理任何服务器,即开即用。支持标准SQL/Spark SQL/Flink SQL,支持多种接入方式,并兼容主流数据格式。数据无需复杂的抽取、转换、加载,使用SQL或程序就可以对云上CloudTable、RDS、DWS、CSS、OBS、ECS自建数据库以及线下数据库的异构数据进行探索。本文介绍如何基于华为云DLI运行Spark作业。
准备工作
1.注册华为云账户并进入控制台,在左侧的导航栏搜索DLI进入DLI控制台界面。
2.购买队列
在DLI控制台左侧导航栏选择队列管理,进入队列列表。
点击右上角购买队列按钮购买队列,如图选择队列规格后提交订单就会生成一个按需计费的通用队列,该队列的规格为16CU。
购买成功后队列管理界面如图所示:
3.开通obs(Object Store Service,对象存储服务)
在最左侧华为云的导航栏中搜索OBS进入OBS服务的控制台,OBS是云上的一个文件系统,其他云服务和用户需要通过它实现数据传输。
在OBS控制台界面点击右上角“创建桶”,在配置界面只需要设置桶名称,其他保持默认,就完成了桶的创建。此处桶名称需要保证唯一性,不能和本用户已有桶重名,也不能和其他用户已有的桶重名。
点击立即创建,可以看到桶列表中已有刚刚创建的桶:
以上就是全部准备工作,下面就可以开发Spark作业提交到DLI上运行了。
提交Spark作业
首先在DLI上运行Spark的示例程序SparkPI,利用大数据计算圆周率,其原理在一个正方形中取离散点,统计到中心的距离小于二分之一边长的点的数量与总数量的比值,就是近似的圆周率。
创建一个scala工程,添加scala的依赖:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.4.5</version>
</dependency>
新增一个scala文件SparkPi.scala:
import org.apache.spark.SparkContext
import scala.math.random
object SparkPi {
def main(args: Array[String]): Unit = {
val sc = new SparkContext
val slices = if (args.length > 0) args(0).toInt else 2
val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
val count = sc.parallelize(1 until n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x*x + y*y <= 1) 1 else 0
}.reduce(_ + _)
println(s"Pi is roughly ${4.0 * count / (n - 1)}")
sc.stop()
}
}
将代码打包成jar包上传到OBS桶中:在obs控制台界面选择桶进入桶管理界面,在左侧导航栏选择对象,点击上传对象,传入打包好的jar包。
进入DLI控制台,进入Spark作业界面,点击右上角创建作业:
在作业创建界面中所属队列下拉框中选择准备阶段中创建的队列,应用程序选择obs中上传的jar包,并在主类输入框写入jar包中scala程序的类名就可以点击执行了。为了方便后续的查看,还可以为作业添加名称;为了使得到的圆周率值更准确,还可以配置应用程序参数,数值越大所需的计算量越大,所求的的值越准确。
执行作业后可以在作业列表看到作业的状态:
当看到作业状态变为已成功时,点击更多-Driver日志,就可以看到所求得的圆周率值:
总结
可以看出基于华为云DLI,简单的界面化操作就可以运行一个大数据作业。无论是初涉大数据领域的传统企业还是依赖于大数据分析的互联网ToC企业,都能够集中精力到自身大数据业务的开发上,而无需关注底层的硬件和大数据平台的搭建,可以有效降低运维成本和开发成本。
- 点赞
- 收藏
- 关注作者
评论(0)