복붙노트

[HADOOP] 하둡 (Hadoop) 성능 - 대용량 파일 (20GB)

HADOOP

하둡 (Hadoop) 성능 - 대용량 파일 (20GB)

hdfs -put을 사용하여 20GB의 대용량 파일을 hdfs에로드합니다. 현재 프로세스는 @ 4 분 실행됩니다. hdfs로 데이터를로드하는 시간을 개선하려고합니다. 쓰기 속도를 향상시키기 위해 다른 블록 크기를 사용했지만 다음 결과를 얻었습니다.

512M blocksize = 4mins;
256M blocksize = 4mins;
128M blocksize = 4mins;
64M blocksize = 4mins;

누구든지 병목 현상이 무엇인지, 그리고 다른 cmdlet의 성능을 향상시키기 위해 탐색 할 수있는 옵션을 알고 있습니까?

해결법

  1. ==============================

    1.20GB / 4 분이 약 85MB / 초로 나옵니다. HDFS 프로토콜과 네트워크의 모든 오버 헤드로 단일 드라이브에서 기대할 수있는 매우 합리적인 처리량입니다. 그게 네 병목 일 걸세. 귀하의 섭취 과정을 변경하지 않고도, 당신은 이것을 마술처럼 빨리 만들 수 없을 것입니다.

    20GB / 4 분이 약 85MB / 초로 나옵니다. HDFS 프로토콜과 네트워크의 모든 오버 헤드로 단일 드라이브에서 기대할 수있는 매우 합리적인 처리량입니다. 그게 네 병목 일 걸세. 귀하의 섭취 과정을 변경하지 않고도, 당신은 이것을 마술처럼 빨리 만들 수 없을 것입니다.

    핵심적인 문제는 20GB는 적절한 양의 데이터이고 데이터는 HDFS에 단일 스트림으로 푸시됩니다. 디스크 I / O는 Hadoop 클러스터에 많은 수의 디스크가있어 매우 제한적입니다. 10GigE 네트워크 (및 아마도 1GigE)를 포화 상태로 유지하는 데는 시간이 있습니다.

    블록 크기를 변경해도이 동작은 변경되지 않습니다. 그것은 여전히 ​​HDFS 로의 디스크와 같은 양의 데이터입니다.

    파일을 1GB 파일로 분할하고 여러 디스크에 분산시킨 다음 병렬로 출력하십시오. 네트워크에 병목 현상이 발생하면 여러 파일로 분할하여 파일을 분할 할 수도 있습니다. 데이터를 수신하는 방식을 변경하여이를 빠르게 할 수 있습니까? 파일을 분할하고 주위를 움직이는 것도 시간이 걸릴 것입니다.

  2. ==============================

    2.설정 세부 사항에 따라 크게 달라집니다. 첫째, 4 분 동안 20GB는 80MBps입니다.

    설정 세부 사항에 따라 크게 달라집니다. 첫째, 4 분 동안 20GB는 80MBps입니다.

    병목 현상은 로컬 시스템의 하드웨어 또는 이더넷 연결 일 가능성이 큽니다. 블럭 크기를 가지고 노는 것이 의심 스럽지만 처리량이 많이 향상 될 것입니다.

    로컬 시스템의 일반적인 7200rpm 하드 드라이브의 경우 디스크 대 버퍼 전송 속도는 약 128MBps입니다. 즉, 20GB의 여유 공간이 있다고 가정 할 때 약 2:35의 메모리에 20BG 파일을로드 할 수 있습니다. 그러나 단순히 메모리에 복사하는 것이 아니라 메모리에서 네트워크 패킷으로 스트리밍하는 것이므로 이러한 작업을 처리하는 데 추가 오버 헤드가 발생할 수 있습니다.

    유선 속도에 관한 위키 피 디아 (Wikipedia) 항목도 참조하십시오. 이더넷 속도가 100Mbit / s (~ 12MB / s)로 설정됩니다. 이 경우 고속 이더넷은 특정 그룹의 이더넷 표준 용어입니다. 당신은 분명히 이것보다 더 빠른 속도를 얻고 있습니다. 유선 속도는 로컬 시스템의 모든 요소를 ​​고려하기 때문에 좋은 측정 값입니다.

    이제 로컬 시스템의 스트리밍 프로세스의 여러 단계를 살펴 보겠습니다.

    로컬 시스템에 대해 더 많이 알지 못하면 이러한 구성 요소 중 병목 현상이 무엇인지 지정할 수 없습니다. 그러나 이들은 비트율 조사를 시작할 수있는 곳입니다.

  3. ==============================

    3.당신은 distcp를 사용할 수 있습니다. hadoop distcp -Ddfs.block.size = $ [256 * 1024 * 1024] / path / to / inputdata / path / to / outputdata 병렬 복사를 수행하는 방법

    당신은 distcp를 사용할 수 있습니다. hadoop distcp -Ddfs.block.size = $ [256 * 1024 * 1024] / path / to / inputdata / path / to / outputdata 병렬 복사를 수행하는 방법

  4. from https://stackoverflow.com/questions/19570660/hadoop-put-performance-large-file-20gb by cc-by-sa and MIT license