更新时间:2024-09-18 GMT+08:00
分享

Spark客户端使用实践

本章节提供从零开始使用Spark,提交Spark应用程序,包括Spark Core及Spark SQL。其中,Spark Core为Spark的内核模块,主要负责任务的执行,用于编写Spark应用程序;Spark SQL为执行SQL的模块。

场景说明

假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发Spark应用程序实现如下要求:

  • 统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。
  • 周末两天的日志文件第一列为姓名,第二列为性别,第三列为本次停留时间,单位为分钟,分隔符为“,”。

log1.txt:周六网民停留日志

LiuYang,female,20
YuanJing,male,10
GuoYijun,male,5
CaiXuyu,female,50
Liyuan,male,20
FangBo,female,50
LiuYang,female,20
YuanJing,male,10
GuoYijun,male,50
CaiXuyu,female,50
FangBo,female,60

log2.txt:周日网民停留日志

LiuYang,female,20
YuanJing,male,10
CaiXuyu,female,50
FangBo,female,50
GuoYijun,male,5
CaiXuyu,female,50
Liyuan,male,20
CaiXuyu,female,50
FangBo,female,50
LiuYang,female,20
YuanJing,male,10
FangBo,female,50
GuoYijun,male,50
CaiXuyu,female,50
FangBo,female,60

前提条件

  • 在Manager界面创建用户并开通其HDFS、YARN、Kafka和Hive权限。
  • 根据所用的开发语言安装并配置IntelliJ IDEA及JDK等工具。
  • 已完成Spark2x客户端的安装及客户端网络连接的配置。
  • 对于Spark SQL程序,需要先在客户端启动Spark SQL或Beeline以输入SQL语句。

操作步骤

  1. 获取样例工程并将其导入IDEA,导入样例工程依赖jar包。通过IDEA配置并生成jar包。
  2. 准备样例工程所需数据。

    将场景说明中的原日志文件放置在HDFS系统中。
    1. 本地新建两个文本文件,分别将log1.txt及log2.txt中的内容复制保存到input_data1.txt和input_data2.txt。
    2. 在HDFS上建立一个文件夹“/tmp/input”,并上传input_data1.txt、input_data2.txt到此目录。

  3. 将生成的jar包上传至Spark2x运行环境下(Spark2x客户端),如“/opt/female”
  4. 进入客户端目录,执行以下命令加载环境变量并登录。如果安装了Spark2x多实例或者同时安装了Spark和Spark2x,在使用客户端连接具体实例时,请执行以下命令加载具体实例的环境变量。

    source bigdata_env

    source Spark2x/component_env

    kinit <用于认证的业务用户>

  5. 在bin目录下调用以下脚本提交Spark应用程序。

    spark-submit --classcom.huaweixxx.bigdata.spark.examples.FemaleInfoCollection--master yarn-client/opt/female/FemaleInfoCollection.jar <inputPath>

    • FemaleInfoCollection.jar为1生成的jar包。
    • <inputPath>是2.b创建的目录。
    • 提交作业时,建议使用默认spark on yarn(即5中的--master yarn-client)模式。开源支持spark standalone模式提交,但不推荐使用,该模式资源使用率低,并且使用HTTP,可能存在安全风险

  6. (可选)在bin目录下调用spark-sqlspark-beeline脚本后便可直接输入SQL语句执行查询等操作。

    如创建一个表,插入一条数据再对表进行查询。

    spark-sql> CREATE TABLE TEST(NAME STRING, AGE INT);
    Time taken: 0.348 seconds
    spark-sql>INSERT INTO TEST VALUES('Jack', 20);
    Time taken: 1.13 seconds
    spark-sql> SELECT * FROM TEST;
    Jack      20
    Time taken: 0.18 seconds, Fetched 1 row(s)

  7. 查看Spark应用运行结果。

    • 通过指定文件查看运行结果数据。

      结果数据的存储路径和格式由Spark应用程序指定。

    • 通过Web页面查看运行情况。
      1. 登录Manager主页面。在服务中选择Spark2x。
      1. 进入Spark2x概览页面,单击SparkWebUI任意一个实例,如JobHistory2x(host2)。
      2. 进入History Server页面。

        History Server页面用于展示已完成和未完成的应用的运行情况。

        图1 History Server页面
      3. 选择一个应用ID,单击此页面将跳转到该应用的Spark UI页面。

        Spark UI页面,用于展示正在执行的应用的运行情况。

        图2 Spark UI页面
    • 通过查看Spark日志获取应用运行情况。

      通过查看Spark日志介绍了解应用运行情况,并根据日志信息调整应用程序。

相关文档