我有我的spark工作,每30分钟运行一次,并将输出写入hdfs- (/tmp/data/1497567600000)
. 我在群集中连续运行此作业。
如何在此数据上创建配置单元表?我在stackoverflow中看到过一个解决方案,它在按日期分区的数据字段上创建一个配置单元表。就像,
CREATE EXTERNAL TABLE `mydb.mytable`
(`col1` string,
`col2` decimal(38,0),
`create_date` timestamp,
`update_date` timestamp)
PARTITIONED BY (`my_date` string)
STORED AS ORC
LOCATION '/tmp/out/'
解决办法是把表改成,
ALTER TABLE mydb.mytable ADD PARTITION (my_date=20160101) LOCATION '/tmp/out/20160101'
但是,在我的例子中,我不知道输出目录是如何编写的,因此我显然不能像上面建议的那样创建分区。
如果输出目录是以时间戳为基础随机写入的,而不是以格式写入的,我如何处理这种情况( /tmp/data/timestamp= 1497567600000
)?
如何让配置单元拾取目录下的数据 /tmp/data
?
1条答案
按热度按时间93ze6v8z1#
我可以提出两种解决方案:
如果您可以更改spark作业,那么您可以按小时对数据进行分区(例如。
/tmp/data/1
,/tmp/data/2
),为每个小时添加配置单元分区,只需写入相关分区您可以编写负责添加配置单元分区的bash脚本,可以通过以下方式实现:
使用命令列出hdfs子目录
hadoop fs -ls /tmp/data
正在使用命令列出表的配置单元分区:hive -e 'show partitions table;'
比较上述列表以查找缺少的分区使用上面提供的命令添加新的配置单元分区:
ALTER TABLE mydb.mytable ADD PARTITION (my_date=20160101) LOCATION '/tmp/out/20160101'