如果您需要一種簡單但強大且安全的方式來建立、管理和監控計劃作業,您可以使用 Apache Hive 計劃查詢。您可以使用計劃查詢替換作業系統級別的排程程式,例如 cron、Apache Oozie 或 Apache Airflow。
使用 SQL 語句,您可以安排 Hive 查詢重複執行、監控查詢進度並可選擇禁用查詢計劃。您可以執行查詢以定期攝取資料、重新整理物化檢視、複製資料以及執行其他重複性任務。例如,您可以每 10 分鐘將流中的資料插入到事務表中,每小時重新整理一次用於 BI 報告的物化檢視,並每天將資料從一個叢集複製到另一個叢集。
Hive 計劃查詢由以下部分組成:
排程器中的唯一名稱
要執行的 SQL 語句
由 Quartz cron 表示式定義的執行計劃。
Quartz cron 表示式富有表現力且靈活。例如,表示式可以描述簡單的計劃,例如每 10 分鐘一次,但也可以描述在 2021 年 1 月和 2021 年 2 月的第一個星期日上午 10 點執行。您可以用易於理解的格式描述常見的計劃,例如例如每 20 分鐘或每天“3:25:00”。
操作
計劃查詢屬於名稱空間,它是負責執行查詢的 HiveServer (HS2) 例項的集合。計劃查詢儲存在 Hive 元儲存中。Metastore 儲存計劃查詢、正在進行和先前執行的語句的狀態以及其他資訊。HiveServer 會定期輪詢 Metastore 以檢索將要執行的預定查詢。如果您在單個部署中執行多個 HiveServer 例項,則元儲存保證在任何給定時間只有其中一個執行某個預定查詢。
您可以使用專用 SQL 語句建立、更改和刪除計劃查詢。
啟用計劃查詢
您需要知道如何啟用和禁用計劃查詢,並瞭解預設狀態如何防止您無意中執行查詢。
預設情況下,計劃查詢在 CDP 中以禁用模式建立。此預設設定有助於防止您無意中執行新的計劃查詢。您必須顯式啟用新的計劃查詢。排程查詢可以在錯誤的時間保持叢集處於喚醒狀態。要啟用特定計劃,例如 schedule1,請執行 ALTER SCHEDULED QUERY 語句:
要禁用此計劃:
啟用所有計劃查詢
您可以使用 SQL 命令啟用單個計劃查詢,但要啟用多個計劃查詢,您需要在 Cloudera Manager 中執行幾個步驟。
要在CDP Private Cloud Base 中啟用所有新建立的計劃,請執行以下步驟:
定期重建物化檢視
使用物化檢視可以提高查詢效能。當新資料新增到基礎表時,您需要重新整理物化檢視內容。您可以安排此任務,而不是手動重建實體化檢視。重建會定期發生,並且對使用者是透明的。
在此任務中,您將建立一個用於儲存員工資訊的架構。想象一下,您將許多員工的資料新增到表中。假設您的資料庫的許多使用者發出查詢以訪問有關去年僱用的員工的資料,包括他們所屬的部門。您建立表的物化檢視來處理這些查詢。想象一下,招聘了新員工,您將他們的記錄新增到表中。這些更改使物化檢視內容過時。您需要重新整理其內容。您建立計劃查詢來執行此任務。除非輸入表發生更改,否則不會發生計劃的重建。您可以透過繞過計劃並立即執行計劃來測試計劃查詢。最後,您更改計劃以減少重建頻率。
為員工資料建立資料庫Schema。
要處理許多查詢以訪問最近僱用的員工和部門資料,建立物化檢視。
透過查詢員工資料使用物化檢視。
假設發生了新招聘並且您向emps表中添加了新記錄 ,則重建物化檢視。
重建會重新整理物化檢視的內容。
建立計劃查詢以每 10 分鐘呼叫一次重建語句。
除非emps表沒有更改,否則每 10 分鐘執行一次重建 。如果物化檢視可以增量重建,則除非輸入表發生更改,否則不會發生計劃的重建。
要測試計劃,請立即執行計劃查詢。
改變重建的頻率。
獲取預定查詢資訊並監控查詢
建立計劃查詢後,您可以在 Hive 資訊架構表中訪問有關scheduled_queries 的資訊。您還可以使用資訊架構來監控計劃的查詢執行。
查詢資訊模式以獲取有關計劃的資訊。
將顯示有關計劃查詢的以下資訊:
schedule_query_id
計劃查詢的唯一數字識別符號。
Schema_name
計劃查詢的名稱。
Enabled
當前是否啟用了計劃查詢。
cluster_namespace
預定查詢所屬的名稱空間。
Schedule
排程描述為 Quartz cron 表示式。
User
計劃查詢的所有者。
Query
要執行的 SQL 查詢。
Next_execution
當此預定查詢的下一次執行到期時。
監視最近的計劃查詢執行。
您可以在 Hive 元儲存中配置此資訊的保留期。
schedule_execution_id
計劃查詢執行的唯一數字識別符號。
Schedule_name
與此執行關聯的計劃查詢的名稱。
executor_query_id
分配給 HiveServer (HS2) 執行的查詢 ID。
state
以下執行階段之一。
STARTED。預定查詢到期並且 HiveServer 例項已檢索其資訊。
EXECUTING。HiveServer 正在以可配置的時間間隔執行查詢和報告進度。
FAILED。由於錯誤或異常,查詢執行已停止。
FINISHED。查詢執行成功。
TIME_OUT。HiveServer 未提供超過可配置超時的查詢狀態更新。
Start_time
開始執行時間。
End_time
執行結束時間。
elapsed
開始時間和結束時間之間的差異。
Error_message
如果計劃查詢失敗,則它包含與其失敗相關的錯誤訊息。
Last_update_time
HiveServer 上次更新查詢狀態的時間。