Hadoop 使用spark/scala,我将saveAsTextFile()用于HDFS,但hiveql(“select count(*)from…)返回0
我创建了如下的外部表Hadoop 使用spark/scala,我将saveAsTextFile()用于HDFS,但hiveql(“select count(*)from…)返回0,hadoop,hive,hdfs,hiveql,Hadoop,Hive,Hdfs,Hiveql,我创建了如下的外部表 hive-e“创建外部表temp\u db.temp\u table(a char(10),b int)由(PART\u DATE VARCHAR(10))行格式分隔字段分割,以“\t”结尾,存储为TEXTFILE LOCATION“/work/temp\u db/temp\u table” 我在IntelliJ IDEA中使用saveAsTextFile()和scala,如下所示。。。 itemsRdd.map(u.makeTsv).saveAsTextFile(“hdf
hive-e“创建外部表temp\u db.temp\u table(a char(10),b int)由(PART\u DATE VARCHAR(10))行格式分隔字段分割,以“\t”结尾,存储为TEXTFILE LOCATION“/work/temp\u db/temp\u table”
itemsRdd.map(u.makeTsv).saveAsTextFile(“hdfs://work/temp_db/temp_table/2016/07/19“”
/work/temp\u db/temp\u table/2016/07/19中。
hadoop fs-ls/work/temp_db/temp_table/2016/07/19/part-000000。
配置单元-e“从临时数据库中选择*临时表格限制5”->0行已获取。
- 您从spark保存到错误的位置。分区目录名称紧跟在
part\u col\u name=part\u value
之后
在Spark中:将文件保存在目录part_date=2016%2F07%2F19
下的temp_table
dir
添加分区:您需要添加应该更新配置单元表元数据的分区(我们从spark创建的分区目录是配置单元预期的key=value
format)
alter table temp_table add partition(PART_DATE='2016/07/19')代码>
查询分区数据:
对于日常进程:您可以像这样运行saprk作业-只需在saveAsTextFile()
之后添加分区,并注意alter
语句中的s
。需要从spark在配置单元sql中传递变量:
val format = new java.text.SimpleDateFormat("yyyy/MM/dd")
vat date = format.format(new java.util.Date())
itemsRDD.saveAsTextFile("/user/hive/warehouse/temp_table/part=$date")
val hive = new HiveContext(sc)
hive.sql(s"alter table temp_table add partition (PART_DATE='$date')")
注意:保存文件后添加分区,否则spark将抛出目录已存在异常,因为配置单元在添加分区时创建目录(如果不存在)。谢谢!!!我计划如下管理hdfs目录。。。“../temp_table/2016/07/19”…/temp_table/2016/07/20”。。。所以我是否应该每天命令“ALTERTABLE temp\U table add partition(part\u date=..)”子句?以及。。。我想隐藏名字,“part_date”。所以,我想。。。“../temp_table/2016/07/19”(年/月/日,每个目录),而不是“../temp_table/part_date=2016%2F07%2F19”。非常感谢。对于每日负载,您可以创建spark作业(请参阅更新的答案)。对于重命名分区目录,您可以使用下面的命令,但这主要是为了更改分区值,而不是从目录名中删除键-这会弄乱配置单元元数据-我强烈建议不要尝试!我知道它永远不会工作,但这里有一个命令-altertable TABLE\u name[PARTITION PARTITION\u spec]SET LOCATION“new LOCATION”代码>BigDataLearner!!非常感谢。现在我的项目运行得很好。!!
[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/temp_table/part*|awk '{print $NF}'
/user/hive/warehouse/temp_table/part_date=2016%2F07%2F19/part-00000
/user/hive/warehouse/temp_table/part_date=2016-07-19/part-00000
hive> alter table temp_table add partition (PART_DATE='2016/07/19');
OK
Time taken: 0.16 seconds
hive> select * from temp_table where PART_DATE='2016/07/19';
OK
test1 123 2016/07/19
Time taken: 0.219 seconds, Fetched: 1 row(s)
hive> select * from temp_table;
OK
test1 123 2016/07/19
test1 123 2016-07-19
Time taken: 0.199 seconds, Fetched: 2 row(s)
val format = new java.text.SimpleDateFormat("yyyy/MM/dd")
vat date = format.format(new java.util.Date())
itemsRDD.saveAsTextFile("/user/hive/warehouse/temp_table/part=$date")
val hive = new HiveContext(sc)
hive.sql(s"alter table temp_table add partition (PART_DATE='$date')")