gpt4 book ai didi

scala - 从hadoop文件系统读取文件后,从本地文件系统读取文件

转载 作者:行者123 更新时间:2023-12-02 19:12:22 25 4
gpt4 key购买 nike

我正在尝试从本地EMR文件系统读取文件。它作为文件存在于/emr/myFile.csv文件夹下。但是,我一直收到FileNotFoundException。这是我用来阅读的代码行:

val myObj: File = new File("/emr/myFile.csv")
我也向文件路径添加了 file:////前缀,因为我已经看到该方法适用于其他人,但是仍然无法使用。因此,我还尝试直接从hadoop文件系统中读取该文件的存储位置: /emr/CNSMR_ACCNT_BAL/myFile.csv,因为我认为它可能是在hdfs中默认检查的。但是,这也会导致 FileNotFoundException。这是该代码:
val myObj: File = new File("/emr/CNSMR_ACCNT_BAL/myFile.csv")
如何将该文件读入文件?

最佳答案

对于您的第一个问题:
提交hadoop作业应用程序时,可以在包括主节点(取决于您的配置)在内的任何工作节点上创建主数据库。
如果使用EMR,则默认情况下,将在任何工作程序节点(CORE节点)上而不是在主节点上创建应用程序主数据库。
当您说file:///emr/myFile.csv此文件存在于本地文件系统上时(我假设这意味着在主节点上),您的程序将在应用程序主节点所在的节点上搜索该文件,并且绝对不在您的主节点上搜索该文件,因为您不会有任何错误。

第二个问题:
当您尝试使用java File.class访问HDFS中的文件时,它将无法访问该文件。
您需要使用hadoop FileSystem api(org.apache.hadoop.fs.FileSystem)与HDFS文件进行交互。
还可以使用HDFS文件标签hdfs://<namenode>:<port>/emr/CNSMR_ACCNT_BAL/myFile.csv
如果您的core-site.xml包含fs.defaultFS的值,那么您无需仅输入hdfs:///emr/CNSMR_ACCNT_BAL/myFile.csv即可放置namenode和端口信息

那么在访问hadoop集群中的文件时,这里有什么更好的选择?
答案取决于您的用例,但是在大多数情况下,将其放入HDFS会更好,因为您不必担心应用程序母版的位置。每个节点都可以访问hdfs。
希望能解决您的问题。

关于scala - 从hadoop文件系统读取文件后,从本地文件系统读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63162283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com