我正在处理一个数据库(2.5 GB),其中一些表只有40行,有些表有900万行数据。 当我对大表进行任何查询时,需要更多时间。 我希望在更短的时间内获得结果
表上的小查询只有90行 - >hive> select count(*) from cidade;
Time taken: 50.172 seconds
HDFS-site.xml中
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
</description>
</property>
<property>
<name>dfs.block.size</name>
<value>131072</value>
<description>Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
</description>
</property>
</configuration>
这些设置会影响配置单元的性能吗?
dfs.replication=3
dfs.block.size=131072
我可以将其从hive提示符设置为
hive>set dfs.replication=5
此值仅用于特定会话吗?
或者在.xml文件中更改它是否更好?
答案 0 :(得分:4)
重要的是select count(*)
会导致配置单元启动地图缩减工作。
您可能认为这与mysql查询非常快。
但即使是最简单的地图也会减少hadoop中的作业,总时间包括提交到作业跟踪器,将任务分配给任务跟踪器等等。所以总时间约为10秒。
在大桌子上试试select count(*)
。时间不会增加太多。
所以,你需要了解hive和hadoop处理大数据。
答案 1 :(得分:3)
dfs.replication
不应影响您的配置单元查询的运行时。它是从hdfs-site.xml公开的属性,用于确定将数据块复制到的HDFS节点数。 dfs.replication
为3意味着每个数据块在3个节点上(总共)。因此,它不适用于特定的会话。