Hadoop copyFromLocal命令用于将文件从本地文件系统复制到 HDFS(Hadoop 分布式文件系统)。 copyFromLocal命令有一个可选开关-f用于替换系统中已经存在的文件,意味着它可以用于更新该文件。 -f开关类似于先删除一个文件,然后再复制它。如果该文件已存在于文件夹中,则将其复制到同一文件夹中将自动引发错误。
将文件从本地文件系统复制到 HDFS 的语法如下:
hdfs dfs -copyFromLocal /path 1 /path 2 .... /path n /destination
copyFromLocal本地命令类似于 HDFS 中使用的 -put 命令。我们也可以使用hadoop fs作为 hdfs dfs的同义词。该命令可以采用多个参数,其中提供的所有路径都是我们想要复制文件的源路径,除了最后一个是目标,也就是复制文件的位置。确保目标应该是一个目录。
我们的目标是将文件从我们的本地文件系统复制到 HDFS。就我而言,我想复制/home/dikshant/Documents/hadoop_file目录中存在的文件名 Salaries.csv。
执行 copyFromLocal 命令的步骤
让我们看看我的Root目录在 HDFS 中的当前视图。
步骤 1:在 HDFS 中创建一个目录,使用以下命令复制此文件。
hdfs dfs -mkdir /Hadoop_File
步骤2:使用如下所示的copyFromLocal命令将其复制到HDFS /Hadoop_File目录。
hdfs dfs -copyFromLocal /home/dikshant/Documents/hadoop_file/Salaries.csv /Hadoop_File
步骤 3:通过使用以下命令移动到其目录位置来检查文件是否复制成功。
hdfs dfs -ls /Hadoop_File
使用 -f开关覆盖或更新 HDFS 中的文件
从下图中,您可以观察到copyFromLocal命令本身并没有在同一位置复制同名文件。它说该文件已经存在。
要更新文件的内容或覆盖它,您应该使用-f开关,如下所示。
hdfs dfs -copyFromLocal -f /home/dikshant/Documents/hadoop_file/Salaries.csv /Hadoop_File
现在你可以很容易地观察到使用带有-f开关的 copyFromLocal不会产生任何错误,或者它会很容易地更新或修改你在 HDFS 中的文件。