문제

저는 Hadoop을 사용하여 프로젝트를 진행하고 있는데 기본적으로 Java를 통합하고 Python에 대한 스트리밍 지원을 제공하는 것 같습니다.둘 중 하나를 선택하면 성능에 상당한 영향이 있습니까?어느 쪽이든 상당한 성능 차이가 있는 경우 어느 쪽으로든 갈 수 있는 프로세스의 초기 단계에 있습니다.

도움이 되었습니까?

해결책

Java는 Python보다 역동적이지 않으며 VM에 더 많은 노력을 기울여 더 빠른 언어가되었습니다. Python은 또한 글로벌 통역사 잠금으로 보류됩니다. 즉, 단일 프로세스의 스레드를 다른 코어로 푸시 할 수 없습니다.

이것이 중요한 차이를 만드는지 여부는 당신이하려는 일에 달려 있습니다. 나는 두 언어가 당신에게 효과가 있다고 생각합니다.

다른 팁

파이썬을 사용하면 아마도 더 빨리 발전 할 것입니다.

Google "BenchmarksGame"모든 인기있는 언어간에 매우 정확한 속도 비교를보고 싶지만 정확하게 기억한다면 3-5 배 더 빠르게 이야기하고 있습니다.

즉, 요즘 프로세서가 묶여있는 것은 거의 없으므로 파이썬으로 더 잘 발전 할 것 같은 느낌이 들면, 그것을 가지고 있습니다!


댓글에 대한 답변으로 (Java가 파이썬보다 더 빠를 수있는 방법) :

모든 언어는 다르게 처리됩니다. Java는 C & C ++ 이후 가장 빠른 것입니다 (Java보다 빠르거나 최대 5 배 더 빠를 수 있지만 평균 2 배 더 빠른 것 같습니다). 나머지는 2-5 배+ 시간이 느려집니다. 파이썬은 Java 이후 더 빠른 것 중 하나입니다. C#이 Java만큼 빠르거나 더 빠르다고 추측하지만, 벤치 마크 게임에는 Windows에서 실행되지 않기 때문에 모노 (약간 느린) 만있었습니다.

이러한 주장의 대부분은 컴퓨터 언어 벤치 마크 게임 각 언어의/전문가들이 코드가 잘 표적화되어 있는지 확인하기 위해 특정 언어로 작성된 테스트를 조정하기 때문에 매우 공평한 경향이 있습니다.

예를 들어, 이것 Java vs C ++의 모든 테스트를 보여주고 속도 범위는 Java와 같은 범위의 3 배 더 느린 것을 볼 수 있으며 (첫 번째 열은 1과 3 사이), Java는 훨씬 더 많은 메모리를 사용합니다!

지금 이 페이지 Java vs Python (파이썬의 관점에서)을 보여줍니다. 따라서 속도는 Python이 Java보다 2 배 느려지는 것부터 174 배 느리게 느리게 이루어 지지만 Python은 일반적으로 코드 크기 및 메모리 사용에서 Java를 이깁니다.

여기서 또 다른 흥미로운 점-많은 메모리를 할당 한 테스트 인 Java는 실제로 메모리 크기에서 파이썬보다 훨씬 더 잘 수행되었습니다. 나는 Java가 VM의 오버 헤드로 인해 일반적으로 기억을 상실한다고 확신하지만, 일단 인수가 발생하면 Java는 아마도 대부분의 것보다 더 효율적 일 것입니다 (C를 제외한).

이것은 Python 3입니다. 그건 그렇고, 테스트 된 다른 Python 플랫폼 (Python이라고 함)은 훨씬 더 악화되었습니다.

당신이 정말로 알고 싶었다면 어떻게 더 빠릅니다. VM은 놀랍도록 지능적입니다. 코드를 실행 한 후 기계 언어로 컴파일하므로 코드 경로가 무엇인지 알고 최적화합니다. 메모리 할당은 예술-oo 언어로 유용합니다. VM 이외의 언어가 할 수없는 놀라운 런타임 최적화를 수행 할 수 있습니다. 강제로 꽤 작은 메모리 발자국으로 실행될 수 있으며 C/C ++와 함께 임베디드 장치를위한 선택 언어입니다.

나는 샘플링을 제외하고 거의 모든 일이 Java에서 수행 된 Agilent (고가의 O-Scope 생각)를위한 신호 분석기에서 작업했습니다. 여기에는 트레이스 (AWT)를 포함한 화면을 그리거나 컨트롤과 상호 작용하는 것이 포함됩니다.

현재 나는 모든 향후 케이블 박스를위한 프로젝트를 진행하고 있습니다. 대부분의 다른 앱과 함께 가이드는 Java로 작성됩니다.

왜 파이썬보다 빠르지 않습니까?

Hadoop 맵리듀스 변환을 "스트리밍" 또는 "사용자 정의 jar"로 작성할 수 있습니다.스트리밍을 사용하는 경우 Python 또는 C++를 포함하여 원하는 언어로 코드를 작성할 수 있습니다.귀하의 코드는 STDIN에서 읽고 STDOUT으로 출력됩니다.그러나 0.21 이전의 hadoop 버전에서는 hadoop 스트리밍이 바이너리가 아닌 텍스트만 프로세스에 스트리밍하는 데 사용되었습니다.따라서 일부 펑키한 인코딩 변환을 직접 수행하지 않는 한 파일은 텍스트 파일이어야 합니다.하지만 지금은 반점 이제 hadoop 스트리밍과 함께 바이너리 형식을 사용할 수 있는 기능이 추가되었습니다.

"사용자 정의 jar"를 사용하는 경우(예:hadoop 라이브러리를 사용하여 Java 또는 Scala로 mapreduce 코드를 작성한 다음 스트리밍 프로세스에서 바이너리를 입력 및 출력(바이너리로 직렬화)하고 결과를 디스크에 저장할 수 있는 기능에 액세스할 수 있습니다.따라서 향후 실행은 훨씬 더 빨라질 것입니다(바이너리 형식이 텍스트 형식보다 얼마나 작은지에 따라 다름).

따라서 hadoop 작업이 I/O 바인딩되는 경우 "사용자 정의 jar" 접근 방식이 더 빨라집니다(이전 포스터에서 설명한 것처럼 두 Java 모두 더 빠르고 디스크에서 읽는 것도 더 빠르기 때문입니다).

하지만 당신의 시간이 얼마나 소중한지 스스로에게 물어봐야 합니다.저는 Python을 사용하면 생산성이 훨씬 더 높아진다고 생각하며, STDIN을 읽고 STDOUT에 쓰는 map-reduce를 작성하는 것은 정말 간단합니다.그래서 저는 개인적으로 Python 경로를 추천하고 싶습니다. 바이너리 인코딩을 직접 알아내야 하는 경우에도 마찬가지입니다.hadoop 0.21은 utf8이 아닌 바이트 배열을 처리하고 Python에 사용할 수 있는 바이너리(바이트 배열) 대안이 있으므로(http://dumbotics.com/2009/02/24/hadoop-1722-and-typed-bytes/), 이는 Python 코드가 "사용자 정의 jar" Java 코드보다 약 25%만 느리다는 것을 보여줍니다. 저는 확실히 Python 경로를 택할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top