
# 使用Spark2x实现车联网车主驾驶行为分析
#### 应用场景
本实践基于华为云MapReduce服务所编写，用于指导您了解MRS的基本功能，利用MRS服务的Spark2x组件，对车主的驾驶行为进行分析统计，得到用户驾驶行为的分析结果。
原始数据为车主的驾驶行为信息，包括车主在日常的驾驶行为中，是否急加速、急减速、空挡滑行、超速、疲劳驾驶等信息，通过Spark2x组件的强大的分析能力，分析统计指定时间段内，车主急加速、急减速、空挡滑行、超速、疲劳驾驶等违法行为的次数。
![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/note_3.0-zh-cn.png)
本实践相关样例数据及程序以MRS 3.1.0版本为例，建议按照指定版本创建集群。
#### 方案架构
Spark的应用运行架构如[图1]所示，运行流程如下所示：
1. 应用程序（Application）是作为一个进程的集合运行在集群上的，由Driver进行协调。
2. 在运行一个应用时，Driver会去连接集群管理器（Standalone、Mesos、YARN）申请运行Executor资源，并启动ExecutorBackend。然后由集群管理器在不同的应用之间调度资源。Driver同时会启动应用程序DAG调度、Stage划分、Task生成。
3. 然后Spark会把应用的代码（传递给SparkContext的JAR或者Python定义的代码）发送到Executor上。
4. 所有的Task执行完成后，用户的应用程序运行结束。
图1Spark应用运行架构   
![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002009380905.png "点击放大")
#### 操作流程
本实践基本操作流程如下所示：
1. [步骤1：创建MRS集群]：创建一个分析集群，版本号为MRS 3.1.0，不启用Kerberos认证。
2. [步骤2：准备样例程序和数据]：创建OBS并行文件系统，并将Spark2x样例程序和样例数据上传到OBS并行文件系统中。
3. [步骤3：创建作业]：在MRS管理控制台创建SparkSubmit作业并运行。
4. [步骤4：查看作业执行结果]：作业执行完成后在OBS路径中获取日志文件并查看执行结果。
 
 #### 步骤1：创建MRS集群
1. 进入[购买MRS集群页面](https://console.huaweicloud.com/mrs/?#/clusterCreate/quick)。
2. 选择"自定义购买"。 
   参见[表1]配置集群信息。
    表1基础配置和集群配置 
   | **参数名称** | **参数说明**                                                                              | **取值样例**                                                                                                                         |
   |:---|:---|:---|
   | 区域       | 选择区域。 不同区域的云服务产品之间内网互不相通。请就近选择靠近您业务的区域，可减少网络时延，提高访问速度。 | 选择"华北-北京四" 说明： 本指导以"华北-北京四"为例进行介绍，如果您需要选择其他区域进行操作，请确保所有操作均在同一区域进行。 |
   | 计费模式     | 选择待创建的MRS集群的计费模式。                                                                     | 按需计费                                                                                                                             |
   | 集群名称     | 待创建的MRS集群名称。                                                                          | mrs_demo                                                                                                                         |
   | 集群类型     | 待创建的MRS集群类型。                                                                          | 选择"分析集群"，用来做离线数据分析。                                                                                                              |
   | 版本类型     | 待创建的MRS集群版本类型。                                                                        | 选择"普通版"。                                                                                                                         |
   | 集群版本     | 待创建的MRS集群版本。                                                                          | 选择"MRS 3.1.0"。 说明： 本实践仅适用于MRS 3.1.0版本。                                  |
   | 组件选择     | 选择待创建的MRS集群配套的组件。                                                                     | 勾选所有组件。                                                                                                                          |
   | 元数据      | 是否使用外部数据源存储元数据。                                                                       | 选择"本地元数据"。                                                                                                                       |
      
   
   
3. 配置网络配置和节点配置。 
   表2网络配置和节点配置 
   | **参数名称** | **参数含义**                                                           | **取值样例**    |
   |:---|:---|:---|
   | 可用区      | 选择集群工作区域下关联的可用区。                                                   | 可用区2        |
   | 虚拟私有云    | 选择需要创建集群的VPC，单击"查看虚拟私有云"进入VPC服务查看已创建的VPC名称和ID。如果没有VPC，需要创建一个新的VPC。 | xxx         |
   | 子网       | 选择需要创建集群的子网，可进入VPC服务查看VPC下已创建的子网名称和ID。如果VPC下未创建子网，请单击"创建子网"进行创建。   | xxx         |
   | 安全组      | 安全组是一组对弹性云服务器的访问规则的集合，为同一个VPC内具有相同安全保护需求并相互信任的弹性云服务器提供访问策略。        | 自动创建        |
   | 弹性公网IP   | 通过将弹性公网IP与MRS集群绑定，实现使用弹性公网IP访问Manager的目的。                          | 绑定一个弹性公网IP。 |
   | 集群节点     | 配置集群节点信息。                                                          | 保持默认值。      |
      
   
   
4. 参考[表3]配置以下登录凭证信息。
   
    表3登录凭证 
   | **参数名称**   | **参数说明**                      | **取值样例** |
   |:---|:---|:---|
   | Kerberos认证 | 登录Manager管理页面时是否启用Kerberos认证。 | 关闭       |
   | 用户名        | Manager管理员用户，目前默认为admin用户。    | admin    |
   | 密码         | 配置Manager管理员用户的密码。            | xxx      |
   | 确认密码       | 再次输入Manager管理员用户的密码。          | xxx      |
   | 登录方式       | 登录集群ECS节点的方式。                 | 选择"密码"。  |
   | 用户名        | 用于登录ECS的用户，目前默认为root用户。       | root     |
   | 密码         | 配置登录ECS的用户密码。                 | xxx      |
   | 确认密码       | 再次输入登录ECS的用户密码。               | xxx      |
      
   
   
5. 高级配置不开启，企业项目选择"default"。
6. 勾选通信安全授权后，单击"立即购买"，进入任务提交成功页面。
7. 单击"返回集群列表"，可以查看到集群创建的状态。 
   集群创建需要时间，所创集群的初始状态为"启动中"，创建成功后状态更新为"运行中"，请您耐心等待。
   
   
 
 #### 步骤2：准备样例程序和数据
1. 创建OBS并行文件系统，用于存放Spark样例程序、样例数据、作业执行结果和日志。 
   1. 登录华为云管理控制台。
   
   2. 在"服务列表"中，选择"存储 \> 对象存储服务"。
   
   3. 单击"并行文件系统 \> 创建并行文件系统"，创建一个名称为"obs-demo-analysis-hwt4"的文件系统。策略等参数保持默认值。
   
   
   
   
2. 单击文件系统名称。选择左侧导航栏"文件"，在"文件"页签下单击"新建文件夹"，分别新建"program"、"input"文件夹，如[图2]所示。
   
   图2新建文件夹   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001972658478.png)
   
   
