hadoop 使用Scala计算HDFS目录中的文件数

ux6nzvsh  于 2022-11-01  发布在  Hadoop
关注(0)|答案(2)|浏览(197)

在Scala中,我尝试对Hdfs目录中的文件进行计数。我尝试获得val files = fs.listFiles(path, false)的文件列表,并对其进行计数或获得其大小,但由于files类型为RemoteIterator[LocatedFileStatus],因此无法正常工作
你知道我该怎么处理吗
谢谢你的帮助

mnemlml8

mnemlml81#

以前也有人这样做过,但通常人们使用FSImage。(名称节点文件的副本。)
然后,他们会把它放到一个hive表中,然后你可以查询它来获得关于你的hdfs文件系统的信息。
下面是一个really good tutorial,它解释了如何导出fsimage并将其放入hive表中。
下面是另一个that I think I prefer
获取fsimage文件并将其复制到HDFS #以hdfs用户身份连接到任何Hadoop集群节点


# downloads the fsimage file from namenode

hdfs dfsadmin -fetchImage /tmp

# converts the fsimage file into tab delimited file

hdfs oiv -i /tmp/fsimage_0000000000450297390 -o /tmp/fsimage.csv -p Delimited

# remove the header and copy to HDFS

sed -i -e "1d" fsimage.csv
hdfs dfs -mkdir /tmp/fsimage
hdfs dfs -copyFromLocal /tmp/fsimage.csv /tmp/fsimage

# create the intermediate external table in impala

CREATE EXTERNAL TABLE HDFS_META_D ( 
 PATH STRING , 
 REPL INT , 
 MODIFICATION_TIME STRING , 
 ACCESSTIME STRING , 
 PREFERREDBLOCKSIZE INT , 
 BLOCKCOUNT DOUBLE, 
 FILESIZE DOUBLE , 
 NSQUOTA INT , 
 DSQUOTA INT , 
 PERMISSION STRING , 
 USERNAME STRING , 
 GROUPNAME STRING) 
row format delimited
fields terminated by '\t'
LOCATION '/tmp/fsimage';

一旦它在一个表中,你真的可以在scala/spark中做剩下的事情。

gjmwrych

gjmwrych2#

我最终使用:

var count: Int = 0
while (files.hasNext) {
  files.next
  count += 1
}

作为一个Scala初学者,我不知道如何创建count++(答案是count += 1)。

相关问题