我的目标是使用配置单元执行选择查询
当我在一台机器(namenode)上有一个小数据时,我首先:1-创建一个包含此数据的表:create table table1(int col1,string col2)2-从文件路径加载数据:将data local inpath'path'加载到table table1中;3-执行我的选择查询:从表1中选择*其中col1>0
我有大量的数据,一千万行,不适合一台机器。假设hadoop将我的数据划分为10个datanode,每个datanode包含100万行。
由于其巨大的体积,将数据检索到一台计算机是不可能的,或者在可能的情况下需要花费大量的时间。
是在每个datanode创建一个表并执行select查询,还是将所有数据移动到一个位置(datanode)并创建一个表(效率低下)
2条答案
按热度按时间8e2ybdfx1#
查询
只是Map边的工作。因此,数据块在每个节点上进行本地处理。不需要集中收集数据。
2exbekwf2#
好的,我将介绍一下当您将数据加载到hive中时会发生什么。
1000万行文件将被剪切成64mb/128mb的块。hadoop(而不是hive)将把块分发给集群上的不同从属节点。这些块将被复制多次。默认值为3。
每个从属节点将包含构成原始文件的不同块,但没有任何计算机将包含每个块。但是,由于hadoop复制这些块,因此集群上必须至少有足够的空间来容纳3倍的文件大小。
当数据在集群中时,配置单元将把表投影到数据上。查询将在hadoop选择用来处理构成文件的块的机器上运行。
不过,1000万排也没那么大。除非表有100列,否则无论如何都可以。但是,如果要在查询中执行select*,请记住所有数据都需要发送到运行查询的机器。这可能需要很长时间,具体取决于文件大小。
我希望我回答了你的问题。如果没有请让我知道,我会尽力帮助进一步。