加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

基于Spark的数据分析实践

发布时间:2019-06-20 12:35:56 所属栏目:教程 来源:EAWorld
导读:引言: Spark是在借鉴了MapReduce之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷。Spark主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件。 本文主要分析了 Spark RDD 以及 RDD 作为开发的不足之处,介

Transform 支持 cached 属性,默认为 false;如果设置为 true,相当于把该结果缓存到内存中,缓存到内存中的数据在后续其它 Transform 中使用能提高计算效率。但是需使用大量内存,开发者需要评估该数据集能否放到内存中,防止出现 OutofMemory 的异常。

SparkSQL Flow Targets

SparkSQL Flow Targets 支持输出数据到一个或者多个目标。这些目标,基本覆盖了 Source 包含的外部系统。下面以 Hive 举例说明:

  1. <target type="hive" 
  2.  table_name="cust_id_agmt_id_t"  
  3.  savemode=”append” 
  4. target_table_name="cust_id_agmt_id_h"/> 
  1. table_name 为 source 或者 Transform 定义的表名称;
  2. target_table_name 为 hive 中的表结果,Hive 表可不存在也可存在,sparksql 会根据 DataFrame 的数据类型自动创建表;
  3. savemode 默认为 overwrite 覆盖写入,当写入目标已存在时删除源表再写入;支持 append 模式, 可增量写入。

Target 有一个特殊的 show 类型的 target。用于直接在控制台输出一个 DataFrame 的结果到控制台(print),该 target 用于开发和测试。

  1. <target type="show" table_name="cust_id_agmt_id_t" rows=”10000”/> 

Rows 用于控制输出多少行数据。

SparkSQL Around

After 用于 Flow 在运行结束后执行的一个环绕,用于记录日志和写入状态。类似 Java 的 try {} finally{ round.execute() }

多个 round 一定会执行,round 异常不会导致任务失败。

  1. <prepare> 
  2.  <round type="mysql" 
  3.  sql="insert into cpic_task_history(id, task_type, catalog_model, start_time, retry_count, final_status, created_at) 
  4.  values(${uuid}, ${task.type}, ${catalog.model}, ${starttime}, 0, ${status}, now())" 
  5.  url="${jdbc.url}" .../> 
  6. </prepare> 
  7. <after> 
  8.  <round type="mysql" 
  9.  sql="update cpic_task_history set 
  10.  end_time = ${endtime}, final_status = ${status}, error_text = ${error} where id = ${uuid}" 
  11.  url="${jdbc.url}”…/> 
  12. </after> 

Prepare round 和 after round 配合使用可用于记录 SparkSQL Flow 任务的运行日志。

SparkSQL Around的执行效果

基于 Spark 的数据分析实践

Prepare round 可做插入(insert)动作,after round 可做更新 (update)动作,相当于在数据库表中从执行开始到结束有了完整的日志记录。SparkSQL Flow 会保证round 一定能被执行,而且 round 的执行不影响任务的状态。

SparkSQL Flow 提交

  1. bin/spark-submit --master yarn-client --driver-memory 1G  
  2. --num-executors 10 --executor-memory 2G  
  3. --jars /lib/jsoup-1.11.3.jarlib/jsqlparser-0.9.6.jar,/lib/mysql-connector-java-5.1.46.jar  
  4. --conf spark.yarn.jars=hdfs:///lib/spark2/*.jar  
  5. --queue default --name FlowTest  
  6. etl-flow-0.2.0.jar -f hive-flow-test.xml 
基于 Spark 的数据分析实践

接收必须的参数 –f,可选的参数为支持 Kerberos 认证的租户名称principal,和其认证需要的密钥文件。

  1. usage: spark-submit --jars etl-flow.jar --class 
  2.  com.yiidata.etl.flow.source.FlowRunner 
  3.  -f,--xml-file <arg> Flow XML File Path 
  4.  --keytabFile <arg> keytab File Path(Huawei) 
  5.  --krb5File <arg> krb5 File Path(Huawei) 
  6.  --principal <arg> principal for hadoop(Huawei) 

SparkSQL Execution Plan

基于 Spark 的数据分析实践

每个Spark Flow 任务本质上是一连串的 SparkSQL 操作,在 SparkUI SQL tab 里可以看到 flow 中重要的数据表操作。

regiserDataFrameAsTable 是每个 source 和 Transform 的数据在 SparkSQL 中的数据视图,每个视图都会在 SparkContex 中注册一次。

对RegisterDataFrameAsTable的分析

基于 Spark 的数据分析实践

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读