hadoop/spark生态系统中的数据移动

jxct1oxe  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(445)

我有一个基本问题,我希望能更好地理解:
背景
假设我有一个巨大的csv文件(50gb),我想在一个数据科学团队中进行分析。理想情况下,团队中的每个成员都能够用自己选择的语言与数据交互,数据不需要频繁移动(考虑到数据的大小),所有人都可以灵活地访问计算资源。
建议的解决方案
apachespark似乎是目前满足上述要求的解决方案的领跑者。scala、python、sql和r都能够访问it站点上的数据(如果利用databricks、azure、aws、cloudera等云提供商)灵活的计算资源。
问题
以microsoft azure/hdinsight域中的一个特定示例为例。假设我们将这个大型csv上传到azure数据湖。如果我们利用hdinsight中的spark来定义这个数据的模式,我们是否需要从数据所在的位置移动/导入数据?
我的理解可能是错误的,一个关键的好处是数据能够以其本机csv格式驻留在数据池中。在它上面运行计算不需要移动它。此外,如果我们希望根据需要频繁地关闭/启动spark群集,我们可以简单地将它们重新指向廉价存储的CSV。
结论
如您能就上述内容提供任何确认,或就误解作出澄清,我们将不胜感激。hadoop/spark生态系统继续快速发展,我想确保我对它当前的功能有一个正确的理解。

4nkexdtk

4nkexdtk1#

简而言之,是的,文件可以保留在azure数据湖存储中。您只需将data lake存储作为附加存储帐户添加到spark hdinsight群集,甚至可以在配置群集时将其设置为默认存储帐户。这将允许您的所有spark作业访问驻留在存储帐户中的数据文件。
更多信息请参见此处:https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-use-blob-storage#using-带有hdinsight群集的azure数据湖存储
请注意,如果您选择拆除hdinsight集群,并且将hive与spark结合使用以实现模式/表持久化,请确保您使用的是外部数据库来承载元存储。
有关外部元存储的更多信息,请参见此处:https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters#a-名称使用hiveoozie元存储Hive元存储

bfrts1fy

bfrts1fy2#

需要注意的两点:
使用parquet的高效存储:最好以parquet格式而不是csv格式存储数据,因为它节省了大量空间,而使用spark with parquet(由于它的列格式)将为查询提供更好的性能,因为 predicate 下推。你可以压缩文件多达60%使用Parquet。
数据位置数据驻留在executor计算机上:如果您在azure上创建集群并将数据存储在azure数据湖上,那么将有一些数据从数据湖移动到executors,除非数据是executors本地的。
希望它能回答你的问题。

相关问题