1.Spark的讲解:
1)基础知识
2)看日志文件学习:
如果任务还在执行中,就只能通过select taskinfo from task_board where day=‘2017-07-04‘ and taskName like ‘%t054%‘ limit 100;
获取提交节点.到提交节点的/home/mr/testly/submitSparkAppFile/$taskname$中去找日志文件了。
2.元数据平台的讲解: 哪些是比较重要的
1)介绍ADMA平台:
ICT平台(JBoss服务器) --> DAP --> ADMA,RDK,WebGis
2)isopened = "true" or "false"
3)数据牌和任务牌的解释:
4)常用rest接口说明
5)Web建模服务的启动
3.挑出几个案例进行讲解,帮助大家了解平台。
1) 76.补采任务.根据输出表如何找算法的方法:
正常(normal):就是每天的凌晨1秒生成的任务公告牌按照调度器,执行器等流程正常执行下来的结果;
补采与(rerun)指定日期运行(specifieddate)的区别:
如果一个任务执行失败,发现是算法写得不对,然后再次修订算法,通过热补丁方式加载算法之后,
1)使用补采方式去执行,结果:还执行失败,因为补采是使用历史任务信息和历史数据再运行一次,此前执行失败是因为算法失败,当然历史的算法再执行也会出错;
2)采用rest api的指定日期运行,结果:执行成功,这是因为采用采用最新算法的元数据实例化一个新任务,再去执行,当然成功。
补采(rerun):
从数据库task_board表中获取历史的任务和历史的数据再执行一次: 注意是历史任务信息和历史的数据,不是当天的数据。
2) 50.流任务数据入库的数据到达检查提前一小时问题
3) 56.Spark2Hbase升级
4) 59.lte_poor_network_element_task算法输入表一直未翻牌
5) 69.算法中输入表的分区变量没有替换
4.收集大家对平台的需求
------------------------------
1. 常用rest接口
------------------------------
1.1 热补丁
使用场景:如果重新修改了算法文件,汇总表以及算法xml,vmax-conf下的配置文件,想让其重新生效时使用
curl http://133.37.128.227:8889/metadataTest/patches?path=/home/netnumen/ems/ums-server/utils/vmax-metadata-manager/metadata/lte/nds_subject_hw/lte_netmax_nccovergridbyearfcnstat_hw_t800
1.2 指定单个任务运行
使用场景1: 使用热补丁后,如果想让修改的任务立即执行起来可以使用此url,其中需要注意的是url中的day指的是此任务依赖数据的时间不是任务执行时间
curl http://133.37.23.235:8889/metadataTest/onetask?algorithmName=lte_subject_nccovergridbyearfcnstat_hw_t800\&day=2017-04-22\&setInputLights=true
使用场景2: 指定某个时刻(小时)某个任务的运行,或者指定成功运行过的任务可以不再运行;
自动翻2016-05-05 1,2,3,4时刻的数据牌(根据置信度等策略判断数据是否到达),同时触发指定某个任务去执行:
http://10.9.146.231:8889/specialDate/setonetask?algorithmName=ict_function_griduser2g_hour&day=2016-05-05&setInputLights=false&hour=1,2,3,4&rerunSuccessTask=true
curl http://10.9.146.231:8889/specialDate/setonetask?algorithmName=ict_function_griduser2g_hour\&day=2016-05-05\&setInputLights=false\&hour=1,2,3,4\&rerunSuccessTask=true
rerunSuccessTask:这个是指是否过滤掉执行成功的任务;
false是过滤掉前面执行成功的;
true是不过滤;
如果你需要让整个任务重新跑请指定为true
1.3重新加载vmax-conf下的配置
使用场景:修改了vmax-conf下的配置文件,需要让内存与修改的配置文件同步
curl http://133.37.23.235:8889/metadataManage/configParams -X PUT -i -H "Content-Type:application/json" -d ‘[""]‘
1.4 查看任务的内存信息
使用场景:想查看内存的任务信息,比如依赖的输入,输出表信息
curl http://133.37.23.235:8889/metadataManage/taskmentaldetail?taskName=dm_mob_inter_app_video_ci_4g_stat_d
1.5 查看汇总表与表的内存信息
使用场景:想查看内存的汇总表与表信息,一般用于在任务实例化异常的时候,用于查看任务的内存信息是否正确
curl http://133.37.23.235:8889/metadataManage/tablementaldetail?tableName=cdma_netmaxc_nbi_exception_cdt_do_qoe_dropcall\&tableType=spark
curl http://133.37.23.235:8889/metadataManage/tablementaldetail?tableName=order_transaction\&tableType=gbase
1.6 指定虚拟任务运行
使用场景:修改整个虚拟任务的xml配置以后,已通过热补丁让xml生效后,让整个虚拟任务重新执行,其中day也是指任务依赖的数据时间, rerunSuccessTask这个是指是否过滤掉执行成功的任务,false是过滤掉前面执行成功的,true是不过滤,如果你需要让整个虚拟任务重新跑请指定为true;
rerunSuccessTask 这个值是表示下发虚拟任务时,如果其已经执行成功的子任务是否继续下发;
false 表示 已经成功的任务不需要下发(执行)了;
true 表示 整个虚拟任务不论前面成功与否都下发(执行);
curl http://133.37.23.235:8889/specialDate/setvirtualtask?virtualTaskName=lte_nccovergridbyearfcnstat_t800all\&day=2017-04-18\&setInputLights=false\&rerunSuccessTask=false\&hour=
1.8 点灯命令(天表)
curl -i -H "Content-type: application/json" -X POST -d ‘{"keys":"2017-04-16@dm_cover_grid_yd_lt_d@p_provincecode*510000,p_date*2017-04-16@spark","state":1}‘ http://133.37.31.151:8080/vmaxmetadata/metadatamanage/databoard/modifylightbykey
1.9 点灯命令(小时表)
curl -i -H "Content-type: application/json" -X POST -d ‘{"keys":"2017-04-20@lte_subject_netkpi_hour@p_provincecode*510000,p_date*2017-04-20,p_hour*03@spark","state":1}‘ http://133.37.31.151:8080/vmaxmetadata/metadatamanage/databoard/modifylightbykey
----------------------------
2.数据牌的解释
----------------------------
mysql> show create table data_board;
| data_board | CREATE TABLE `data_board` (
`day` date NOT NULL,
`tableName` varchar(80) NOT NULL,
`partition` varchar(250) DEFAULT NULL,
`id` bigint(20) NOT NULL,
`state` int(11) DEFAULT NULL,
`size` bigint(20) DEFAULT NULL,
`expectedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`realTime` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘,
`generateTime` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘,
`tabletype` varchar(30) DEFAULT NULL,
`res1` varchar(80) DEFAULT NULL,
`res2` varchar(80) DEFAULT NULL,
`res3` varchar(80) DEFAULT NULL,
`confidence` int(11) DEFAULT NULL,
`setLightTime` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘,
KEY `dataindex_key` (`day`,`tableName`,`partition`,`tabletype`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> select day,tableName,partition,generateTime,expectedTime,realTime,state from data_board where day=‘2017-07-08‘ and tableName=‘textfile_t054‘ limit 100;
+------------+---------------+---------------------------------------------------+---------------------+---------------------+---------------------+-------+
| day | tableName | partition | generateTime | expectedTime | realTime | state |
+------------+---------------+---------------------------------------------------+---------------------+---------------------+---------------------+-------+
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=0 | 2017-07-08 00:05:45 | 2017-07-08 02:08:13 | 2017-07-08 01:34:10 | 1 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=1 | 2017-07-08 00:05:45 | 2017-07-08 03:08:15 | 2017-07-08 02:33:56 | 1 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=10 | 2017-07-08 00:05:45 | 2017-07-08 14:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=11 | 2017-07-08 00:05:45 | 2017-07-08 15:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=12 | 2017-07-08 00:05:45 | 2017-07-08 16:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=13 | 2017-07-08 00:05:45 | 2017-07-08 17:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=14 | 2017-07-08 00:05:45 | 2017-07-08 18:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=15 | 2017-07-08 00:05:45 | 2017-07-08 19:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=16 | 2017-07-08 00:05:45 | 2017-07-08 20:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=17 | 2017-07-08 00:05:45 | 2017-07-08 21:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=18 | 2017-07-08 00:05:45 | 2017-07-08 22:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=19 | 2017-07-08 00:05:45 | 2017-07-08 23:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=2 | 2017-07-08 00:05:45 | 2017-07-08 04:08:16 | 2017-07-08 03:34:03 | 1 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=20 | 2017-07-08 00:05:45 | 2017-07-09 00:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=21 | 2017-07-08 00:05:45 | 2017-07-09 01:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=22 | 2017-07-08 00:05:45 | 2017-07-09 02:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=23 | 2017-07-08 00:05:45 | 2017-07-09 03:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=3 | 2017-07-08 00:05:45 | 2017-07-08 09:23:26 | 2017-07-08 08:50:10 | 1 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=4 | 2017-07-08 00:05:45 | 2017-07-08 09:43:27 | 2017-07-08 09:11:48 | 1 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=5 | 2017-07-08 00:05:45 | 2017-07-08 10:03:27 | 2017-07-08 09:33:13 | 1 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=6 | 2017-07-08 00:05:45 | 2017-07-08 10:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=7 | 2017-07-08 00:05:45 | 2017-07-08 11:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=8 | 2017-07-08 00:05:45 | 2017-07-08 12:05:45 | 2017-07-08 00:05:45 | 0 |
| 2017-07-08 | textfile_t054 | p_provincecode=510000,p_date=2017-07-08,p_hour=9 | 2017-07-08 00:05:45 | 2017-07-08 13:05:45 | 2017-07-08 00:05:45 | 0 |
+------------+---------------+---------------------------------------------------+---------------------+---------------------+---------------------+-------+
state = 1 翻牌, 0 未翻牌
generateTime 数据牌生成的时间
realTime 数据到达检查通过,刚好进入延迟队列的时间 com.zte.bigdata.vmax.app.metadata.dataprocess.entity.DataArrivalDelay#addDelays
expectedTime (如果state=0,那么expectedTime = 小时分区数字 + hourExpectTimeDelay + generateTime) 或者 (如果state=1,那么expectedTime = 真正翻牌时刻)
setLightTime 目前任何版本都没有意义。
updateTime 数据到达检查通过的时间 + 延迟时间(30分钟)
用来保存数据翻牌记录的日志文件在:
/home/netnumen/ems/ums-server/utils/vmax-metadata-manager/dataArrivalCheck/arrivalData-2017-07-08.txt
[2017-07-08 02:08:13] : {"key":"2017-07-08#textfile_t054#p_provincecode=510000,p_date=2017-07-08,p_hour=0#spark","day":"2017-07-08","tableName":"textfile_t054","tab
leType":"spark","partitions":[{"p_provincecode":"510000"},{"p_date":"2017-07-08"},{"p_hour":"0"}],"tmpPath":"p_provincecode=510000","source":"nds","location":"/zxvm
ax/telecom/lte/nds_l_textfile/textfile_t054/","isDynamic":"false","timeIndex":0,"timeFormat":"yyyy-MM-dd HH:mm:ss","isRealTimeFlow":false,"delayTime":30,"dataSrcTyp
e":"streaming_partition","realTime":"2017-07-08T01:34:10.805Z","updateTime":"2017-07-08T02:04:10.805Z"}
[2017-07-08 03:08:15] : {"key":"2017-07-08#textfile_t054#p_provincecode=510000,p_date=2017-07-08,p_hour=1#spark","day":"2017-07-08","tableName":"textfile_t054","tableType":"spark","partitions":[{"p_provincecode":"510000"},{"p_date":"2017-07-08"},{"p_hour":"1"}],"tmpPath":"p_provincecode=510000","source":"nds","location":"/zxvmax/telecom/lte/nds_l_textfile/textfile_t054/","isDynamic":"false","timeIndex":0,"timeFormat":"yyyy-MM-dd HH:mm:ss","isRealTimeFlow":false,"delayTime":30,"dataSrcType":"streaming_partition","realTime":"2017-07-08T02:33:56.904Z","updateTime":"2017-07-08T03:03:56.904Z"}
----------------------------
3.任务牌的解释
----------------------------
mysql> show create table task_board;
| task_board | CREATE TABLE `task_board` (
`day` date NOT NULL,
`taskId` bigint(20) NOT NULL,
`provinceCode` varchar(20) DEFAULT NULL,
`standardType` varchar(20) NOT NULL,
`taskName` varchar(200) NOT NULL,
`virtualTaskName` varchar(200) NOT NULL,
`resultStatus` varchar(200) NOT NULL,
`scheduleTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`submitTime` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘,
`finishTime` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘,
`createTime` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘,
`resultInfo` varchar(200) DEFAULT NULL,
`taskInfo` mediumtext,
`priority` int(11) DEFAULT NULL,
`cpu` int(11) DEFAULT NULL,
`memory` int(11) DEFAULT NULL,
`description` varchar(200) DEFAULT NULL,
`taskTime` date DEFAULT NULL,
KEY `dataindex_key` (`day`,`taskId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
createTime 任务被创建的时刻 (2017-07-21 00:06:31)
scheduleTime 任务被调度的时刻 进入调度器的时刻 (2017-07-21 00:06:48)
submitTime 提交到spark的时刻 (2017-07-21 06:36:36 比调度时刻晚了6小时30分钟 )
finishTime 任务完成的时刻 (2017-07-21 06:37:21, 花费了0小时0分45秒的时间在spark上运算)
注意:
一般任务被实例化(createTime)后,很快(几秒左右)就进入调度器(scheduleTime)。然后在调度器里面,等待要被执行的时刻+经过数据到达检查+还要数据延时段,
最后才能进入执行器,在执行器里面等待优先级和spark资源空闲,才能提交到Spark(submitTime),最后到Spark执行完毕(finishTime)
mysql> select taskname,scheduleTime,submitTime,finishTime,createTime from task_board where day=‘2017-07-21‘ and taskid=10 limit 100;
+-----------------------------------------------+---------------------+---------------------+---------------------+---------------------+
| taskname | scheduleTime | submitTime | finishTime | createTime |
+-----------------------------------------------+---------------------+---------------------+---------------------+---------------------+
| lte_subject_weakcover_grid_top3cell_day_gbase | 2017-07-21 00:06:48 | 2017-07-21 06:36:36 | 2017-07-21 06:37:21 | 2017-07-21 00:06:31 |
+-----------------------------------------------+---------------------+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
----------------------------
4.Web建模服务启动
----------------------------
1)6379 是 redis的端口;
2)web建模使用了两个组件:tomcat + redis
主机重启后,这两个组件服务未设置为自启动,通过ps -ef | grep tomcat 或者 ps -ef | grep redis可以查看服务是否启动,导致WEB建模无法访问,
需要手动启动这两个服务,服务启动设置如下:
tomcat: /usr/local/metadata-modeling-V6.15.70.xxxx/tomcat/bin ./startup.sh (重启前先杀掉tomcat进程)
redis: /usr/local/metadata-modeling-V6.15.70.xxxx/redis/ redis-server redis.conf (重启前先杀掉redis进程)