分析流程image.png

项目概述

项目规划

  1. 需求:实现【报表统计】功能,进行可视化
  2. 数据调研:分析数据格式,字段含义
  3. 环境搭建:大数据环境、开发环境
  4. 项目初始化:工具类编写、标准定义

image.png

环境搭建

大数据环境

基础软件 java1.8.0_311
scala-2.13.8
mysql-5.7.31
大数据软件 hadoop-3.2.2
hive-3.1.2
spark-3.1.2-bin-hadoop3.2
oozie
hue

所需启动服务环境:

  • HDFS:start-dfs.sh
  • YARN:start-yarn.sh
  • MRHistory:mr-jobhistory-daemon.sh start historyserver
  • Spark History:start-history-server.sh
  • Oozie:oozied.sh start
  • Hue:hue.daemon.sh start
  • HiveMetaStore:hive —service metastore
  • Spark JDBC/ODBC Server:start-thriftserver.sh —master local[2]
  • Beeline:beeline -u jdbc:hive2://master01:10000 -n root -p 123456

    应用开发环境

  • 构建SparkSession实例对象,数据加载、运行模式、集成Hive
    image.png

  • 属性配置文件,存储应用相关配置
    image.png

    项目初始化

  • 加载属性文件

  • SparkSession工具类
  • 配置log4j日志

    数据ETL

  • IP地址解析
    https://gitee.com/lionsoul/ip2region/

  • IP工具类
  • Hive表创建(必须在Hive中创建,否则有问题)
    创建数据库【itcast_ads】和表【pmt_ads_info】
  • 日期工具类
  • 数据ETL
    第一步、加载json数据

第二步、解析IP地址为省份和城市
第三步、数据保存至Hive

  • 分布式缓存
    spark.sparkContext.addFile(AppConfig.IP_DATA_REGION_PATH)
    new DbSearcher(new DbConfig(), SparkFiles.get(“ip2region.db”))

    业务报表分析

    参考文档:/Users/qinlei/Documents/Notebook/Spark/报表数据离线实战

    应用执行调度

    应用打包

    在集群环境运行开发Spark Application,首先要打成jar,直接使用Maven插件即可。

  • mvn package

  • 服务器:mkdir -p /root/submit-ads-app
    scp pmt.json、ip2region.db、应用程序bubble-learn-ads-1.0-SNAPSHOT.jar
  • 服务器:mkdir -p /root/submit-ads-app/jars
    将应用程序相关jar上传至此
    image.png
  • HDFS服务器:hdfs dfs -mkdir -p /spark/dataset/
    hdfs dfs -put /root/submit-ads-app/pmt.json /spark/dataset/
    hdfs dfs -put /root/submit-ads-app/ip2region.db /spark/dataset/
    hdfs dfs -put /root/submit-ads-app/bubble-learn-ads-1.0-SNAPSHOT.jar /spark/apps
  • 上传spark目录下的jar
    cd /opt/bigdata/spark/jars/
    hdfs dfs -put * /spark/apps/jars

注意配置文件的更新

集群提交运行

https://spark.apache.org/docs/2.4.5/submitting-applications.html

本地提交模式

  1. # 本地运行模式 ETL应用运行(ads_elt)提交应用命令
  2. EXTERNAL_JARS=/home/submit-ads-app/jars
  3. spark-submit --master local[2] \
  4. --conf "spark.sql.shuffle.partitions=2" \
  5. --class com.bubble.ads.etl.PmtEtlRunner \
  6. --jars ${EXTERNAL_JARS}/ip2region-1.7.2.jar,${EXTERNAL_JARS}/config-1.4.1.jar \
  7. hdfs://master01:8020/spark/apps/bubble-learn-ads-1.0-SNAPSHOT.jar
  8. #报表Report应用运行(ads_report)提交应用命令
  9. EXTERNAL_JARS=/home/submit-ads-app/jars
  10. spark-submit --master local[2] \
  11. --conf "spark.sql.shuffle.partitions=2" \
  12. --class com.bubble.ads.report.PmtReportRunner \
  13. --jars ${EXTERNAL_JARS}/mysql-connector-java-8.0.27.jar,${EXTERNAL_JARS}/config-1.4.1.jar,${EXTERNAL_JARS}/protobuf-java-3.7.1.jar \
  14. hdfs://master01:8020/spark/apps/bubble-learn-ads-1.0-SNAPSHOT.jar

集群提交模式

#客户端模式
EXTERNAL_JARS=/home/submit-ads-app/jars
spark-submit \
--master yarn \
--deploy-mode client  \
--driver-memory 512m  \
--executor-memory 512m \
--executor-cores 1 \
--num-executors 2 \
--queue default \
--conf spark.sql.shuffle.partitions=2 \
--class com.bubble.ads.report.PmtReportRunner \
--jars ${EXTERNAL_JARS}/mysql-connector-java-8.0.27.jar,${EXTERNAL_JARS}/config-1.4.1.jar,${EXTERNAL_JARS}/protobuf-java-3.7.1.jar \
hdfs://master01:8020/spark/apps/bubble-learn-ads-1.0-SNAPSHOT.jar

# 集群模式
EXTERNAL_JARS=/home/submit-ads-app/jars
spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 512m  \
--executor-memory 512m \
--executor-cores 1 \
--num-executors 2 \
--queue default \
--conf spark.sql.shuffle.partitions=2 \
--class com.bubble.ads.report.PmtReportRunner \
--jars ${EXTERNAL_JARS}/mysql-connector-java-8.0.27.jar,${EXTERNAL_JARS}/config-1.4.1.jar,${EXTERNAL_JARS}/protobuf-java-3.7.1.jar \
hdfs://master01:8020/spark/apps/bubble-learn-ads-1.0-SNAPSHOT.jar

由于从HDFS上加载数据,封装到DataFrame中,默认的分区数目等于block 数目,所以每个Task 处理数据最大量为128MB,无需设置并行度,但是要是从HBase表或者Elasticsearch索引加载数据, 需要考虑分区数目(并行度spark.default.parallelism)。

前端大屏展示

TODO