【阿里云 MVP 月度分享】宋亚奇——应用MaxCompute实现电力设备监测数据的批量特征分析...

1 背景知识
电力设备在线监测指在不停电的情况下,对电力设备状况进行连续或周期性地自动监视检测,使用的技术包括:传感器技术、广域通信技术和信息处理技术。电力设备在线监测是实现电力设备状态运行检修管理、提升生产运行管理精益化水平的重要手段,对提升电网智能化水平、实现电力设备状态运行管理具有积极而深远的意义。

随着智能电网建设的推进,电力设备在线监测得到了较大发展并成为趋势,监测数据变得日益庞大,逐渐构成电力设备监测大数据,这给电力设备在线监测系统在数据存储和处理方面带来非常大的技术挑战。

电力设备监测大数据具有体量大、类型多、价值密度低和处理速度快的特点。电网公司监测系统目前过于依赖集中式SAN存储,并基于SOA进行数据集成,主要采用“企业级关系型数据库”,受容量、扩展性以及访问速度的制约,目前只存储二次加工的“熟数据”,而所擅长的关联查询、事务处理在数据分析时又无用武之地,迫切需要新的大数据存储和处理技术来应对。

变压器的局部放电数据是一种典型的电力设备监测数据。局部放电相位分析(phase resolved partial discharge, PRPD)包含了从特征提取到模式识别的过程。本文将全面介绍利用MaxCompute实现局部放电监测数据特征提取的过程。

PD信号分析主要包括三个子过程:(1)基本参数n-q-φ的提取。扫描PD信号,统计信号中的放电峰值和相应的放电相位。(2)谱图构造和统计特征计算。划分相窗,统计平均放电量和放电次数的分布,计算平均放电量相位分布谱图qave-φ和放电次数相位分布谱图n-φ。基于qave-φ和n-φ,以φi为随机变量,计算谱图的偏斜度Sk、陡峭度Ku等统计特征,形成放电特征向量。(3)放电类型识别。本文将介绍,使用MapReduce实现第一个子过程的方法。

MaxCompute(原ODPS) 是阿里云提供的海量数据处理平台。主要服务于批量结构化数据的存储和计算,数据规模达EB级别。MaxCompute目前已在大型互联网企业的数据仓库和BI分析、网站的日志分析、电子商务网站的交易分析等领域得到大规模应用。

另外,本文还将使用odpscmd作为客户端完成对MaxCompute的各种操作。odpscmd是一个Java程序,可以以命令方式访问MaxCompute。应用该客户端,可以完成包括数据查询、数据上传、下载等各种任务。需要JRE环境才能运行,请下载并安装JRE 1.6+版本。

本文将使用MapReduce编程来完成特征分析的计算任务。MapReduce最早是由Google提出的分布式数据处理模型,随后受到了业内的广泛关注,并被大量应用到各种商业场景中。比如搜索、Web访问日志分析、文本统计分析、海量数据挖掘、机器学习、自然语言处理、广告推荐等。

2 分析过程
2.1 创建项目、建表和数据上传
(1)创建MaxCompute项目
打开阿里云官网:https://www.aliyun.com/

图片描述

使用已有阿里云账号登录。
图片描述

进入阿里云管理控制台,并从左侧导航栏选择“大数据(数加)à大数据计算服务”,进入MaxCompute管理控制台。

图片描述

点击下方的“创建项目”,创建一个新的MaxCompute项目。

图片描述
选择“I/O后付费”,填入项目名称和项目描述,并“确定”。

图片描述

创建完成后,可以在项目列表中看到刚刚创建的项目。

(2)安装配置odpscmd
在本地准备好JRE环境,请下载并安装JRE 1.6+版本。

从阿里云官网下载odpscmd工具:http://repo.aliyun.com/download/odpscmd/latest/odpscmd_public.zip?spm=5176.doc27804.2.3.o2o8Rw&file=odpscmd_public.zip

解压缩,并配置/conf/odps_config.ini

