Hadoop 配置单元无法在 AWS EMR 上扩展
Hadoop hive not scaling on AWS EMR
我正在 运行hadoop hive 上进行实验。
在这个实验中,我 运行 在 2 个不同的硬件设置上执行相同的配置单元作业。它托管在 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 master/4 个核心节点系统上执行 运行 操作要慢。
然而,差异很小。关于我做错了什么的任何线索?如何更好地利用多台机器?
您的每个输入似乎都是一个文件。这是一种非常低效的操作 Hive 的方式,因为它被设计为并行处理数据。
最佳做法是将其指向一个包含许多文件的目录,每个节点至少一个文件,或者更好的是每个切片一个文件,可以 运行 跨集群。
另外,你的输入数据很小。 Hadoop 和 Hive 旨在跨 GB 甚至 TB 的数据工作。小到 40 MB 的数据对于 Hive 来说不是一个好的用例,因为启动作业的开销可能比实际处理数据花费的时间更长。
如果您的数据那么小,请使用传统数据库甚至 Excel 电子表格!
我正在 运行hadoop hive 上进行实验。 在这个实验中,我 运行 在 2 个不同的硬件设置上执行相同的配置单元作业。它托管在 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 master/4 个核心节点系统上执行 运行 操作要慢。 然而,差异很小。关于我做错了什么的任何线索?如何更好地利用多台机器?
您的每个输入似乎都是一个文件。这是一种非常低效的操作 Hive 的方式,因为它被设计为并行处理数据。
最佳做法是将其指向一个包含许多文件的目录,每个节点至少一个文件,或者更好的是每个切片一个文件,可以 运行 跨集群。
另外,你的输入数据很小。 Hadoop 和 Hive 旨在跨 GB 甚至 TB 的数据工作。小到 40 MB 的数据对于 Hive 来说不是一个好的用例,因为启动作业的开销可能比实际处理数据花费的时间更长。
如果您的数据那么小,请使用传统数据库甚至 Excel 电子表格!