我在本地目录中有很多JSON文件(1 MM)。我需要将这些JSON文件直接移到HDFS中。
[创建了一个包含所有JSON文件的tar。
tar -cvf filename.tar local_folder_name
将.tar文件移动到hdfs目录中
hdfs dfs -put filename.tar hdfs://nameservice1/user/hive/warehouse/dbname.db/table_name/
我需要从hdfs中的tar中提取所有文件,并将它们作为单独的JSON文件保留在hdfs中。我使用tar选项的原因是将单个文件移动到hdfs,而不是一次将1 MM中的每个文件一次移动到一个文件。(这非常慢,不确定是否会完成)
我尝试了以下选项以及其他一些变体。
hdfs dfs -cat hdfs://nameservice1/user/hive/warehouse/dbname.db/table_name/filename.tar | tar -x | hdfs dfs -put - /user/hive/warehouse/dbname.db/table_name/untar_dest
我在hdfs目录中看到一个名为untar_dest的新文件,但是它的大小为0,并且里面没有任何文件。
-rwxrwx--x+ 3 hive hive 0 2020-05-15 21:23 /user/hive/warehouse/dbname.db/ctable_name/untar_dest
某事不正确,我无法找到解决此问题的方法。
如何从HDFS中的.tar中提取文件?
您可以编写简单的Java api,并使用org.apache.hadoop.fs.FileUtil
进行解压缩>
https://hadoop.apache.org/docs/r2.4.1/api/org/apache/hadoop/fs/FileUtil.html
一些示例,您可以在这里找到
https://www.codota.com/code/java/methods/org.apache.hadoop.fs.FileUtil/unTar