首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Hadoop中提供了balancer的机制,解决小弟我的hive统计group有关问题

2012-06-27 
Hadoop中提供了balancer的机制,解决我的hive统计group问题如果是select * from saleslog where `date`20

Hadoop中提供了balancer的机制,解决我的hive统计group问题
如果是select * from saleslog where `date`='2012-02-29' limit 5;这句是可以吐出五条数据的。
但是如下却出错了。。
hive> select goods_name,count(1) from saleslog where `date`='2012-02-29' group by goods_name;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Defaulting to jobconf value of: 5
In order to change the average load for a reducer (in bytes):
? set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
? set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
? set mapred.reduce.tasks=<number>
Starting Job = job_201203160945_0233, Tracking URL = http://mh-s002a.hadoop:50030/jobdetails.jsp?jobid=job_201203160945_0233
Kill Command = /opt/hadoop/bin/hadoop job -Dmapred.job.tracker=mh-s002a.hadoop:9001 -kill job_201203160945_0233
2012-03-26 14:41:36,470 Stage-1 map = 0%, reduce = 0%
2012-03-26 14:41:40,494 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201203160945_0233 with errors
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask
因为数据节点的磁盘大小相差比较大..有的只有50G?.有的有200多G??集群运行了一段时间..?50G的被塞满了.?在跑?HIVE任务的时候.需要临时空间..?分配不到?所以上午那个就报错了..??
后来我运行?/opt/hadoop/bin/hadoop?balancer?-threshold?20???进行一个?磁盘空间的平衡..现在?跑HIVE应该就不会报错了


Rebalance程序作为一个独立的进程与name node进行分开执行。

1 Rebalance Server从Name Node中获取所有的Data Node情况:每一个Data Node磁盘使用情况。

2 Rebalance Server计算哪些机器需要将数据移动,哪些机器可以接受移动的数据。并且从Name Node中获取需要移动的数据分布情况。

3 Rebalance Server计算出来可以将哪一台机器的block移动到另一台机器中去。

4,5,6 需要移动block的机器将数据移动的目的机器上去,同时删除自己机器上的block数据。

7? Rebalance Server获取到本次数据移动的执行结果,并继续执行这个过程,一直没有数据可以移动或者HDFS集群以及达到了平衡的标准为止。

Hadoop现有的这种Balancer程序工作的方式在绝大多数情况中都是非常适合的。

现在我们设想这样一种情况:

1 数据是3份备份。

2 HDFS由2个rack组成。

3 2个rack中的机器磁盘配置不同,第一个rack中每一台机器的磁盘空间为1TB,第二个rack中每一台机器的磁盘空间为10TB。

4 现在大多数数据的2份备份都存储在第一个rack中。

在这样的一种情况下,HDFS级群中的数据肯定是不平衡的。现在我们运行Balancer程序,但是会发现运行结束以后,整个HDFS集群中的数据依旧不平衡:rack1中的磁盘剩余空间远远小于rack2。

这是因为Balance程序的开发原则1导致的。

简单的说,就是在执行Balancer程序的时候,不会将数据中一个rack移动到另一个rack中,所以就导致了Balancer程序永远无法平衡HDFS集群的情况。

针对于这种情况,可以采取2中方案:

1 继续使用现有的Balancer程序,但是修改rack中的机器分布。将磁盘空间小的机器分叉到不同的rack中去。

2 修改Balancer程序,允许改变每一个rack中所具备的block数量,将磁盘空间告急的rack中存放的block数量减少,或者将其移动到其他磁盘空间富余的rack中去。

更多关于Hadoop的文章,可以参考:http://www.cnblogs.com/gpcuster/tag/Hadoop/

热点排行