나는 hadoop 하이브에 대한 실험을하고 있습니다. 이 실험에서는 두 가지 하드웨어 설정에서 동일한 하이브 작업을 실행합니다. 이것은 AWS EMR에서 호스팅됩니다.Hadoop 하이브가 AWS EMR에서 스케일되지 않음
laborder = 40 MB
labresult = 150 MB
labspecimen = 46 MB
이 작업은 약 40 초 실행 : 나는 다음과 같은 데이터 세트의 크기가이 스크립트를 실행
DROP DATABASE IF EXISTS labtest;
CREATE DATABASE labtest;
CREATE TABLE IF NOT EXISTS laborder (Insertts TIMESTAMP, ordernr STRING, Patientnr STRING, visitnr STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\""
) ;
LOAD DATA INPATH '${INPUT}/laborder.csv' OVERWRITE INTO TABLE laborder;
CREATE TABLE IF NOT EXISTS labanalyse (resultaat STRING, deleted BOOLEAN, analysecodePk INT, Inserttimestamp TIMESTAMP,
specimennr STRING, uitvoeringsts TIMESTAMP
) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\""
) ;
LOAD DATA INPATH '${INPUT}/labresult.csv' OVERWRITE INTO TABLE laborder;
CREATE TABLE IF NOT EXISTS labspecimen (specimennr STRING, ordernr STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\""
) ;
LOAD DATA INPATH '${INPUT}/labspecimen.csv' OVERWRITE INTO TABLE labspecimen;
CREATE TABLE IF NOT EXISTS labanalysecode (pk INT, analysecode STRING, analysecodeversion STRING, view INT, referencevalue STRING, unit STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\""
) ;
LOAD DATA INPATH '${INPUT}/labordercodes.csv' OVERWRITE INTO TABLE labanalysecode;
SELECT * FROM laborder
INNER JOIN labspecimen ON labspecimen.ordernr = laborder.ordernr
INNER JOIN labanalyse ON labanalyse.specimennr = labspecimen.specimennr
INNER JOIN labanalysecode ON labanalysecode.pk = labanalyse.analysecodepk;
: 는 여기에 내가 실행 hive.sql 스크립트입니다. 제 생각에는 1 개의 마스터 노드와 2 개의 코어 노드를 가진 설정에서 이것을 실행하는 것이 1 개의 마스터/4 코어 노드 시스템에서 실행하는 것보다 느립니다. 그러나 차이는 거의 없습니다. 내가 잘못하고있는 것에 대한 단서가 있습니까? 여러 컴퓨터를보다 효율적으로 사용하려면 어떻게해야합니까?
벤치 마킹을 수행하는 데 필요한 데이터 양이 매우 적습니다. 느린 자연을위한 많은 가능성이있을 것입니다. JVM 초기화 등 – Achyuth
hadoop 블록 크기는 아마도 128MB입니다. 따라서'labresults' 데이터로 최대 두 개의 병렬지도 작업 만 얻을 수 있습니다. 따라서 4 코어가 활용 될 것입니다. –
데이터 양을 1.5GB x 400MB x 460MB로 늘 렸습니다. – user213979