3. 从 <https://mrs-obs-cn-north-4.obs.cn-north-4.myhuaweicloud.com/mrs-demon-samples/demon/driver_behavior.jar>路径下载样例程序driver_behavior.jar至本地。
4. 进入"program"文件夹，单击"上传文件"，选择本地存放的driver_behavior.jar样例程序。
5. 单击"上传"，上传样例程序到OBS并行文件系统。
6. 从<https://mrs-obs-cn-north-4.obs.cn-north-4.myhuaweicloud.com/mrs-demon-samples/demon/detail-records.zip>获取Spark样例数据到本地。
7. 将下载的"detail-records.zip"解压，获取[图3]所示的样例数据。
   
   图3样例数据   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001419791718.png "点击放大")
   
   
8. 进入"input"文件夹，单击"上传文件"，选择本地存放的Spark样例数据。
9. 单击"上传"，上传样例数据到OBS并行文件系统。 
   上传[步骤 7]中解压后的数据至"input"文件夹下。
   图4上传样例数据   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002009379841.png "点击放大")
   
   
 
 #### 步骤3：创建作业
1. 在MRS控制台左侧导航栏选择"现有集群"，单击名称为"mrs_demo"的集群。
2. 在集群信息页面选择"作业管理"页签，单击"添加"，进入添加作业页面。
3. 完成作业参数配置。 
   表4配置作业信息 
   | **参数名称** | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | **取值样例**                                                                                              |
   |:---|:---|:---|
   | 作业类型     | 选择待创建的作业类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 选择"SparkSubmit"。                                                                                      |
   | 作业名称     | 自定义作业名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 输入"driver_behavior_task"。                                                                             |
   | 执行程序路径   | 待执行程序包的存放路径。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 单击"OBS"，选择[步骤2：准备样例程序和数据]中上传名称为driver_behavior.jar的jar包。         |
   | 运行程序参数   | 为本次执行的作业配置相关优化参数，用于优化资源使用效率，提升作业的执行性能。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 参数选择"--class"，值输入"com.huawei.bigdata.spark.examples.DriverBehavior"。                                  |
   | 执行程序参数   | 输入***"访问OBS的AK信息 访问OBS的SK信息*** **1** *输入路径 输出路径*"。 - AK/SK请参考**说明**方式获取。  - 1为固定输入，用于指定作业执行时调用的程序函数。  - 输入路径可通过单击"OBS"进行选择输入路径。  - 输出路径请手动输入一个不存在的目录，例如obs://obs-demo-analysis-hwt4/output/。   说明： 访问OBS的AK/SK信息可通过如下方式获取： 1. 登录华为云管理控制台。  2. 单击右上角的用户名，然后选择"我的凭证"。  3. 系统跳转至"我的凭证"页面，单击"访问密钥"。  4. 单击"新增访问密钥"申请新密钥，按照提示输入密码与验证码之后，浏览器自动下载一个"credentials.csv"文件，文件为csv格式，以英文逗号分隔，中间的为AK，最后一个为SK。   | ***AK信息 SK* *信息*** **1** *obs://obs-demo-analysis-hwt4/input/* *obs://obs-demo-analysis-hwt4/output/* |
   | 服务配置参数   | 用于为本次执行的作业修改服务配置参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 保持默认不配置。                                                                                              |
      
   图5添加作业   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002184847721.png "点击放大")
   
   
4. 单击"确定"，开始提交作业，执行程序。
 
 #### 步骤4：查看作业执行结果
1. 进入"作业管理"页面，查看作业执行状态。
2. 等待1\~2分钟，登录OBS控制台，进入"obs-demo-analysis-hwt4"文件系统的"output"目录中，查看执行结果，在生成的csv文件所在行的"操作"列单击"下载"按钮将该文件下载到本地。
3. 在本地将下载后的csv文件使用Excel文本打开，按照样例程序中定义的字段为每列数据进行分类，得到如下图所示作业执行结果。 
   图6执行结果   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0264279695.jpg "点击放大")
   
   
 
