元數據常用排查方法
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進程)
元數據常用排查方法