本文介绍在E-MapReduce集群中开发Hive作业流程。

在Hive中使用OSS

要在Hive中读写OSS,需先创建一个external的表。
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使用的网络,由您集群所在的region决定,对应的OSS也需要是在集群对应的region。

    具体的值请参见OSS Endpoint

Hive使用示例

Hive作业流程示例如下:

  • 示例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 bucket,yourpath是这个bucket上的一个路径,需要您填写实际保存Hive脚本的位置。

    4. 创建执行计划并运行

      创建一个执行计划,您可以关联一个已有的集群,也可以自动按需创建一个,然后关联上这个作业。设置策略为立即运行来运行作业。

  • 示例2

    HiBench中的scan为例。

    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. 创建执行计划并运行

      创建一个执行计划,您可以关联一个已有的集群,也可以自动按需创建一个,然后关联上这个作业。单击运行来运行这个作业。