apachespark在google dataproc hdfs中存储源文件与google云存储(googlebucket)

q5iwbnjs  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(429)

我想处理大约500gb的数据,分布在64个json文件中,每个文件包含5m条记录。基本上,map(pyspark)函数在每个300m记录上运行。
为了测试我的pyspark map函数,我设置了一个googledataproc集群(1个master 5个worker只测试一个json文件)。

这里的最佳做法是什么?

我应该复制master node中的所有文件(利用dataproc中的hadoop分布式文件系统)还是将文件保存在gcs bucket中并将文件位置指向pyspark中同样有效?
另外,我的代码导入了相当多的外部模块,我已经复制到我的主控和导入工作在主控。在所有其他工作节点上复制它的最佳实践是什么,这样当pyspark在这些工作节点中运行时,就不会出现导入错误。
我在googlecloud网站上读了几篇文章,但并没有得到一个明确的答案:在哪里存储文件。
我可以手动将外部模块复制到我的每个工作节点上,但在生产环境中,当我处理至少100个节点时,我不能这样做。

vbopmzt1

vbopmzt11#

你问了好几个问题,让我们一次问一个。
我的代码导入了相当多的外部模块,这些模块我已经复制到我的主控程序中,导入在主控程序中运行良好。在所有其他工作节点上复制它的最佳实践是什么,这样当pyspark在这些工作节点中运行时,就不会出现导入错误。
如果模块是外部的(例如,通过 pip install )然后我会使用初始化操作
如果你有很多 .py 你写的文件,我会把它们放进一个存档文件,然后和你一起交给你的工作 --py-files 争论。我也会建议你考虑建造轮子或鸡蛋。
您可能会发现此链接很有用:https://developerzen.com/best-practices-writing-production-grade-pyspark-jobs-cb688ac4d20f
我应该复制master节点中的所有文件(利用dataproc中的hadoop分布式文件系统)还是将文件保存在gcs bucket中同样有效
如果数据已经在gcs中,并且您打算将其存储在那里,那么将其复制到主节点并没有额外的好处。地面军事系统连接器可以就地读取(并行读取!)从地面军事系统和这可能是更便宜的(在计算成本方面)比复制到/从地面军事系统分开。
听起来你的数据已经被适当地切分了;这是一个很好的理由,只是从gcs直接在Spark。
地面军事系统连接器页面明确指出:
直接数据访问—将数据存储在云存储中并直接访问,无需先将其传输到hdfs。hdfs兼容性–您可以使用gs://前缀而不是hdfs://.
互操作性—将数据存储在云存储中可以实现spark、hadoop和google服务之间的无缝互操作性。
无存储管理开销—与hdfs不同,云存储不需要例行维护,如检查文件系统、升级或回滚到文件系统的早期版本等。
快速启动—在hdfs中,只有namenode退出安全模式,mapreduce作业才能启动—根据数据的大小和状态,这个过程可能需要几秒钟到几分钟。使用云存储,您可以在任务节点一开始就开始工作,从而随着时间的推移显著节省成本。

相关问题