[HADOOP] Hadoop에서 다양한 언어를 사용하여 직업을 운영하는 것에 대한 장단점은 무엇입니까?
HADOOPHadoop에서 다양한 언어를 사용하여 직업을 운영하는 것에 대한 장단점은 무엇입니까?
필자는 지금까지 Hadoop 클러스터에 대해 작업을 실행하기 위해 Map Reduce를 위해 Pig 또는 Java를 사용했습니다. 최근에 Hadoop 스트리밍을 통해 Python Map Reduce를 사용해 보았습니다. 이것들 모두는 나에게 의미가 있지만, 하나의 구현을 사용하고자 할 때는 약간 흐리다. 다른. Java map reduce, 필자는 속도가 필요할 때 기본적으로 독점적으로 사용하고 있었지만, PIG / Hive의 줄이기 쉽고 이해하기 쉬운 줄에 똑같은 것을 쓰지 않고 파이썬 스트리밍과 같은 것을 사용하고 싶었던 적이 있습니까? 간단히 말해, 각각에 대한 장단점은 무엇입니까?
해결법
-
==============================
1.나는 Java vs Python과 관련이있을 것입니다. 그리고 나서 MR 대 Hive / Pig와 별도로 관련 될 것입니다. Hadoop은 Java 및 Java API를 통해 사용할 수있는 많은 기능을 기반으로하며 Hadoop은 대부분 Java 클래스를 사용하여 확장 할 수 있습니다. Hadoop do는 다른 언어로 작성된 MR 작업을 처리 할 수있는 기능을 제공합니다.이를 스트리밍이라고합니다. 이 모델은 java에없는 몇 가지 제한 사항으로 매퍼 (mapper)와 감속기 (reducer)를 정의 할 수 있습니다. 같은 시간에 - 입력 / 출력 형식 및 기타 플러그인은 자바 클래스로 작성해야합니다. 그래서 나는 의사 결정을 다음과 같이 정의 할 것이다 : a) 심각한 코드베이스를 가지고 있지 않으면 MR을 사용하여 Java를 사용하십시오. b) 간단한 임시 작업을 만들 필요가있을 때 python을 사용하는 것을 고려하십시오.
나는 Java vs Python과 관련이있을 것입니다. 그리고 나서 MR 대 Hive / Pig와 별도로 관련 될 것입니다. Hadoop은 Java 및 Java API를 통해 사용할 수있는 많은 기능을 기반으로하며 Hadoop은 대부분 Java 클래스를 사용하여 확장 할 수 있습니다. Hadoop do는 다른 언어로 작성된 MR 작업을 처리 할 수있는 기능을 제공합니다.이를 스트리밍이라고합니다. 이 모델은 java에없는 몇 가지 제한 사항으로 매퍼 (mapper)와 감속기 (reducer)를 정의 할 수 있습니다. 같은 시간에 - 입력 / 출력 형식 및 기타 플러그인은 자바 클래스로 작성해야합니다. 그래서 나는 의사 결정을 다음과 같이 정의 할 것이다 : a) 심각한 코드베이스를 가지고 있지 않으면 MR을 사용하여 Java를 사용하십시오. b) 간단한 임시 작업을 만들 필요가있을 때 python을 사용하는 것을 고려하십시오.
돼지 / 하이브에 대해서도 높은 수준의 자바 중심 시스템입니다. Hive는 프로그래밍없이 사용할 수 있지만 java를 사용하여 확장 할 수 있습니다. 돼지는 처음부터 자바가 필요합니다. 나는이 시스템이 appliaed 될 수있는 경우 MR 작업에 거의 항상 선호한다고 생각합니다. 대개 처리중인 SQL과 같은 경우입니다.
스트리밍과 원시 Java 간 성능 고려 사항. 스트리밍은 입력 스트림을 통해 매퍼에 피드를 제공합니다. Java의 경우 레코드 판독기와 매퍼 사이에서 진행중인 데이터 전달이 본질적으로 덜 효율적 인 프로세스 간 통신입니다. 위에서 결론을 내릴 수 있습니다. a) 일부 가벼운 처리 (하위 문자열 찾기, 계산 ...)의 경우이 오버 헤드가 significan 될 수 있으며 자바 솔루션이 더 효율적입니다. b) 약간의 과도한 프로세싱의 경우, 자바가 아닌 언어로 좀 더 효율적으로 구현 될 수 있습니다 - 스트리밍 기반 솔루션은 약간의 이점을 가질 수 있습니다.
돼지 / 하이브 성능 고려 사항. Pig / Hive는 모두 SQL 처리의 기본 요소를 구현합니다. 즉, RDBMS 환경에서 실행 계획의 요소를 구현합니다. 이러한 구현은 훌륭하고 잘 조정되어 있습니다. 같은 시간 하이브 (내가 잘 아는 것)는 통역사입니다. 코드 생성을하지 않습니다. 미리 작성된 MR 작업 내에서 실행 계획을 해석합니다. 컴파일러와 인터페이서의 성능 이점을 나타내는 하이브보다 훨씬 더 잘할 수있는 기회가 있습니다.
-
==============================
2.Java 대 돼지에 관해서 - 나는 대부분의 경우 (Java UDF와 함께) 돼지를 사용하여 융통성을 부여하고 다른 사람 (돼지)에게지도와 축소, 결합 자 등에 작업을 분할하는 가장 좋은 방법을 알려주도록했습니다.
Java 대 돼지에 관해서 - 나는 대부분의 경우 (Java UDF와 함께) 돼지를 사용하여 융통성을 부여하고 다른 사람 (돼지)에게지도와 축소, 결합 자 등에 작업을 분할하는 가장 좋은 방법을 알려주도록했습니다.
작업의 모든 측면을 절대적으로 제어하고자 할 때 Java를 사용합니다.
파이썬 (또는 다른 언어)의 사용에 관해서는 개발자들이 이러한 다른 언어에 더 익숙하다면 사용하는 것이 겠지요. 돼지와 스트리밍을 믹스 할 수도 있습니다.
-
==============================
3.스칼라에는 작업에 훨씬 간단한 코드를 작성할 수 있습니다. 예를 들어 다음을 확인하십시오. https://github.com/NICTA/scoobi
스칼라에는 작업에 훨씬 간단한 코드를 작성할 수 있습니다. 예를 들어 다음을 확인하십시오. https://github.com/NICTA/scoobi
더 많은 메모리 또는 CPU를 사용하는 작업에 C ++을 사용하려는 동기를 부여 할 수 있습니다. Hypertable이 C ++ 결정에 대해 쓴 내용을 읽을 수 있습니다. http://code.google.com/p/hypertable/wiki/WhyWeChoseCppOverJava
직렬화 측면에서 Java는 또한 입력 스트림에서 읽는 모든 객체에 대해 Object를 생성하기 때문에 문제가됩니다. Java 구현이 있기 때문에 Java 직렬화를 사용하지 않도록주의해야합니다.
from https://stackoverflow.com/questions/9569009/what-are-the-pros-and-cons-of-running-a-job-in-hadoop-using-various-languages by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Cassandra 및 MapReduce - 최소 설치 요구 사항 (0) | 2019.07.10 |
---|---|
[HADOOP] Hadoop에서 String 객체를 IntWritable 객체로 변환하는 방법 (0) | 2019.07.10 |
[HADOOP] 잘못된 키 클래스 : 텍스트가 IntWritable이 아닙니다. (0) | 2019.07.10 |
[HADOOP] 출력을 hdfs에 저장하지 않고 mapper-reducer의 출력을 다른 mapper-reducer로 직접 보내는 방법 (0) | 2019.07.10 |
[HADOOP] Sqoop을 사용하여 MySQL에서 하이브로 데이터 가져 오기 (0) | 2019.07.10 |