我是一名皮斯喀斯特新手,最近加入了一个项目,该项目使用了在Pyspark中开发的ETL /ETL管道,该管道从S3 (通过读取DF中的数据)中摄取CSV文件,并对它们进行处理,然后将它们加载到Hive表(暂存层)。该框架接受一个ETL配置文件,该文件包含Spark语句形式的转换(使用临时视图)。然后从暂存表中读取数据并应用这些转换,最后将数据加载到DWH目标中的Hive表中。上述转换被提交给EMR集群运行Spark (2.4)上的纱线。
在这种情况下,S3与HDFS (EMR)有什么关系?我已经向团队中的其他人提出了这个问题,但没有得到完整的了解。
现在,根据我的理解,输入文件以及Hive表的底层数据文件都存储在S3上。当我对特定表运行以下ls命令时,它将显示构成该表的数据的所有10分区-
aws s3 ls s3://my_bucket/cust_dw/cust_dm_customer_dtls/
2022-05-02 08:24:24 15236547 part-00000-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 47685934 part-00001-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 59204612 part-00002-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 81294375 part-00003-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 84390123 part-00004-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 19238712 part-00005-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 19348723 part-00006-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 28934198 part-00007-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 18398123 part-00008-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet
2022-05-02 08:24:24 93478230 part-00009-42384ef3-05ae-4b64-abd9-9fe48b9852bf-c000.snappy.parquet现在,根据我的理解,EMR基本上是一个包含许多节点的HDFS集群。我还认为,数据文件是以分布式方式存储在HDFS上的,部分数据存储在具有一定复制程度的每个节点上。
所以,我的问题是-如果数据存储在S3上,那么它不是存储在HDFS上,对吧。
由于在这种情况下,数据是存储在S3上而不是,我们为什么需要HDFS?是因为,在这种情况下,EMR只是被用作一个分布式环境,用于处理由Spark (在大范围转换期间)处理的数据?HDFS不存储实际数据,而是存储在S3上?
因此事实是,在这种环境中,输入数据存储在S3上,然后由PySpark框架读取,而后者又只使用HDFS节点通过在洗牌过程中分发数据来以分布式方式处理数据?
发布于 2022-05-03 14:49:16
你把这两个搞混了。您不能在EMR中使用S3代替Hadoop文件系统。
HDFS和使用Amazon的S3文件系统(EMRFS)都与Amazon兼容,但它们是不可互换的。HDFS是Hadoop FileSystem API的一个实现,它对POSIX文件系统行为进行建模。EMRFS是一个对象存储,而不是文件系统。
阅读对象存储与文件系统的Hadoop文档可能会给您带来好处。
要了解有关AWS存储和文件系统的更多信息,以及何时使用该系统,请阅读这。
最后,如果您发现这是有用的,请不要忘记阅读这。
https://stackoverflow.com/questions/72100910
复制相似问题