uh_*_*boi 7 hadoop apache-spark apache-spark-sql spark-dataframe data-ingestion
当火花通过驱动程序提取数据时,我试图用简单的术语,然后当spark不需要通过驱动程序提取数据时.
我有3个问题 -
sc.textfile(path) 或sc.textfile(path).toDF等).如果驱动程序只运行32 GB内存,它会导致驱动程序有OOM吗?或者至少对司机吉姆进行掉期交易?或者spark和hadoop是否足够聪明,可以将数据从HDFS分发到一个Spark执行器,以便在不通过驱动程序的情况下生成数据帧/ RDD?Spark 使用分布式数据结构,如 RDD 和 Dataset(以及 2.0 之前的 Dataframe)。以下是您应该了解的有关此数据结构的事实,以获得问题的答案:
所以基本上当你调用时sc.textFile不会发生实际的读取。所有提到的事实都解释了为什么在处理 20 Tb 数据时也不会发生 OOM。
有一些特殊情况,例如 iejoin操作。但即使在这种情况下,所有执行器也会将其中间结果刷新到本地磁盘以进行进一步处理。
如果使用 JDBC,您可以决定表有多少个分区。并在表中选择适当的分区键,将数据正确地划分为分区。同时将有多少数据加载到内存中取决于您。
本地文件的块大小由fs.local.block.size属性控制(我猜默认是32Mb)。因此,它与 1(HDFS 文件)基本相同,只是您将从一台机器和一个物理磁盘驱动器读取所有数据(对于 20TB 文件来说效率极低)。
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |