搭配 EMR Serverless 使用 Hive 使用者定義函數 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

搭配 EMR Serverless 使用 Hive 使用者定義函數

Hive 使用者定義的函數 (UDFs) 可讓您建立自訂函數,以處理記錄或記錄群組。在本教學課程中,您將UDF搭配預先存在的 Amazon EMR Serverless 應用程式使用範例,來執行輸出查詢結果的任務。若要了解如何設定應用程式,請參閱 Amazon EMR Serverless 入門

將 UDF與 Serverless EMR 搭配使用
  1. 導覽至範例 GitHub 的 UDF。複製儲存庫並切換至您要使用的 git 分支。將儲存庫maven-compiler-pluginpom.xml檔案中的 更新為具有來源。也請將目標 java 版本組態更新為 1.8。執行 mvn package -DskipTests 以建立包含範例 JAR的檔案UDFs。

  2. 建立JAR檔案後,請使用下列命令將其上傳至 S3 儲存貯體。

    aws s3 cp brickhouse-0.8.2-JS.jar s3://amzn-s3-demo-bucket/jars/
  3. 建立範例檔案以使用其中一個範例UDF函數。將此查詢另存為 ,udf_example.q並將其上傳至您的 S3 儲存貯體。

    add jar s3://amzn-s3-demo-bucket/jars/brickhouse-0.8.2-JS.jar; CREATE TEMPORARY FUNCTION from_json AS 'brickhouse.udf.json.FromJsonUDF'; select from_json('{"key1":[0,1,2], "key2":[3,4,5,6], "key3":[7,8,9]}', map("", array(cast(0 as int)))); select from_json('{"key1":[0,1,2], "key2":[3,4,5,6], "key3":[7,8,9]}', map("", array(cast(0 as int))))["key1"][2];
  4. 提交下列 Hive 任務。

    aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "hive": { "query": "s3://amzn-s3-demo-bucket/queries/udf_example.q", "parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket/emr-serverless-hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://'$BUCKET'/emr-serverless-hive/warehouse" } }' --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "hive.driver.cores": "2", "hive.driver.memory": "6G" } }], "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket/logs/" } } }'
  5. 使用 get-job-run命令來檢查任務的狀態。等待狀態變更為 SUCCESS

    aws emr-serverless get-job-run --application-id application-id --job-run-id job-id
  6. 使用下列命令下載輸出檔案。

    aws s3 cp --recursive s3://amzn-s3-demo-bucket/logs/applications/application-id/jobs/job-id/HIVE_DRIVER/ .

    stdout.gz 檔案類似於以下內容。

    {"key1":[0,1,2],"key2":[3,4,5,6],"key3":[7,8,9]} 2