1. 程式人生 > >SPARK APP壓測--清理檢查相關SHELL(1)

SPARK APP壓測--清理檢查相關SHELL(1)

壓力測試前需要對大資料環境、日誌和儲存資料庫進行清理、檢查環境是否可用、儲存測試前的環境狀態。

壓力測試過程中需要定期檢查PARQUET檔案生成情況、報表生成情況、HBASE資料生成情況、是否有SPARK APP FAILED、收集錯誤日誌等。

壓力測試後需要檢查PARQUET檔案生成情況、報表生成情況、HBASE資料生成情況、是否有SPARK APP FAILED、收集錯誤日誌、檢視APP執行時間間隔、各主機CPU記憶體網路磁碟狀況等。

基礎指令碼,eea_2_all.sh,分發命令到HDP叢集各節點主機執行,內容如下,注意基礎指令碼運行於HDP第一臺主機(與其他主機做免密處理)

#!/bin/bash
#陣列中用主機名亦可
HOSTS=(192.168.1.4 192.168.1.5 192.168.1.6 192.168.1.8 192.168.1.9 192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13)
COMMAND=$1
PROMPT=$2
if [ $# == 0 ] ; then
    COMMAND="/bin/rm -rf /var/log/rmslog/*;/bin/echo '' >  /var/log/rmslog/debug.log;/bin/chmod 666 /var/log/rmslog/debug.log"
PROMPT="Clear debug log"
fi

count=1
for host in ${HOSTS[@]}
do
    echo "-----------------------eea-younge-${count}.test--$host: ${PROMPT}----------------------"
    ssh $host ${COMMAND}
    let count++
done


1.測試前的準備工作包括,

a.確保Hmaster上面的Hbase Thrift Server處於執行狀態,命令如下。

. ssh 192.168.1.6 "if test $(ps -ef | grep 'hbase.thrift.ThriftServer start' | wc -l

) -eq 2 then ; echo 'Hbase Thrift Server is running.'  else nohup hbase thrift start & fi"

b.對大資料環境、本地日誌和儲存資料庫進行清理,檢查YARN中應用情況。

#清理Hbase表

#其中cmd.hbase存放的是按行儲存的hbase shell命令,最後一行需為exit,用於退出hbase shell。

nohup hbase shell hbase/cmds.hbase > result/clear_hbase_${now}.log

#清理Hdfs Parquet檔案,shell/clear_parquets.sh

#!/bin/bashDeleteHDFSFolder(){ sudo -u spark hadoop fs -rm -r -f $1 if [ $? -ne 0 ] ; then LogMessage "Can not create Delete files and folders $1." fi}CreateHDFSFolder(){ sudo -u spark hadoop fs -mkdir -p $1 if [ $? -ne 0 ] ; then LogMessage "Can not create HDFS folders $1." fi}DeleteHDFSFolder "/user/spark/eea/alarm/*"DeleteHDFSFolder "/user/spark/eea/fine/*"DeleteHDFSFolder "/user/spark/eea/trip/*"DeleteHDFSFolder "/user/spark/eea/event/*"DeleteHDFSFolder "/user/spark/eea/collector/*"DeleteHDFSFolder "/user/spark/eea/rawdata/*"sudo -u hdfs hdfs dfs -expungeCreateHDFSFolder "/user/spark/eea/alarm/enrichment/"CreateHDFSFolder "/user/spark/eea/fine/enrichment/"CreateHDFSFolder "/user/spark/eea/trip/enrichment/"

#清理各主機的本地日誌

. ${shell_path}/eea_2_all.sh

#清理Redis資料庫,其中cmds.redis中存放的為按行儲存命令,本篇中僅一條命令flushall

nohup /bin/cat redis/cmds.redis | redis-cli -h 192.168.1.5 -a runoob > result/clear_redis_${now}.log

#清理PostgreSQL工作日誌表

export PGPASSWORD=pass123456nohup psql -h 192.168.1.155 -p 5432 -U test -d test -f sql/query_truncate_app_orchestration.sql > result/test_clear_work_log_${now}.log

#query_truncate_work_log.sql 內容如下,

select * from app_orchestration;truncate app_orchestration;

#檢查磁碟掛載情況

nohup shell/eea_2_all.sh "mount | grep \"data/eea\"" "Mount Directory /data/eea Check" > result/mount_check_${now}.txt

#檢查各主機磁碟空間情況

nohup shell/eea_2_all.sh "df -hT" "Disk Usage" 2>&1 > result/"vms_disk_usage_${now}.txt"

#檢查資料庫空間情況

psql -h 192.168.1.155 -p 5432 -U test -d test -f sql/check_databases_size.sql > result/rms_eea_databases_size_${now}.txt

#check_databases_size.sql 內容如下,

SELECT d.datname ASName,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,   CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')  THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))          ELSE 'No Access'   ENDASSIZE FROM pg_catalog.pg_database d  WHERE d.datname in ('test') ORDERBY CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')  THEN pg_catalog.pg_database_size(d.datname)  ELSE NULL  ENDDESC -- nulls first     LIMIT 20 ; 

#檢查資料庫表空間情況

psql -h 192.168.1.155 -p 5432 -U test -d test -f sql/check_tables_size.sql > result/rms_eea_tables_size_${now}.txt

#check_tables_size.sql內容如下,

SELECT table_schema || '.' || table_name AS table_full_name,      pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) ASsizeFROM information_schema.tables  WHERE table_schema='public'ORDERBY    pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC;

#檢查YARN中失敗的應用列表

nohup yarn application -list -appStates FAILED > result/yarn_app_failed_list.log

#檢查YARN中KILLED的應用列表

nohup yarn application -list -appStates KILLED > result/yarn_app_killed_list.log

壓測過程中檢查見後續文章。。。