project_name=[project_name]
access_id=******************
access_key=*********************
end_point=http://service.odps.aliyun.com/api
tunnel_endpoint=http://dt.odps.aliyun.com
log_view_host=http://logview.odps.aliyun.comhttps_check=true

access_id和access_key请从阿里云管理控制台获取。project_name配置为创建好的MaxCompute项目即可。
图片描述

配置完成后,运行/bin/odpscmd,进入交互模式。会出现项目名称作为提示符。

图片描述

(3)建表并添加分区
1)Â Â 创建ODS_PD表,用于存放原始的变压器局部放电监测数据。

在odpscmd中,执行下面的SQL语句,建表。

create table if not exists ODS_PD(Time    string,Phase     bigint,Value    bigint)
partitioned by (DeviceID string, Date string);

当出现“ok”,表示建表成功,可以使用“ls tables;”命令查看已经创建的表。

图片描述

图片描述
为ODS_PD表添加分区。

alter table ODS_PD add if not exists partition (DeviceID=001, Date=20171116);

可以使用“show partitions ODS_PD;”验证添加的分区是否成功。

图片描述
2) 创建目标特征表DW_NQF

在odpscmd中,执行下面的SQL语句,建表。

create table if not exists DW_NQF(Time    string,Phase     bigint,MaxV    bigint)
partitioned by (DeviceID string, Date string);

图片描述
为DW_NQF表添加分区。

alter table DW_NQF add if not exists partition (DeviceID=001, Date=20171116);

(4)使用Tunnel进行数据上传
在odpscmd中运行tunnel命令,将本地数据文件monitor_data.csv上传至ODS_PD表。下面的命令中的路径,请在执行时根据实际路径进行修改。monitor_data.csv请从附件中下载。

tunnel upload d:/Clouder/jfdata/monitor_data.csv ODS_PD/deviceid=001,date=20171116;

2.2 MapReduce程序开发、本地调试和运行
(1)本地开发环境准备
本文使用Eclipse作为开发环境,请提前下载并安装。

官网导航中找到并下载 ODPS for eclipse 插件,并将插件解压并复制到Eclipse安装目录下的plugins子目录下。启动Eclipse,检查Wizard选项里面是否有ODPS的目录。

图片描述

图片描述

图片描述
ODPS for eclipse 插件下载地址:

https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/cn/odps/0.0.90/assets/download/odps-eclipse-plugin-bundle-0.16.0.zip?spm=5176.doc27981.2.3.cCapmQ&file=odps-eclipse-plugin-bundle-0.16.0.zip

当可以创建ODPS类型的项目时,表示本地开发环境已经准备好了。

(2)MapReduce程序开发
在Eclipse中创建ODPS项目,命名为NQF。为了让Eclipse能正确访问MaxCompute,需要在创建项目的时候正确配置odpscmd的本地路径。

依次添加Mapper类、Reducer类、MapReduce Driver类和R类。

图片描述
FSMapper.java代码如下:

