閱讀113 返回首頁    go 阿裏雲


Hive 開發手冊__Hadoop_開發人員指南_E-MapReduce-阿裏雲

在 Hive 中使用 OSS

要在 Hive 中讀寫 OSS,需要在使用 OSS 的 URI 時加上 AccessKeyId、AccessKeySecret 以及 endpoint。如下示例介紹了如何創建一個 external 的表:

  1. CREATE EXTERNAL TABLE eusers (
  2. userid INT)
  3. LOCATION 'oss://emr/users';

為了保證能正確訪問 OSS,這個時候需要修改這個 OSS URI 為:

  1. CREATE EXTERNAL TABLE eusers (
  2. userid INT)
  3. LOCATION 'oss://${AccessKeyId}:${AccessKeySecret}@${bucket}.${endpoint}/users';

參數說明:

${accessKeyId}:您賬號的 accessKeyId。

${accessKeySecret}:該 accessKeyId 對應的密鑰。

${endpoint}:訪問 OSS 使用的網絡,由您集群所在的 region 決定,對應的 OSS 也需要是在集群對應的 region。

具體的值參考 OSS Endpoint

使用Tez作為計算引擎

從E-MapReduce產品版本2.1.0+開始,引入了Tez,Tez是一個用來優化處理複雜DAG調度任務的計算框架。在很多場景下可以有效的提高Hive作業的運行速度。

用戶在作業中,可以通過設置Tez作為執行引擎來優化作業,如下:

  1. set hive.execution.engine=tez

示例 1

請參見如下步驟:

  1. 編寫如下腳本,保存為 hiveSample1.sql,並上傳到 OSS 上。

    1. USE DEFAULT;
    2. set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
    3. set hive.stats.autogather=false;
    4. DROP TABLE emrusers;
    5. CREATE EXTERNAL TABLE emrusers (
    6. userid INT,
    7. movieid INT,
    8. rating INT,
    9. unixtime STRING )
    10. ROW FORMAT DELIMITED
    11. FIELDS TERMINATED BY 't'
    12. STORED AS TEXTFILE
    13. LOCATION 'oss://${AccessKeyId}:${AccessKeySecret}@${bucket}.${endpoint}/yourpath';
    14. SELECT COUNT(*) FROM emrusers;
    15. SELECT * from emrusers limit 100;
    16. SELECT movieid,count(userid) as usercount from emrusers group by movieid order by usercount desc limit 50;
  2. 測試用數據資源。您可通過下麵的地址下載 Hive 作業需要的資源,然後將其放到您 OSS 對應的目錄下。

    資源下載:公共測試數據

  3. 創建作業。在 E-MapReduce 中新建一個作業,使用類似如下的參數配置:

    1. -f ossref://${bucket}/yourpath/hiveSample1.sql

    這裏的 ${bucket} 是您的一個 OSS bucket,yourPath 是這個 bucket 上的一個路徑,需要您填寫實際保存 Hive 腳本的位置。

  4. 創建執行計劃並運行。創建一個執行計劃,您可以關聯一個已有的集群,也可以自動按需創建一個,然後關聯上這個作業。請將作業保存為“手動運行”,回到界麵上就可以點擊“立即運行”來運行作業了。

示例 2

HiBench 中的 scan 為例,若輸入輸出來自 OSS,則需進行如下過程運行 Hive 作業,代碼修改源於 AccessKeyId、AccessKeySecret 以及存儲路徑的設置。請注意 OSS 路徑的設置形式為 oss://${accesskeyId}:${accessKeySecret}@${bucket}.${endpoint}/object/path

請參見如下操作步驟:

  1. 編寫如下腳本。

    1. USE DEFAULT;
    2. set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
    3. set mapreduce.job.maps=12;
    4. set mapreduce.job.reduces=6;
    5. set hive.stats.autogather=false;
    6. DROP TABLE uservisits;
    7. CREATE EXTERNAL TABLE uservisits (sourceIP STRING,destURL STRING,visitDate STRING,adRevenue DOUBLE,userAgent STRING,countryCode STRING,languageCode STRING,searchWord STRING,duration INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS SEQUENCEFILE LOCATION 'oss://${AccessKeyId}:${AccessKeySecret}@${bucket}.${endpoint}/sample-data/hive/Scan/Input/uservisits';
  2. 準備測試數據。您可通過下麵的地址下載作業需要的資源,然後將其放到您 OSS 對應的目錄下。

    資源下載:uservisits

  3. 創建作業。將步驟 1 中編寫的腳本存儲到 OSS 中,假設存儲路徑為oss://emr/jars/scan.hive,在 E-MapReduce 中創建如下作業:

  4. 創建執行計劃並運行。創建一個執行計劃,您可以關聯一個已有的集群,也可以自動按需創建一個,然後關聯上這個作業。請將作為保存為“手動運行”,回到界麵上就可以點擊“立即運行”來運行作業了。

最後更新:2016-11-23 16:03:59

  上一篇:go MapReduce 開發手冊__Hadoop_開發人員指南_E-MapReduce-阿裏雲
  下一篇:go Pig 開發手冊__Hadoop_開發人員指南_E-MapReduce-阿裏雲