Amazon web services Hadoop hive未在AWS EMR上扩展

Amazon web services Hadoop hive未在AWS EMR上扩展,amazon-web-services,hadoop,hive,amazon,emr,Amazon Web Services,Hadoop,Hive,Amazon,Emr,我正在hadoop 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 STR

我正在hadoop 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个核心节点的系统上运行此设置要慢。
然而,两者之间的差别很小。我做错了什么,有什么线索吗?如何更好地利用多台机器?

似乎您的每个输入都是一个文件。这是一种非常低效的操作Hive的方法,因为它被设计为并行处理数据

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

而且,您的输入数据非常小。Hadoop和Hive设计用于跨GBs甚至TBs的数据。对于Hive来说,小到40 MB的内存不是一个好的用例,因为在Hive中,启动作业的开销可能比实际处理数据的时间更长


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

似乎您的每个输入都是一个文件。这是一种非常低效的操作Hive的方法,因为它被设计为并行处理数据

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

而且,您的输入数据非常小。Hadoop和Hive设计用于跨GBs甚至TBs的数据。对于Hive来说,小到40 MB的内存不是一个好的用例,因为在Hive中,启动作业的开销可能比实际处理数据的时间更长


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

做基准测试的数据量非常小。有很多可能会出现缓慢的特性,比如数据流、Jvm初始化等。hadoop块大小可能是128MB。因此,对于
labresults
数据,您最多只能获得两个并行映射任务。因此,如果使用4个内核,那么数据量将增加到1.5 GB x 400 MB x 460 MB。进行基准测试所需的数据量非常小。有很多可能会出现缓慢的特性,比如数据流、Jvm初始化等。hadoop块大小可能是128MB。因此,对于
labresults
数据,您最多只能获得两个并行映射任务。因此,如果使用4个内核,那么数据量将增加到1.5 GB x 400 MB x 460 MB。感谢您的提示。我已将数据量增加到1.5 GB x 400 MB x 460 MB。我将尝试在目录上拆分文件。谢谢提示。我已将数据量增加到1.5 GB x 400 MB x 460 MB。我将尝试在目录上拆分文件。