Есть ли способ проверить внешние таблицы куста, созданные за 90 дней до этого, и удалить эти таблицы вместе с базовыми данными hdfs. Можно ли этого добиться в unix-скрипте?
Мне также нужно бросить таблицу, как это можно сделать
Что ж, добавьте код для выполнения HiveQL drop table
.
Можете ли вы помочь, как я могу это сделать
OK. Я приведу несколько примеров.
Посмотрите, если путь к таблицам куста /path/your_hive_table_path/
, как показано ниже:
hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/
drwxrwxrwx+ - h_mifi supergroup 0 2019-01-24 10:33 /path/your_hive_table_path//mifidw_car_insurance_expire_month_data
drwxrwxrwx+ - h_mifi supergroup 0 2019-01-24 10:39 /path/your_hive_table_path//mifidw_car_owner
drwxr-xr-x+ - h_mifi supergroup 0 2019-05-30 03:01 /path/your_hive_table_path//push_credit_card_mine_result_new
drwxr-xr-x+ - h_mifi supergroup 0 2019-05-30 03:41 /path/your_hive_table_path//push_live_payment_bill_mine_result_new
Мы можем получить дату последнего обновления файла таблицы, как показано ниже:
hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/ | awk -F'[ ]+' '{print $6}'
2019-01-24
2019-01-24
2019-05-30
2019-05-30
Нам нужен loop
, чтобы проверить каждую таблицу на наличие более 90 дней и выполнить операции remove
и drop
. Полный сценарий оболочки приведен ниже, я протестировал его, он работает хорошо, надеюсь, он поможет вам.
hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/ | grep '/path/your_hive_table_path/' | while read line
do
#Get the update date of hive table
date_str=`echo $line | awk -F'[ ]+' '{print $6}'`
#get the path of hive table
table_path=`echo $line | awk -F'[ ]+' '{print $8}'`
#Get the table name of hive table
table_name=`echo $table_path | awk -F'/' '{print $7}' `
today_date_stamp=`date +%s`
table_date_stamp=`date -d $date_str +%s`
stamp_diff=`expr $today_date_stamp - $table_date_stamp`
#Get the diff days from now
days_diff=`expr $stamp_diff / 86400`
#if diff days is greater than 90, rm and drop.
if [ $days_diff -gt 90 ];then
#remove the hdfs file
hadoop --cluster your-hadoop-cluster fs -rm $table_path
#drop the hive table
hive -e"drop table $table_name"
fi
done
Я думаю, что лучший способ - изменить файл свойств на внутренний и удалить таблицу. Будет ли это хорошей идеей
Да, это тоже способ реализовать это, но если вы не хотите ничего менять в своей таблице, вы можете просто выполнить приведенный выше скрипт. И вы можете установить планировщик crontab
для скрипта, чтобы проверять и удалять просроченные таблицы каждый день.
Только будьте осторожны, мы поддерживаем наше хранилище данных улья с помощью shell script
в нашей повседневной работе, и это удобно.
Если вам удобно, дайте мне vote up
пожалуйста, так как я потратил более получаса на редактирование этого ответа утром этого рабочего дня. Большое спасибо! :) .
Конечно, мы можем реализовать это с помощью сценария оболочки, вы можете выполнить
hadoop fs -ls /path/your_hive_table_path/
, чтобы получить время записи данных, а затем выполнитьhadoop fs -rm
, чтобы удалить данные, созданные за 90 дней.