草庐IT

平分分区

全部标签

hadoop - Hive 从多个目录加载数据并动态创建分区

我根据创建日期将数据存储在Hadoop中,所以我有多个目录在基于/data/{year}/{month}/{day}格式创建的HDFS上。我希望将这些数据加载到Hive中(定期)并创建相应的分区。目前,我正在尝试以下几种方法CREATEEXTERNALTABLEtablename(...)PARTITIONEDBY(yearSTRING,monthSTRING,daySTRING)LOCATION'/data';ALTERTABLEtablenameADDPARTITION(year='2014',month='10',day='13')LOCATION'/data/2014/10/1

hadoop - 使用 hdfs 的 Impala 分区表

我将数据以以下格式存储在hdfs中,并使用“altertableaddpartition”命令将这些数据插入到impala分区表中。/user/impala/subscriber_data/year=2013/month=10/day=01/user/impala/subscriber_data/year=2013/month=10/day=02一切正常。现在我有一个新数据,月份和年份分别为10和01。现在我需要处理这些数据并将这些数据附加到现有的hdfs目录中(年=2013/月=10/日=01)。当我尝试处理并插入到hdfs目录时,由于输出目录已经存在而给出错误。有没有办法在不删除现

mysql - 多列配置单元上的动态分区

我有一个包含多列的文件,其中两列是年份和月份。我正在尝试根据这两列年份和月份对表进行动态分区。我尝试了以下命令:将路径'/com/data/abc.txt'中的数据加载到表ABC_TABLE分区(年,月);下面是我得到的异常:失败:SemanticExceptionorg.apache.hadoop.hive.ql.metadata.HiveException:MetaException(消息:无效的分区键和值;键[year_cd,quarter_num,],值[]) 最佳答案 加载数据时,需要根据列值提及分区的详细信息。请参阅以下

hadoop - 在 AWS EC2 上扩展根分区

我创建了一个公共(public)VPC,然后向其中添加了一堆节点,以便我可以将其用于spark集群。不幸的是,它们都具有如下所示的分区设置:ec2-user@sparkslave1:lsblk/dev/xvda100G/dev/xvda15.7G/我在这些机器上设置了一个云管理器,所有节点只剩下1G空间给HDFS。如何扩展分区以占用所有100G?我尝试创建/dev/xvda2,然后创建一个卷组,将所有/dev/xvda*添加到其中,但/dev/xvda1在挂载时没有添加。在这种情况下,我无法从liveCD启动,它在AWS上。我也试过resize2fs但它说根分区已经占用了所有可用的bl

hadoop - Hive 从带分区的文件创建表

我遇到了一个我无法完全理解的奇怪的HIVE行为。我真的希望有人能对这件事有所了解。我正在使用以下脚本创建表并将数据添加到表中:DROPTABLEmyTbl;CREATEEXTERNALTABLEmyTbl(Col1string,Col2string,Col3string,Col4string,)PARTITIONEDBY(partitionSTRING)LOCATION'${hiveconf:Valid_location_on_aws_s3_with_the_proper_file_to_create_table}';Hive运行脚本返回OK但(这就是问题所在)表是空的。运行:sele

hadoop - 如何从 pyspark rdd 或分区确定原始 s3 输入文件名

我正在使用pyspark流式处理来自S3的ETL输入文件。我需要能够建立所有原始输入文件的审计线索在s3://上,我的Parquet输出在hdfs://上结束。给定一个dstream、rdd,甚至是一个特定的rdd分区,是否有可能确定s3中输入数据的原始文件名?目前我知道的唯一方法是采取rdd.toDebugString()并尝试解析它。然而,这感觉真的很hacky并且不在某些情况下工作。例如,解析调试输出对我的批处理模式导入不起作用我也在做(使用sc.TextFile("s3://...foo/*")样式的glob)。有没有人有确定原始文件名的明智方法?似乎其他一些spark用户过去

sql - 如何动态地从配置单元表中删除分区?

我是hive的新手。有人可以帮我解决这个要求吗?我的需求是动态删除分区。我有一个结果不同区域的SQL(SQL如下:在ALTERTABLEFROM之后)。现在我想删除由我的SQL返回的区域(在我的配置单元表中分区)。我尝试了以下方法:ALTERTABLEPARTITION(region=tab.region)FROMselecttab.regionfrom(SELECT*fromTable1)tabjoin(selectfilenamefromTable2)tab1ontab1.filename=tab.filename它抛出以下异常:'1:21:13[ALTER-0row(s),0.0

sql - 像另一个一样创建一个配置单元表,但按键分区

在Hive中,我想用另一个表的列创建一个表,但用其中一个列对其进行分区。那可能吗?理想情况下,我想执行这样的操作:CREATETABLEifnotexistsnew_tableLIKEold_tablePARTITIONEDBY(col1int)现在它没有运行,因为我似乎无法在使用like子句后添加partitionedby。我正在寻找替代方案,因为我正在尝试编写一个通用函数,而不必专门解析或硬编码架构。 最佳答案 我想不出一种在一个查询中以通用方式执行此操作的方法。我最终使用describeold_table读取了模式,创建了带有

arrays - 如何在 hadoop 分区程序中定义数组

我是hadoop和mapreduce编程的新手,不知道我应该做什么。我想在hadoop分区程序中定义一个int数组。我想在主函数中感受这个数组并在分区程序中使用它的内容。我曾尝试使用IntWritable及其数组,但它们都不起作用。我尝试使用IntArrayWritable但还是没有用。如果有人帮助我,我会很高兴。非常感谢publicstaticIntWritableh=newIntWritable[1];publicstaticvoidmain(String[]args)throwsException{h[0]=newIntWritable(1);}publicstaticclass

sql - Hive 分区性能

想问一下Hive的分区性能。要查看分区性能,我需要多少条记录(以行计)?目前,我有超过200万条记录,我已将表拆分为2个分区。我的分区条件如下:ADDPARTITION(year_month=’2017_07’)ADDPARTITION(year_month=’2017_08’)INSERTOVERWRITETABLETPARTITION(year_month='2017_07')SELECT*FROMTWHEREst_timeINSERTOVERWRITETABLETPARTITION(year_month='2017_08')SELECT*FROMTWHEREst_time>='2