【Spark分布式内存计算框架——离线综合实战】3. SparkSession 工具类、广告数据 ETL

SparkSession 工具类

在项目工程【cn.itcast.spark.utils】包下创建工具类:SparkUtils,专门构建SparkSession实例对象,具体步骤如下:

  1. 构建SparkConf对象、设置通用相关属性
  2. 判断应用是否本地模式运行,如果是设置值master
  3. 创建SparkSession.Builder对象,传递SparkConf
  4. 判断应用是否集成Hive,如果集成,设置HiveMetaStore地址
  5. 获取SparkSession实例对象

具体编程代码如下所示:

package cn.itcast.spark.utils
import cn.itcast.spark.config.ApplicationConfig
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
/**
* 构建SparkSession实例对象工具类,加载配置属性
*/
object SparkUtils {
/**
* 构建SparkSession实例对象
* @param clazz 应用Class对象,获取应用类名称
* @return SparkSession实例
*/
def createSparkSession(clazz: Class[_]): SparkSession = {
// 1. 构建SparkConf对象
val sparkConf: SparkConf = new SparkConf()
.setAppName(clazz.getSimpleName.stripSuffix("$"))
// 设置输出文件算法
.set("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", "2")
.set("spark.debug.maxToStringFields", "20000")
// 2. 判断应用是否本地模式运行,如果是设置值
if(ApplicationConfig.APP_LOCAL_MODE){
sparkConf
.setMaster(ApplicationConfig.APP_SPARK_MASTER)
// 设置Shuffle时分区数目
.set("spark.sql.shuffle.partitions", "4")
}
// 3. 创建SparkSession.Builder对象
var builder: SparkSession.Builder = SparkSession.builder()
.config(sparkConf)
// 4. 判断应用是否集成Hive,如果集成,设置HiveMetaStore地址
if(ApplicationConfig.APP_IS_HIVE){
builder = builder
.enableHiveSupport()
.config("hive.metastore.uris", ApplicationConfig.APP_HIVE_META_STORE_URLS)
.config("hive.exec.dynamic.partition.mode", "nonstrict")
}
// 5. 获取SparkSession实例对象
val session: SparkSession = builder.getOrCreate()
// 6. 返回实例
session
}
}

其中应用开发本地模式运行时,设置SparkSQL Shuffle Partitions数目为4,方便快速运行,在测试和生成环境使用spark-submit提交应用时,通过–conf指定此属性的值。

配置log4j日志文件
Spark中提供了log4j的方式记录日志,可以在【$SPARK_HOME/conf/】下,将【log4j.properties.template】文件copy为【log4j.properties】来启用log4j配置,将其放置Project工程【scr/main/resouces】下面,具体内容如下,随时调整日志级别:

# Set everything to be logged to the console
log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
# Set the default spark-shell log level to WARN. When running the spark-shell, the
# log level for this class is used to overwrite the root logger's log level, so that
# the user can have different defaults for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=WARN
# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=WARN
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with H
ive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
# Parquet related logging
log4j.logger.org.apache.parquet.CorruptStatistics=ERROR
log4j.logger.parquet.CorruptStatistics=ERROR

开始应用时,设置【log4j.rootCategory】为【INFO、DEBUG】,方便查看错误信息。

第二章 广告数据 ETL

实际企业项目中,往往收集到数据,需要进一步进行ETL处理操作,保存至数据仓库中,此【综合实战】对广告数据中IP地址解析为省份和城市,最终存储至Hive分区表中,业务逻辑如下:
在这里插入图片描述
其中涉及两个核心步骤:

  • 第一个、IP地址解析,使用第三方库完成;
  • 第二个、存储ETL数据至Hive分区表,采用列式Parquet存储;
2.1 IP 地址解析

解析IP地址为【省份、城市】,推荐使用【ip2region】第三方工具库, 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java、php、c、python、nodejs、golang、c#等查询绑定和Binary、B树、内存三种查询算法。

官网网址:https://gitee.com/lionsoul/ip2region/,Ip2region特性具有如下四个方面的特性:
1)、99.9%准确率
在这里插入图片描述
2)、标准化的数据格式
在这里插入图片描述
3)、体积小
包含了全部的IP,生成的数据库文件ip2region.db只有几MB,最小的版本只有1.5MB,随着数据的详细度增加数据库的大小也慢慢增大,目前还没超过8MB。

4)、查询速度快
在这里插入图片描述
引入使用IP2Region第三方库:

  • 第一步、复制IP数据集【ip2region.db】到工程下的【dataset】目录
    在这里插入图片描述

  • 第二步、在Maven中添加依赖

