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

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

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

我正在处理一个数据集以分布式方式保存在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 .... ....

数据的格式是:

[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|

所以,我想要做的是统计原始数据文件data的行数。 我的理解是, part-00000 , part-00001等分布式块有重叠。 所以只要计算part-xxxx文件中的行数并将它们相加将不起作用。 另外原始数据集的data大小~70GB 。 我怎样才能有效地找出总行数?

无法在RStudio中启动SparkR

在windows上使用Jupyter,在Spark上兼容Apache Toree Kernel

在windows 10上的Spark。'files Spark bin .. jars“”'不被识别为内部或外部命令

winutils启动windows安装

Spark sbin /文件夹中的stop-all.sh不会停止所有的从属节点

Sparkconfiguration,SPARK_DRIVER_MEMORY,SPARK_EXECUTOR_MEMORY和SPARK_WORKER_MEMORY有什么不同?

如何在windows机器上为Spark应用程序设置集群环境?

Spark windows安装Java错误

Scala和Spark:windows上的Dataframe.write._

在现有的Hadoop集群上安装Spark

更高效 – 您可以使用火花来计算不。 线。 以下代码片段有助于计算行数。

text_file = spark.textfile("hdfs://...") count = text_file.count(); count.dump();

这显示了no的计数。 线。

Note: The data in different part files will not overlap

使用hdfs dfs -cat /bdatest/clm/data/part-* | wc -l hdfs dfs -cat /bdatest/clm/data/part-* | wc -l也会给你输出,但是这会把所有的数据转储到本地机器上,并且花费更长的时间。

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

如果你只需要找到数据中的行数。 您可以使用以下命令:

hdfs dfs -cat /bdatest/clm/data/part-* | wc -l

你也可以用一个简单的mapreduce程序来编写一个标识映射器,它将输入作为输出。 然后你检查计数器,并找到映射器的输入记录。 这将是您的数据中的行数。

Hadoop一个班轮:

hadoop fs -cat /bdatest/clm/data/part-* | wc -l

资料来源: http : //www.sasanalysis.com/2014/04/10-popular-linux-commands-for-hadoop.HTML

另一种方法是创建一个map reduce作业,其中mapper为每行发射1,reducer将这些值相加。 请参阅编写MApreduce代码的已接受答案, 以计算解决方案的记录数 。

如果你有一个非常大的文件,大概有相同的行内容(我想象一个JsON或日志条目),你不关心精度,你可以计算它。

例如,我将原始的JsON存储在一个文件中:

文件大小:750Mo第一行的大小:752个字符(==> 752个八位字节)

线=>约1.020.091

运行cat | wc -l cat | wc -l给出1.018.932

不那么糟糕^^

这是一个普遍的任务,我希望有一个子命令fs做到这一点(例如, hadoop fs -wc -l inputdir ),以避免将所有内容流式传输到执行“wc -l”命令的计算机。

为了有效地计算行数,我经常使用hadoop streaming和unix命令,如下所示:

hadoop jar ${HADOOP_HOME}/hadoop-streaming.jar -Dmapred.reduce.tasks=1 -input inputdir -output outputdir -mapper "bash -c 'paste <(echo "count") <(wc -l)'" -reducer "bash -c 'cut -f2 | paste -sd+ | bc'"

每个映射器都会在它所拥有的部分上运行“wc -l”,然后一个reducer将总结所有映射器的计数。

您可以使用hadoop流式传输来解决这个问题。

这是你如何运行它:

hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming-2.6.0-cdh5.11.0.jar -input <dir> -output <dir> counter_mapper.py -reducer counter_reducery -file counter_mapper.py -file counter_reducer.py

counter_mapper.py

#!/usr/bin/env python import sys count = 0 for line in sys.stdin: count = count + 1 print count

counter_reducer.py

#!/usr/bin/env python import sys count = 0 for line in sys.stdin: count = count +int(line) print count

总结

以上是内存溢出为你收集整理的使用命令行查找hdfs分布式文件中的总行数全部内容,希望文章能够帮你解决使用命令行查找hdfs分布式文件中的总行数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存