Hive安装之后

Hive安装之后,安装Hive过程中,出现的一些问题,以及解决方法。

问题列表如下:

序号问题
1为何我配置的是MySQL存储hive元数据,但总是存储到它自带的Derby数据库里?
2为何我的Hive总是以Local模式启动,而不能将作业提交到Hadoop集群上?
3为何Hive在执行过程中,会报异常Container [pid=1436,containerID=container_1406649013279_0001_01_000005] is running beyond virtual memory limits. Current usage: 88.0 MB of 1 GB physical memory used; 4.6 GB of 2.1 GB virtual memory used. Killing container,该如何解决 ?
  


暂时就上面几个问题,下面散仙将分析并给出解决方法?

第一个问题比较简单,如果你明明配置了MySQL存储元数据,但启动过程中,并没生效,多半是因为在Hive-env.sh里面的HIVE_CONF_DIR这个路径没有配置正确。

第二个问题,总是Local模式启动,而不能提交到8088的Web界面上,多半是hadoop的配置文件里缺少了mapreduce.framework.name=yarn的属性。
解决方法有2种,第一种更改hadoop的mapred-site.xml文件,并添加如下属性,配置完后,分发各个节点,并重启生效.

<property>    
   <name>mapreduce.framework.name</name>    
   <value>yarn</value>    
  </property>    
   
<property>  
    <name>mapreduce.framework.name</name>  
    <value>yarn</value>  
   </property>




第二种方式比较简单,直接在Hive的shell里面使用SET命令,临时给mapreduce.framework.name赋值,但仅在本次会话有效:
执行命令:
SET mapreduce.framework.name=yarn;
执行完毕后可使用SET -v:命令查看变更情况。


下面来看下第三个异常,截图如下:
Hive安装之后
什么意思呢,要解决这个异常,得熟悉yarn自身的虚拟内存管理规则,在Yarn平台中,CPU,内存,磁盘都被抽象成资源来自使用,管理资源的角色主要有Yarn Resource Manager (RM) 负责总的资源调度,然后每个节点上有Nodemanager 来监听守护资源,在具体到每一个应用上是通过Application Master (AM) container来给Map或Reduce任务来分配资源,具体的属性如下:
(1)yarn.nodemanager.resource.memory-mb
可分配的物理内存总量,默认是8*1024MB。
(2)yarn.nodemanager.vmem-pmem-ratio
每单位的物理内存总量对应的虚拟内存量,默认是2.1,表示每使用1MB的物理内存,最多可以使用2.1MB的虚拟内存总量。

第二个属性,比率的控制影响着虚拟内存的使用,当yarn计算出来的虚拟内存,比在mapred-site.xml里的mapreduce.map.memory.mb或mapreduce.reduce.memory.mb的2.1倍还要多时,就会发生上面截图中的异常,而默认的mapreduce.map.memory.mb或
mapreduce.reduce.memory.mb得初始大小为1024M,然后根据异常中的yarn自身根据运行环境推算出来的虚拟内存来做比较,发现比1024*2.1还要大,所以就会由NodeManage守护进程kill掉AM容器,从而导致整个MR作业运行失败,现在我们只需要调大这个比率即可,避免发生这种异常。具体调大多小,可根据具体情况来设置。

相关推荐