このページでは、E-MapReduce クラスター上で Hive ジョブを作成し実行する方法について説明します。

Hive で OSS を使用

Hive で OSS を読み書きするには、以下の文を使用して外部テーブルを作成します。
CREATE EXTERNAL TABLE eusers (
  userid INT) 
 LOCATION 'oss://emr/users';
ご利用のクラスターのバージョンが古く、上記のメソッドがサポートされていない、または別のアカウントの AccessKey を使用して別のリージョンの OSS インスタンスにアクセスする場合は、以下のステップを実行します。
CREATE EXTERNAL TABLE eusers (
  userid INT) 
 LOCATION 'oss://${AccessKeyId}:${AccessKeySecret}@${bucket}.${endpoint}/users';
パラメーターの説明 :
  • ${accessKeyId}: お客様のアカウントの AccessKeyId

  • ${accessKeySecret} : AccessKeyId に対応する秘密鍵

  • ${endpoint} : OSS へのアクセスに使用されるネットワーク。 クラスターが存在するリージョンによって異なります。 対応する OSS インスタンスは、クラスターが存在するリージョンにある必要があります。

    特定の値の詳細は、 「OSSエンドポイント (OSS endpoints)」をご参照ください。

コンピューティングエンジンに Tez を使用

Tez は E-MapReduce バージョン 2.1.0 以降に実装されています。 Tez は、複雑な DAG スケジューリングジョブを最適化するためのコンピューティングフレームワークです。 多くのシナリオで Hive ジョブのスピードが大幅に向上しています。

実行エンジンとして Tez を設定することでジョブを最適化することができます。 以下のステップを実行します。
set hive.execution.engine=tez
  • 例 1
    以下のステップを実行します。
    1. 1. 以下のスクリプトを記述し、hiveSample1.sql として保存してから OSS にアップロードします。
      USE DEFAULT;
       set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
       set hive.stats.autogather=false;
       DROP TABLE emrusers;
       CREATE EXTERNAL TABLE emrusers (
         userid INT,
         movieid INT,
         rating INT,
         unixtime STRING ) 
        ROW FORMAT DELIMITED 
        FIELDS TERMINATED BY '\t' 
        STORED AS TEXTFILE 
        LOCATION 'oss://${bucket}/yourpath';
       SELECT COUNT(*) FROM emrusers;
       SELECT * from emrusers limit 100;
       SELECT movieid,count(userid) as usercount from emrusers group by movieid order by usercount desc limit 50;
    2. テスト用のデータリソース

      以下のリンクから Hive ジョブに必要なリソースをダウンロードして、それらのリソースを OSS インスタンス内の対応するディレクトリに格納できます。

      ダウンロードするリソース : 公開テストデータ

    3. ジョブの作成

      以下の設定を使用して E-MapReduce に新しいジョブを作成します。

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

      この例では、${bucket} は OSS バケットを表し、yourPath はバケット内のパスを表します。 yourPath を Hive スクリプトが保存されている場所に置き換える必要があります。

    4. 実行プランの作成と実行

      実行プランを作成します。 既存のクラスターと関連付けることも、必要に応じてクラスターを作成してプランをクラスターと関連付けることもできます。 ジョブを [手動で実行] で保存します。 前のページに戻り、[今すぐ実行] をクリックしてジョブを実行します。

  • 例 2

    例として HiBench でスキャンします。

    以下のステップを実行します。

    1. 以下のスクリプトを記述します。
      USE DEFAULT;
       set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
       set mapreduce.job.maps=12;
       set mapreduce.job.reduces=6;
       set hive.stats.autogather=false;
       DROP TABLE uservisits;
       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://${bucket}/sample-data/hive/Scan/Input/uservisits';
    2. テストデータの準備

      以下のリンクからジョブの必須のリソースをダウンロードしそれらのリソースを OSS インスタンス内の対応するディレクトリに格納できます。

      ダウンロードするリソース : uservisits

    3. ジョブの作成

      ステップ 1 で作成したスクリプトを OSS に格納します。 たとえば、ストレージパスが oss://emr/jars/scan.hive の場合は、以下のステップを実行して E-MapReduce にジョブを作成します。

      ジョブの作成
    4. 実行プランを作成し実行します。

      実行プランを作成します。 既存のクラスターと関連付けることも、必要に応じてクラスターを作成してプランをクラスターと関連付けることもできます。 ジョブを [手動で実行] で保存します。 前のページに戻り、[今すぐ実行] をクリックしてジョブを実行します。