import java.io.IOException;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.mapred.MapperBase;public class FSMapper extends MapperBase {private Record word;private Record one;private int max=8;//阈值@Overridepublic void setup(TaskContext context) throws IOException {word=context.createMapOutputKeyRecord();one=context.createMapOutputValueRecord();}@Overridepublic void map(long recordNum, Record record, TaskContext context)throws IOException {long phase=record.getBigint("phase");//第1列,相位long val=record.getBigint("value");//第2列,幅值                        if(Math.abs(val)>max){word.set(new Object[] {record.get("time"),record.get("phase")});//record id as key;                            one.set(new Object[] {phase,val});                            context.write(word,one);}                                   }@Overridepublic void cleanup(TaskContext context) throws IOException {}}}

FSReducer.java代码如下:

import java.io.IOException;
import java.util.Iterator;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.mapred.ReducerBase;
import com.aliyun.odps.mapred.Reducer.TaskContext;public class FSReducer extends ReducerBase {private Record result=null;private R left;private R middle;private R right;@Overridepublic void setup(TaskContext context) throws IOException {result=context.createOutputRecord();;}@Overridepublic void reduce(Record key, Iterator<Record> values, TaskContext context)throws IOException {left=new R();middle=new R(); right=new R();Record temp;if (values.hasNext()){temp=values.next();left.phase=temp.getBigint("phase");left.val=temp.getBigint("value");}                          else left=null;if(values.hasNext()){temp=values.next();middle.phase=temp.getBigint("phase");middle.val=temp.getBigint("value");}else middle=null;if(values.hasNext()){temp=values.next();right.phase=temp.getBigint("phase");right.val=temp.getBigint("value");}                          else right=null;if(left!=null&&middle!=null&&right!=null){if(Math.abs(middle.val)>Math.abs(right.val)&&Math.abs(middle.val)>Math.abs(left.val)){result.set("time",key.get("time").toString());result.set("phase",middle.phase);result.set("maxv",middle.val);context.write(result);                                 }}while(values.hasNext()){left.val=middle.val;left.phase=middle.phase;middle.val=right.val;middle.phase=right.phase;temp=values.next();right.phase=temp.getBigint("phase");right.val=temp.getBigint("value");if(left!=null&&middle!=null&&right!=null){if(Math.abs(middle.val)>Math.abs(right.val)&&Math.abs(middle.val)>Math.abs(left.val)){result.set("time",key.get("time").toString());result.set("phase",middle.phase);result.set("maxv",middle.val);context.write(result);                        }}}}@Overridepublic void cleanup(TaskContext context) throws IOException {}}

TJDriver.java代码如下:

import com.aliyun.odps.OdpsException;
import com.aliyun.odps.data.TableInfo;
import com.aliyun.odps.mapred.JobClient;
import com.aliyun.odps.mapred.RunningJob;
import com.aliyun.odps.mapred.conf.JobConf;
import com.aliyun.odps.mapred.utils.InputUtils;
import com.aliyun.odps.mapred.utils.OutputUtils;
import com.aliyun.odps.mapred.utils.SchemaUtils;
import java.util.*;public class FSDriver {public static void main(String[] args) throws OdpsException {if (args.length != 2) {System.err.println("Usage: WordCount <in_table> <out_table>");System.exit(2);}JobConf job = new JobConf();job.setMapperClass(FSMapper.class);                                                           job.setReducerClass(FSReducer.class);//二次排序job.setMapOutputKeySchema(SchemaUtils.fromString("time:string,phase:bigint")); job.setMapOutputValueSchema(SchemaUtils.fromString("phase:bigint,value:bigint"));job.setPartitionColumns(new String[] { "time" });job.setOutputGroupingColumns(new String[] { "time" });job.setOutputKeySortColumns(new String[] { "time","phase" });//分区输入             InputUtils.addTable(TableInfo.builder().tableName(args[0]).partSpec("deviceid=001/date=20171116").build(), job);//分区输出
OutputUtils.addTable(TableInfo.builder().tableName(args[1]).partSpec("deviceid=001/date=20171116").build(), job);try {JobClient.runJob(job);} catch (OdpsException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

R.java的代码如下:

public class R {public long phase;public long val;public R(){phase=0;val=0;}}

(3)本地测试
打开FSDriver.java,右击“Run as-àRun Configurations”

图片描述

在ODPS Config选项卡,选择正确的ODPS项目。

图片描述
在Arguments选项卡中,输入运行参数:ods_pd dw_nqf,并点击“Run”,执行本地测试运行。

图片描述
在第一次运行时,Eclipse会从MaxCompute中下载少量的测试数据用于测试。运行完成后,可以在Warehouse中看到测试用的输入数据和产生的结果数据。

图片描述

(4)打包并上传资源
在本地测试结果正确之后,就可以导出jar包了。在Eclipse下执行“FileàExport”,选择导出“JAR File”,导出至本地。

图片描述
图片描述
在odpscmd下,执行添加资源的命令,将jar上传至MaxCompute。

add jar d:/jar/NQF.jar;

图片描述
(5)MaxCompute上执行程序
在odpscmd下,执行jar命令,运行程序。(请自行调整文件路径)

jar -resources NQF.jar -classpath d:\jar\NQF.jar FSDriver ods_pd dw_nqf;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小企业的第一台服务器如何选?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Henry是一家叫做NewStar的初创小企业的兼职IT管理员一天晚间&#xff0c;下班后的Henry正在忙着“吃鸡”突然&#xff0c;一阵急促的电话铃声响了起来原来是在外地出差的同事需要一份重要的文件&#xff0c;但却无法远程访问服务器H…

Linux 中文无法显示或显示方块

文章目录问题现象&#xff1a;字体需求一、查看字体列表1. 安装字体库2. 字体库中添加中文字体3. 进入字体目录复制需求字体4. 创建中文字体目录5. 上传需求字体6. 修改chinese目录的权限7. 安装ttmkfdir8. 修改字体配置文件9. 刷新内存中的字体缓存问题现象&#xff1a; Linu…

阿里云发布混合云数据存储和灾备方案

摘要&#xff1a; 12月7日&#xff0c;2017苏州云栖大会上&#xff0c;阿里云发布全新的混合云数据存储和灾备方案&#xff0c;此次发布的内容包括最新推出的混合云容灾服务HDR和混合云备份服务HBR&#xff0c;以及全面升级的混合云存储阵列CSA2000和CSA3000。 12月7日&#xf…

打通钉钉+WebHook:日志服务告警升级

摘要&#xff1a; 用一个最最常用的案例&#xff08;Nginx日志分析&#xff09;来说明当前使用场景&#xff0c;告警要解决的3个问题&#xff1a;是否有错误&#xff1b;是否有性能问题&#xff1b;是否有流量急跌或暴涨 阿里云日志服务是针对实时数据一站式服务&#xff0c;用…

AliOS Things v1.1.1新特性

摘要&#xff1a; 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;10/20在github上开源v1.1.0版本。经过AliOS Things团队及合作伙伴1个多月的努力&#xff0c;很高兴有些更新可以和大家分享。AliOS Things v1.1.1包含了ESP32支持&#xff0c;AT框架&#xff…

Spark精华问答 | spark性能优化方法

Hadoop再火&#xff0c;火得过Spark吗&#xff1f;今天我们继续关于Spark的精华问答吧。1Q&#xff1a;影响性能的主要因素是什么&#xff1f;A&#xff1a;网络传输开销大硬件资源利用率低同一资源的复用率低2Q&#xff1a;优化的方向有哪些&#xff1f;A&#xff1a;设置数据…

阿里云Elasticsearch的X-Pack:机器学习、安全保障和可视化

摘要&#xff1a; ELK是日志分析领域较为流行的技术选择&#xff0c;不少阿里云用户选择在ECS上搭建开源Elasticsearch。与自建开源Elastisearch相比&#xff0c;阿里云Elasticsearch做了性能优化&#xff0c;支持弹性扩容&#xff0c;并搭载了商业版组件X-Pack&#xff0c;为用…

2017北京云栖大会:云效企业级协同研发专场议题揭秘!

摘要&#xff1a; 阿里巴巴原汁原味的研发协同平台是如何支撑双十一1682亿背后的研发协同&#xff1f;大中型企业如何完成公有云/专有云/混合云转型升级&#xff0c;实现高效协同研发&#xff1f; 阿里巴巴原汁原味的研发协同平台是如何支撑双十一1682亿背后的研发协同&#xf…

毋庸置疑,容器带来改变!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘晶晶对于飞贷金融科技副总裁陈定玮而言&#xff0c;金融行业数据具有相较于其他行业更为严格的的高标准安全性要求&#xff0c;对容错的要求更为尤甚&#xff1b;此外是否能高效支撑飞贷金融科技的核心业务&#xff0c;尤其…

阿里云发布首款全球智能互联的网络产品——云骨干网

摘要&#xff1a; 12月13日&#xff0c;阿里发布全球首款智能互联的网络产品–云骨干网&#xff08;Cloud Backbone Network&#xff09;。这款产品能够分钟级构建多地域全球网络&#xff0c;并和混合云连成一体&#xff0c;打造具有企业级规模和通信力的智能云上骨干网络。12月…

MaxCompute复杂数据分布的查询优化实践

摘要&#xff1a; 2017年中国大数据技术大会于12月7-9日在北京新云南皇冠假日酒店隆重举行, 大会就大数据时代社会各行业的智能化进程和行业实践展开深入讨论。 在12月8日的“大数据分析与生态系统”分论坛上&#xff0c;来自阿里巴巴计算平台事业部的高级技术专家少杰&#xf…

Linux 主机信息 总览

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

这项技术,风头正劲,BAT要力捧!程序员:我彻底慌了...

人工智能离我们还遥远吗&#xff1f;近日&#xff0c;海底捞斥资1.5亿打造了中国首家火锅无人餐厅&#xff1b;阿里酝酿了两年之久的全球首家无人酒店也正式开始运营&#xff0c;百度无人车彻底量产。李彦宏称&#xff0c;这是中国第一款能够量产的无人驾驶乘用车。而阿里的这家…

joi模块验证日期格式_python datetime模块详解

一、datetime模块介绍通过print(dir(datetime))&#xff0c;我们可以看到模块内属性和类&#xff1a;[MAXYEAR, MINYEAR, __builtins__, __cached__, __doc__, __file__, __loader__, __name__, __package__, __spec__, date, datetime, datetime_CAPI, sys, time, timedelta, …

AliOS Things 基于组件化思想的多bin特性

摘要&#xff1a; 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;其中有一个基于组件化思想的多bin特性&#xff0c;这是AliOS Things有专利保护的多bin fota升级解决方案的核心 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;其中有一个基…

数据库风云:老骥伏枥,新秀辈出

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;姜洪军“在数据库技术方面&#xff0c;亚马逊落后甲骨文10至20年”。2018年10月23日&#xff0c;甲骨文&#xff08;Oracle&#xff09;创始人、执行董事长拉里埃里森&#xff0c;在甲骨文举办的一次大会的主题演讲…

解读阿里云oss-android/ios-sdk 断点续传(多线程)

摘要&#xff1a; oss sdk 断点续传功能使用及其相关原理 前言 移动端现状 随着移动端设备的硬件水平的不断提高&#xff0c;如今的cpu&#xff0c;内存等方面都大大的超过了一般的pc电脑&#xff0c;因此在现今的程序中&#xff0c;合理的使用多线程去完成一些事情是非常有必…

云钻还在吗 苏宁怎么解除实名认证_快手7天怎么养号,5步简易养号方案送上

今天我们聊一聊&#xff0c;新注册的快手号&#xff0c;7天怎么养号&#xff1f;为什么要养号&#xff1f;什么情况下需要养号&#xff1f;一般来说&#xff0c;新账号、播放量不高、很少热门、违规等情况&#xff0c;都需要养号。养号有什么作用&#xff1f;养号的作用很多&am…

将html表格导出到excel表格,table2excel-将HTML表格内容导出到Excel中_html/css_WEB-ITnose...

简要教程jquery-table2excel是一款可以将HTML表格的内容导出到微软Excel电子表格中的jQuery插件。该插件可以根据你的需要导出表格中的内容&#xff0c;不需要的行可以不导出。它文件体积小&#xff0c;使用非常方便。注意导出的Excel文件的格式&#xff0c;默认导出为.xlsx格式…

RDS读写分离,海量数据一键搞定

简介 RDS为用户提供高透明&#xff0c;高可用&#xff0c;高性能&#xff0c;高灵活的读写分离服务。在最近的版本我们基于短连接的用户进行了优化&#xff0c;使得短连接的用户负载均衡更加完善合理。RDS读写分离有如下特性&#xff1a; 易用/透明性 用户只需要在原来的只读…