amazon-web-services - 将 Hive 参数传递给 EMR Step
问题描述
我正在尝试使用 EMR 在按日期分区的 EXTERNAL 表上运行查询,其中dt
分区的格式为YYYYmmdd i.e: 20190121
.
CREATE EXTERNAL TABLE `my_schema`.`tracking_table`(
`id` string,
`active_bitmap` string)
PARTITIONED BY (
`dt` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'quoteChar'='\"',
'separatorChar'='\t')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://bucket/trackingtable'
我创建了一个简单的脚本,将结果(以制表符分隔并以 gzip 压缩)插入到我的 S3 存储桶中。
set hive.cli.print.header=true;
set mapred.output.compress=true;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;
INSERT OVERWRITE DIRECTORY '${OUTPUT}/dt={:start_date}/'
select if(b.id is null,a.id,b.id) as id
,if(b.days_active is null, 1, (shiftleft(CAST(b.days_active AS BIGINT),1))|if(a.is_active is null,0,1) ) as active_bitmap
,'{:start_date}' as dt_partition
from(
select id,
if(count(1) > 0, 1, NULL) as is_active
from my_schema.activity_table where dt='{:start_date}' group by id
)a
full outer join(
select * from my_schema.tracking_table where dt='{:start_date-1}'
)b on a.id=b.id;
我通过用值替换${OUTPUT}, {:start_date}
和{:start_date-1}
参数在 HIVE 控制台上测试了我的脚本,它工作正常,我可以在我的 S3 输出存储桶中看到由选项卡压缩和分隔的结果。
现在,我想以编程方式为去年的数据运行此脚本。如何将日期参数传递给我的 EMR 步骤?我看到 EMR 上有一个参数部分,但我猜那是用于 EMR 集群的配置参数。
另外,{:start_date-1}
我的日期格式是否有效,或者我是否需要将字符串日期解析为日期,减去一天并再次将其解析为字符串?
我正计划创建一个 python 脚本,该脚本需要一系列日期并将每个步骤提交到一个长时间运行的 EMR 集群,但我不知道如何将日期作为参数传递,我找不到任何关于如何传递的教程轻松做到这一点。
解决方案
要将参数传递给 EMR HIVE 作业:
在 EMR Step Web 控制台中
添加
-d parameter1 -d parameter2
IE
-d dt=20190101 -d dt2=20190201
在 EMR 步骤参数部分
或者在 AWS cli 中,在 ARGS 部分添加参数。IE:
aws emr add-steps --cluster-id j-xxxxx --steps Type=HIVE,Name='Hive Job Name XXX',ActionOnFailure=CONTINUE,Args=[-f,s3://bucket/folder/,-d,INPUT=s3://bucket/folder/input/,-d,OUTPUT=s3://s3://bucket/folder/output/,-d,dt=20190101,-d,dt2=20190201]
更多的:
https://docs.aws.amazon.com/cli/latest/reference/emr/add-steps.html
推荐阅读
- reactjs - 自定义字体已加载但未在反应打字稿中应用
- javascript - 无法触发 WebRTC onTrack 事件,尽管 peerConnection 与数据通道一起使用
- java - 在 Python 中为 2 个不同的变量初始化 2D 数组/列表
- html - 在 vueJs 中有哪些“主题或设计选择器”的方法
- python - Selenium 在单击下一页按钮后继续滚动浏览不存在的页面
- php - 尝试在浏览器上打开我的 PHP 文件时如何摆脱解析错误
- r - 我可以在闪亮的应用程序中嵌入 PowerPoint 幻灯片吗
- c++ - 如何仅使用 3 个 if 语句对 3 个字符串进行排序(C++)
- java - 新创建的主类不会出现在“浏览主类”对话框中。我该如何解决这个问题?
- javascript - 你们能帮我订购dom吗?