Hadoop Spark EMR S3处理大量文件
我在S3中有大约15000个文件(ORC),其中每个文件包含几分钟的数据,每个文件的大小在300-700MB之间变化 由于递归循环遍历YYYY/MM/DD/HH24/MIN格式的目录非常昂贵,因此我正在创建一个文件,其中包含给定日期的所有S3文件列表(objects_list.txt),并将此文件作为输入传递给spark read APIHadoop Spark EMR S3处理大量文件,hadoop,apache-spark,amazon-s3,emr,amazon-emr,Hadoop,Apache Spark,Amazon S3,Emr,Amazon Emr,我在S3中有大约15000个文件(ORC),其中每个文件包含几分钟的数据,每个文件的大小在300-700MB之间变化 由于递归循环遍历YYYY/MM/DD/HH24/MIN格式的目录非常昂贵,因此我正在创建一个文件,其中包含给定日期的所有S3文件列表(objects_list.txt),并将此文件作为输入传递给spark read API val file_list = scala.io.Source.fromInputStream(getClass.getResourceAsStream("/
val file_list = scala.io.Source.fromInputStream(getClass.getResourceAsStream("/objects_list.txt"))
val paths: mutable.Set[String] = mutable.Set[String]()
for (line <- file_list.getLines()) {
if(line.length > 0 && line.contains("part"))
paths.add(line.trim)
}
val eventsDF = spark.read.format("orc").option("spark.sql.orc.filterPushdown","true").load(paths.toSeq: _*)
eventsDF.createOrReplaceTempView("events")
您可以在下面看到,只有一个执行器正在其中一个任务节点(集群模式)上运行to驱动程序,而其他节点(即工作节点)上的CPU为0%,即使在处理3-4小时后,由于需要处理大量文件,情况也是一样的
关于如何避免这个问题,即加快加载和处理速度,有什么建议吗?有一个解决方案可以帮助您基于AWS Glue 在S3中有很多文件被分区。但是您有基于时间戳的分区。因此,使用glue,您可以使用S3中的对象,如EMR中的“配置单元表” 首先,您需要使用5.8+版本创建一个EMR,您将能够看到: 您可以通过选中这两个选项来设置此选项。这将允许访问AWS Glue数据目录 在此之后,您需要将根文件夹添加到AWS Glue目录中。快速的方法是使用胶水爬行器。此工具将对数据进行爬网,并根据需要创建目录 我建议你去看看 爬虫程序运行后,您可以在目录中看到表的元数据 在雅典娜,你可以检查你的数据是否被爬虫正确识别 此解决方案将使您的spark接近真正的HDFS。由于元数据将正确地保存在数据目录中。应用程序查找“索引”所用的时间将使作业运行得更快
在这里使用它,我能够改进查询,而使用胶水处理分区要好得多。因此,请尝试一下,这可能有助于提高性能。感谢您提供详细的答案。但是除了AWS Glue还有其他通用解决方案吗?如果有人在GCE或Azure上运行他们的应用程序呢,我认为这是一个非常常见的问题,人们可能正在做一些事情来摆脱这个瓶颈,有兴趣了解这个解决方案。在另一个注释中,是否有关于如何从EMR中引用/连接到Glue catalog表的参考资料,他们的文档中没有任何示例/示例,但这并不多。如果您创建了一个EMR集群,请检查以上两项。使用spark可以在指向配置单元表时指向该表。就像这样使用:
val myDf=spark.table(“database.table”)
您就有了您的数据框架。刚才检查了,我的输入数据所在的新加坡还没有胶水,还有其他方法吗?将尝试创建配置单元元数据,但还有其他方法吗?这很难说:(您可以尝试通过指向S3存储桶的配置单元创建外部表。这也可以帮助您。
Sample Log Messages:
17/10/08 18:31:15 INFO S3NativeFileSystem: Opening 's3://xxxx/flattenedDataOrc/data=eventsTable/y=2017/m=09/d=20/h=09/min=00/part-r-00199-e4ba7eee-fb98-4d4f-aecc-3f5685ff64a8.zlib.orc' for reading
17/10/08 18:31:15 INFO S3NativeFileSystem: Opening 's3://xxxx/flattenedDataOrc/data=eventsTable/y=2017/m=09/d=20/h=19/min=00/part-r-00023-5e53e661-82ec-4ff1-8f4c-8e9419b2aadc.zlib.orc' for reading