Hadoop配置单元未在AWS EMR上扩展

时间:2017-11-01 16:45:10

标签: amazon-web-services hadoop hive amazon emr

我在hadoop蜂巢上进行了一项实验。 在这个实验中,我在2个不同的硬件设置上运行相同的hive作业。它托管在AWS EMR中。 这是我运行的hive.sql脚本:

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;

我使用以下数据集大小运行此脚本:

laborder = 40 MB
labresult = 150 MB
labspecimen = 46 MB 

这项工作大约需要40秒。 我的期望是在具有1个主节点和2个核心节点的设置上运行它比在1个主/ 4核心节点系统上运行它慢。 然而,差异很小。我做错了什么的线索?我该怎么做才能更好地利用多台机器?

1 个答案:

答案 0 :(得分:0)

看来您的每个输入都是一个文件。这是一种非常低效的Hive操作方法,因为它旨在并行处理数据。

最佳做法是将其指向包含许多文件的目录,每个节点至少有一个文件,或者可以在群集中运行的每个切片使用更好的一个文件。

此外,您的输入数据非常小。 Hadoop和Hive旨在跨GB甚至TB数据工作。小于40 MB的东西对于Hive来说不是一个好的用例,其中启动作业的开销可能比实际处理数据花费的时间更长。

如果您的数据很小,请使用传统数据库甚至Excel电子表格!