使用 Scala 计算 HDFS 目录中的文件
Count files in HDFS directory with Scala
在 Scala 中,我试图对 Hdfs 目录中的文件进行计数。
我尝试使用 val files = fs.listFiles(path, false)
获取文件列表并对其进行计数或获取其大小,但它不起作用,因为 files
类型为 RemoteIterator[LocatedFileStatus]
知道我应该如何处理吗?
感谢您的帮助
以前有人这样做过,但人们通常使用 FSImage。 (名称节点文件的副本。)
然后他们会将其放入配置单元 table,然后您可以查询它以获取有关您的 hdfs 文件系统的信息。
这里有一个 really good tutorial 解释了如何导出 fsimage 并将其放入配置单元 table。
这是另一个that I think I prefer:
Fetch and copy the fsimage file into HDFS
#connect to any hadoop cluster node as hdfs user
#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';
一旦进入 table,您就可以在 scala/spark 中完成剩下的工作。
我最终使用:
var count: Int = 0
while (files.hasNext) {
files.next
count += 1
}
作为 Scala 初学者,我不知道如何制作 count++
(答案是 count += 1
)。这实际上很有效
在 Scala 中,我试图对 Hdfs 目录中的文件进行计数。
我尝试使用 val files = fs.listFiles(path, false)
获取文件列表并对其进行计数或获取其大小,但它不起作用,因为 files
类型为 RemoteIterator[LocatedFileStatus]
知道我应该如何处理吗?
感谢您的帮助
以前有人这样做过,但人们通常使用 FSImage。 (名称节点文件的副本。)
然后他们会将其放入配置单元 table,然后您可以查询它以获取有关您的 hdfs 文件系统的信息。
这里有一个 really good tutorial 解释了如何导出 fsimage 并将其放入配置单元 table。
这是另一个that I think I prefer:
Fetch and copy the fsimage file into HDFS #connect to any hadoop cluster node as hdfs user
#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';
一旦进入 table,您就可以在 scala/spark 中完成剩下的工作。
我最终使用:
var count: Int = 0
while (files.hasNext) {
files.next
count += 1
}
作为 Scala 初学者,我不知道如何制作 count++
(答案是 count += 1
)。这实际上很有效