
# 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等工具。
- 已完成Spark客户端的安装及客户端网络连接的配置。
- 对于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包上传至Spark运行环境下（Spark客户端），如"/opt/female"。
4. 进入客户端目录，执行以下命令加载环境变量并登录。如果安装了Spark多实例或者同时安装了Spark和Spark2x，在使用客户端连接具体实例时，请执行以下命令加载具体实例的环境变量。 
   加载环境变量：
   ```
   source bigdata_env
   ```
   加载组件环境变量：
   ```
   source Spark2x/component_env
   ```
   安全认证：
   ```
   kinit <用于认证的业务用户>
   ```
   
   
5. 在bin目录下调用以下脚本提交Spark应用程序。
   
   ```
   spark-submit --class com.huawei.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-sql** 或**spark-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主页面。在服务中选择Spark。
     
     
     
     2. 进入Spark概览页面，单击SparkWebUI任意一个实例，如JobHistory2x(host2)。
     
     3. 进入History Server页面。 History Server页面用于展示已完成和未完成的应用的运行情况。
        图1History Server页面   
        ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676907690.png "点击放大") 
     
     4. 选择一个应用ID，单击此页面将跳转到该应用的Spark UI页面。 Spark UI页面，用于展示正在执行的应用的运行情况。
        图2Spark UI页面   
        ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676747994.png "点击放大") 
      
   
   - 通过查看Spark日志获取应用运行情况。 通过查看[Spark日志介绍](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1971.html)了解应用运行情况，并根据日志信息调整应用程序。
     
   
   
   
   
 
