[HADOOP] 명령 줄을 사용하여 hdfs 분산 파일에서 총 줄 수 찾기
HADOOP명령 줄을 사용하여 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|
그래서, 원래 데이터 파일 데이터의 총 라인 수를 세고 싶습니다. Part-00000, part-00001 등의 분산 된 덩어리가 겹쳐 있다는 것을 이해합니다. 따라서 part-xxxx 파일의 줄 수를 계산하고 합하면 작동하지 않습니다. 또한 원본 데이터 세트의 데이터 크기는 ~ 70GB입니다. 총 줄 수를 효율적으로 찾는 방법은 무엇입니까?
해결법
-
==============================
1.보다 효율적으로 - 스파크를 사용하여 아니오를 계산할 수 있습니다. 줄의. 다음 코드 스 니펫은 행 수를 계산하는 데 도움이됩니다.
보다 효율적으로 - 스파크를 사용하여 아니오를 계산할 수 있습니다. 줄의. 다음 코드 스 니펫은 행 수를 계산하는 데 도움이됩니다.
text_file = spark.textFile("hdfs://...") count = text_file.count(); count.dump();
아니오의 수를 표시합니다. 줄의.
참고 : 서로 다른 부품 파일의 데이터는 겹치지 않습니다.
hdfs 사용 dfs -cat / bdatest / clm / data / part- * | wc -l은 출력을 제공하지만 모든 데이터를 로컬 시스템으로 덤프하고 더 오랜 시간이 걸립니다.
가장 좋은 해결책은 MapReduce 또는 스파크를 사용하는 것입니다. MapReduce는 개발 및 실행에 더 많은 시간이 소요됩니다. 스파크가 설치되어있는 경우 이것이 최고의 선택입니다.
-
==============================
2.데이터의 행 수를 찾아야하는 경우 다음 명령을 사용할 수 있습니다.
데이터의 행 수를 찾아야하는 경우 다음 명령을 사용할 수 있습니다.
hdfs dfs -cat /bdatest/clm/data/part-* | wc -l
또한 입력을 출력으로내는 신원 매퍼로 간단한 mapreduce 프로그램을 작성할 수 있습니다. 그런 다음 카운터를 확인하고 매퍼에 대한 입력 레코드를 찾습니다. 데이터의 줄 수입니다.
-
==============================
3.하둡 원 라이너 :
하둡 원 라이너 :
hadoop fs -cat /bdatest/clm/data/part-* | wc -l
출처 : http://www.sasanalysis.com/2014/04/10-popular-linux-commands-for-hadoop.html
또 다른 방법은 매퍼가 각 줄마다 1을 내고 감속기가 값을 합산하는지도 축소 작업을 만드는 것입니다. 솔루션에 대한 레코드 수 계산을위한 MApreduce 코드 작성의 대답을 참조하십시오.
-
==============================
4.JSON 또는 로그 항목을 상상해 보면 거의 동일한 파일 내용을 가진 매우 큰 파일을 가지고 있고 정밀도에 신경 쓰지 않으면 계산할 수 있습니다.
JSON 또는 로그 항목을 상상해 보면 거의 동일한 파일 내용을 가진 매우 큰 파일을 가지고 있고 정밀도에 신경 쓰지 않으면 계산할 수 있습니다.
예 : 원시 JSON을 파일에 저장합니다.
파일 크기 : 750Mo 첫 줄의 크기 : 752 자 (==> 752 옥텟)
선 => 약 1.020.091
러닝 캐너 | wc -l은 1.018.932를 준다.
나쁘지 않아. ^^
-
==============================
5.이것은 "wc -l"명령을 수행하는 하나의 기계로 모든 컨텐츠를 스트리밍하지 않도록하기 위해 fs에 서브 명령 (예 : hadoop fs -wc -l inputdir)이있는 것이 바람직한 일반적인 작업입니다.
이것은 "wc -l"명령을 수행하는 하나의 기계로 모든 컨텐츠를 스트리밍하지 않도록하기 위해 fs에 서브 명령 (예 : hadoop fs -wc -l inputdir)이있는 것이 바람직한 일반적인 작업입니다.
효율적으로 라인을 계산하기 위해 다음과 같이 hadoop 스트리밍 및 유닉스 명령어를 사용합니다.
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"을 실행 한 다음 단일 감속기가 모든 매퍼의 수를 합산합니다.
-
==============================
6.이 문제에 대해 hadoop 스트리밍을 사용할 수 있습니다.
이 문제에 대해 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
from https://stackoverflow.com/questions/32079372/finding-total-number-of-lines-in-hdfs-distributed-file-using-command-line by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hive (JSON 파일)를 사용하여 Hbase에 데이터 삽입 (0) | 2019.06.10 |
---|---|
[HADOOP] 하이브 문자열에서 중복을 제거하는 방법? (0) | 2019.06.10 |
[HADOOP] Mac OS에서 hadoop 실행 (0) | 2019.06.10 |
[HADOOP] Spark Streaming에서 출력 파일 이름 변경 (0) | 2019.06.10 |
[HADOOP] Spark - 스파크 작업에 얼마나 많은 집행자와 코어가 할당되어 있습니까? (0) | 2019.06.09 |