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

在Hive中使用OSS

在Hive中读写OSS时,先创建一个external的表。
CREATE EXTERNAL TABLE eusers (
  userid INT) 
 LOCATION 'oss://emr/users';

使用示例

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中新建一个Hive作业,详情请参见Hive作业配置

      作业内容如下。
      -f ossref://${bucket}/yourpath/hiveSample1.sql

      其中${bucket}是您的OSS Bucket,yourpath是Bucket上的路径,需要您填写实际保存Hive脚本的位置。

    4. 运行作业

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

  • 示例2

    HiBench中的scan为例。

    1. 编写如下脚本,上传至OSS。
      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';

      例如存储路径为oss://emr/jars/scan.hive

    2. 准备测试数据

      您可以通过下面的地址下载作业需要的资源,然后将其上传至您OSS对应的目录。

      资源下载:uservisits

    3. 在E-MapReduce中创建Hive作业,详情请参见Hive作业配置
    4. 运行作业

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