hadoop配置单元未在aws emr上扩展

p1iqtdky  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(357)

我正在hadoop hive上做一个实验。在这个实验中,我在两个不同的硬件设置上运行相同的配置单元作业。这是在aws电子病历托管。下面是我运行的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个核心节点的系统上运行慢。然而,两者之间的差别微乎其微。我做错了什么有线索吗?如何更好地使用多台机器?

omqzjyyz

omqzjyyz1#

似乎每个输入都是一个文件。这是一种非常低效的操作hive的方法,因为它是为并行处理数据而设计的。
最佳实践是将它指向一个包含许多文件的目录,每个节点至少有一个文件,或者更好的做法是为可以在集群中运行的每个片段指定一个文件。
而且,您的输入数据非常小。hadoop和hive被设计成跨gbs甚至tbs的数据。对于hive来说,小到40MB的内存不是一个好的用例,因为在hive中,启动作业的开销可能比实际处理数据的时间要长。
如果你的数据那么小,使用传统的数据库,甚至excel电子表格!

相关问题