使用Hive运行任务

在上一节中,我们创建了S3存储桶,并在input目录上传了JC-202202-citibike-tripdata.csv文件。在这一节中,将继续使用此S3桶, 并使用EMR集群的Hive进行SQL查询。

使用Hive CLI

SSH到EMR Primray节点。在命令行中,执行hive进入交互式界面:

image-20210430221034082

在Hive CLI中,我们将创建一张外部表(external table)叫做trip_test,来指向之前上传的JC-202202-citibike-tripdata.csv数据集。运行以下的DDL语句来创建外部表,将<YOUR-BUCKET> 替换为上一步创建的S3桶名称:

CREATE EXTERNAL TABLE trip_test (
              ride_id string,
              rideable_type string,
              started_at string ,
              ended_at string,
              start_station_name string,
              start_station_id string,
              end_station_name string, 
              end_station_id string,
              start_lat double,
              start_lng double,
              end_lat double,
              end_lng double,
              member_casual string
       )
       ROW FORMAT DELIMITED
       FIELDS TERMINATED BY ','
       LINES TERMINATED BY '\n'
       STORED AS TEXTFILE
       LOCATION "s3://<YOUR-BUCKET>/input/";

image-20240307062517222

使用SQL语句查询该表。例如输出所有的start_station_name

SELECT DISTINCT start_station_name FROM trip_test;

image-20240307062709336

使用EMR Steps

我们继续使用**HiveQL (HQL)**来操作Hive,这个HQL文件将通过EMR Steps来提交,并将运行结果保存到S3

将以下代码保存为trip.hql,将其上传之前创建的S3桶的files目录下:

CREATE EXTERNAL TABLE trip (
              ride_id string,
              rideable_type string,
              started_at string ,
              ended_at string,
              start_station_name string,
              start_station_id string,
              end_station_name string, 
              end_station_id string,
              start_lat double,
              start_lng double,
              end_lat double,
              end_lng double,
              member_casual string
       )
       ROW FORMAT DELIMITED
       FIELDS TERMINATED BY ','
       LINES TERMINATED BY '\n'
       STORED AS TEXTFILE
LOCATION "${INPUT}";

INSERT OVERWRITE DIRECTORY "${OUTPUT}" SELECT * FROM trip WHERE start_station_name = "Christ Hospital";
aws s3 cp trip.hql s3://<bucket-name>/files/

这个 HiveQL 文件将:

  • 创建一张外部表 trip ,数据源指向之前的JC-202202-citibike-tripdata.csv文件。

  • 查询 trip 表的start_station_name

  • 将结果保存到路径${OUTPUT},这个路径在提交step的时候指定。

添加EMR Step

现在将这个HQL文件以Step的方式提交到EMR。 在EMR集群的界面上,点击添加步骤

image-20240307063337469

步骤类型中,选择Hive Program, 相关配置如下:

  • 脚本S3位置: s3://<YOUR-BUCKET>/files/trip.hql

  • 输入S3 位置: 不需要指定S3文件完整路径,因为Hive会读取目录下的所有文件。 路径为 s3://<YOUR-BUCKET>/input/

  • 输出 S3位置: 存储Hive执行结果。路径为: s3://<YOUR-BUCKET>/output/hive/

  • 其他配置不用更改,点击 添加

image-20240307063525241

在点击添加后,HQL脚本会接着被执行,在几分钟过后检查S3/output/hive/目录,可以看到结果文件。

image-20240307064956365