用Scala统计HDFS目录下的文件



在Scala中,我试图从Hdfs目录中计数文件。我试图获得val files = fs.listFiles(path, false)的文件列表,并对其进行计数或获取它的大小,但它不起作用,因为files类型是RemoteIterator[LocatedFileStatus]

你知道我应该怎么处理吗?

谢谢你的帮助

这是以前做过的,但通常人们使用FSImage。(名称节点文件的副本)

他们会把它扔到一个hive表中,然后你可以查询hdfs文件系统的信息。

这是一个非常好的教程,它解释了如何导出fimage并将其放入hive表中。

还有一个我更喜欢的:

获取并复制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中完成剩下的工作了。

我最终使用:

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

作为一个Scala初学者,我不知道如何制作count++(答案是count += 1)。这实际上运行得很好

相关内容

  • 没有找到相关文章

最新更新