在hdfs上创建spark输出的配置单元表

n9vozmp4  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(202)

我有我的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 ?

93ze6v8z

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'

相关问题