使用命令行查找hdfs分布式文件中的总行数

hmi*_*015 1 unix hadoop hdfs apache-spark

我正在一个集群中,数据集hdfs以分布式方式保存.这是我有的:

[hmi@bdadev-5 ~]$ hadoop fs -ls /bdatest/clm/data/
Found 1840 items
-rw-r--r--   3 bda supergroup          0 2015-08-11 00:32 /bdatest/clm/data/_SUCCESS
-rw-r--r--   3 bda supergroup   34404390 2015-08-11 00:32 /bdatest/clm/data/part-00000
-rw-r--r--   3 bda supergroup   34404062 2015-08-11 00:32 /bdatest/clm/data/part-00001
-rw-r--r--   3 bda supergroup   34404259 2015-08-11 00:32 /bdatest/clm/data/part-00002
....
....
Run Code Online (Sandbox Code Playgroud)

数据格式如下:

[hmi@bdadev-5 ~]$ hadoop fs -cat /bdatest/clm/data/part-00000|head
V|485715986|1|8ca217a3d75d8236|Y|Y|Y|Y/1X||Trimode|SAMSUNG|1x/Trimode|High|Phone|N|Y|Y|Y|N|Basic|Basic|Basic|Basic|N|N|N|N|Y|N|Basic-Communicator|Y|Basic|N|Y|1X|Basic|1X|||SAM|Other|SCH-A870|SCH-A870|N|N|M2MC|
Run Code Online (Sandbox Code Playgroud)

所以,我想要做的是计算原始数据文件中的总行数data.我的理解是,分布式块喜欢part-00000,part-00001等有重叠.所以只计算part-xxxx文件中的行数并将它们相加就不起作用了.原始数据集data的大小也是如此~70GB.如何有效地找出总行数?

Avi*_*ddy 5

更有效率 - 你可以使用spark计算no.的线条.以下代码段有助于计算行数.

text_file = spark.textFile("hdfs://...")
count = text_file.count();
count.dump();
Run Code Online (Sandbox Code Playgroud)

这显示没有的计数.的线条.

Note: The data in different part files will not overlap

使用hdfs dfs -cat /bdatest/clm/data/part-* | wc -l也会为您提供输出,但这会将所有数据转储到本地计算机并花费更长的时间.

最好的解决方案是使用MapReduce或spark.MapReduce将需要更长的时间来开发和执行.如果安装了火花,这是最好的选择.