<!-- 根据ip转换为省市区 -->
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
  • 第三步、ip2region的使用
    在这里插入图片描述

范例演示:传入IP地址解析获取省份和城市,代码思路如下:

a. 创建DbSearch对象,传递字典文件
b. 依据IP地址解析
c. 分割字符串,获取省份和城市

具体代码ConvertIpTest.scala:

package cn.itcast.spark.test.ip
import org.lionsoul.ip2region.{DataBlock, DbConfig, DbSearcher}
/**
* 测试使用ip2Region工具库解析IP地址为省份和城市
*/
object ConvertIpTest {
def main(args: Array[String]): Unit = {
// a. 创建DbSearch对象,传递字典文件
val dbSearcher = new DbSearcher(new DbConfig(), "dataset/ip2region.db")
// b. 依据IP地址解析
val dataBlock: DataBlock = dbSearcher.btreeSearch("182.92.208.23")
// 中国|0|海南省|海口市|教育网
val region: String = dataBlock.getRegion
println(s"$region")
// c. 分割字符串,获取省份和城市
val Array(_, _, province, city, _) = region.split("\\|")
println(s"省份 = $province, 城市 = $city")
}
}

运行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 知识点介绍、代码演示、逻辑分析、灵活举例、使用图形的方式详细演示代码的流程和细节、整合企业级实战案例,全面讲解并突出重点,让学习也变成一种快乐。 课程亮点 1,知识体系完备,阶段学习者都能学有所获。 2,综合各种方式演示代码、分析逻辑,生动形象,化繁为简,讲解通俗易懂。 3,结合工作实践及分析应用,培养解决实际问题的能力。 4,使用综合案例来加强重点知识,用切实的应用场景提升编程能力,充分巩固各个知识点的应用。 5,整个课程的讲解思路是先提出问题,然后分析问题,并编程解决解题。 适用人群 1、对大数据感兴趣的在校生及应届毕业生。 2、对目前职业有进一步提升要求,希望从事大数据行业高薪工作的在职人员。 3、对大数据行业感兴趣的相关人员。 课程内容 第一章、Spark 基础环境 1.课程安排说明 2.Spark 框架概述 3.快速入门 4.Standalone集群及HA 5.Spark 应用开发入门 6.Spark 应用提交 7.Spark on YARN 8.应用部署模式DeployMode 第二章、SparkCore 模块 1.RDD 概念及特性 2.RDD 创建 3.RDD 函数及使用 4.RDD 持久化 5.案例:SogouQ日志分析 6.RDD Checkpoint 7.外部数据源(HBase和MySQL) 8.广播变量和累加器 9.Spark 内核调度 10.Spark 并行度 第三章、SparkSQL 模块 1.快速入门:词频统计 2.SparkSQL 概述 3.DataFrame 4.RDD与DataFrame转换 5.数据分析SQL和DSL 6.案例:电影评分数据分析 7.DataSet 8.外部数据源Exeternal DataSource 9.集成Hive 10.自定义函数UDF 11.分布式SQL引擎(spakr-sqlSpark ThriftServer) 12.Catalyst 优化器 第四章、离线综合实战 1.综合实战概述(需求、调研、业务) 2.环境搭建(大数据环境和应用开发环境) 3.项目初始化(工具类和属性文件) 4.广告数据ETL 5.Spark 分布式缓存 6.业务报表分析 7.应用执行部署 8.Oozie和Hue集成调度Spark 应用 第五章、SparkStreaming 模块 1.Streaming流式应用概述 2.Streaming 计算模式 3.SparkStreaming计算思路 4.入门案例 5.SparkStreaming工作原理 6.DStream及函数 7.集成Kafka 8.案例:百度搜索风云榜(实时ELT、窗口Window和状态State) 9.SparkStreaming Checkpoint 10.消费Kafka偏移量管理 第六章、StructuredStreaming模块 1.StructuredStreaming 概述(核心设计和编程模型) 2.入门案例:WordCount 3.输入源InputSources 4.Streaming Query 设置 5.输出终端OutputSink 6.集成Kafka(Source和Sink) 7.案例:物联网设备数据分析 8.事件时间窗口分析 9.Streaming Deduplication数据去重 10.Continues Processing连续流处理 第七章、实时综合实战 1.综合实战概述(需求、环境搭建和项目初始化) 2.模拟交易订单数据 3.数据实时ETL存储Kafka 4.实时应用停止 5.实时增量存储(存储HBase和Elasticsearch) 6.实时订单报表(Kafka-StructuredStreaming-Redis) 7.实时应用性能调优(数据本地性、反压机制、动态资源和日志管理)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdnGuoYuying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值