首页 > 代码库 > hadoop2 hive0.13.0 hbase 0.98.2版本集成错误总结

hadoop2 hive0.13.0 hbase 0.98.2版本集成错误总结

一、 hadoop2.2.0的安装启动错误总结 

关于hadoop在启动时datanode无法启动问题

1.core-site.xml文件中没有配置从节点

2.slave配置文件中没有添加从节点

3.所有节点的host链表不统一或有错位

4.因为多次formate namenode造成namenodedatanodeclusterID不一致

解决方案删除所有节点/home/hadoop/hadoop-2.2.0/dfs/data/下 curren目录 

<name>hadoop.tmp.dir</name>    

     <value>file:/usr/local/hadoop-2.2.0/temp</value>

          删除该路径下的文件,在重新启动

关于hadoop在启动时namenode无法启动问题( 系统时间要保持一致 )

报错:java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

解决方案:添加slf4j-api-1.7.5.jar

  启动信息报错

      Failed to load class “org.slf4j.impl.StaticLoggerBinder”

官网解决方案:删除hadoop/lib/下的slf4j-log4j12-1.7.5jar

     但是在Hbasehive启动的时候要去hadoop读取信息是使用这个jar包,所以就在Hbasehive中添加这2jar包就解决了

二、 hadoop+hive+hbase组件的整合问题总结 

1.Hadoop-2.2.0+hbase-0.96.2+hive-0.12.0 启动没有问题,但是在hive查询hbase中的数据的时候出错,版本不兼容。(CentOS 6.5) (Ubuntu下兼容)

Failed with exception java.io.IOException:java.lang.ClassCastException: 

     org.apache.hadoop.hbase.client.Result cannot be cast to 

     org.apache.hadoop.io.Writable

    2.Hbase-0.98.2Hive-0.13.0都是基于hadoop2升级的,(至今为止最新匹配版本)尽管这样,还得在maven3下编译Hive-0.13.0,才可以使用。

3.Hadoop-2.2.0+hbase-0.96.2+hive-0.13.0 测试通过,暂时没发现问题。

4.推荐版本匹配hadoop-2.x.0+hive-0.13.x+hbase-0.96.x

5. 验证hivehbase连接通信(如果没有配置hive.aux.jars.path

这个包是关键hivehbase通信,是基于hadoop2.2.0编译出来的 ,

这个包是启动hive依赖mysql连接的驱动包

  hive -hiveconf hbase.zookeeper.quorum=node1通过,

  hive映射hbase结构通过

 

6.如果是在hive与hbase之间进行数据同步的,特别注意,

 <property>

  <name>hive.aux.jars.path</name>

<value>file:///usr/local/hive-0.13.0/lib/hive-hbase-handler-0.13.1.jar,file:///usr/local/hive-0.13.0/lib/protobuf-java-2.5.0.jar,file:///usr/local/hive-0.13.0/lib/hbase-client-0.96.2-hadoop2.jar,file:///usr/local/hive-0.13.0/lib/hbase-common-0.96.2-hadoop2.jar,file:///usr/local/hive-0.13.0/lib/hbase-common-0.96.2-hadoop2-tests.jar,file:///usr/local/hive-0.13.0/lib/hbase-protocol-0.96.2-hadoop2,file:///usr/local/hive-0.13.0/lib/hbase-server-0.96.2-hadoop2,file:///usr/local/hive-0.13.0/lib/htrace-core-2.04,file:///usr/local/hive-0.13.0/lib/zookeeper-3.4.5.jar,file:///usr/local/hive-0.13.0/lib/guava-12.0.1.jar</value>

</property>

6.每个组件所支持的jar包不同,即使jar包版本相同,但是在不同的环境下编译还是会有版本兼容问题,所以要把jar包统一放在各个组件下进行编译。

7,配置hbase自带的zookeeper管理集群的时候,要注意,节点一定要奇数个才行,

 不然在hbase启动的时候不报错,但是在执行hbase shell的时候在初始化zookeeper

 选举不出HRS,hbase就会挂掉,

8. hive报错

hive> show tables;

FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

hive -hiveconf hive.root.logger=DEBUG,console

解决将hive.site.xml文件中的

<property>

  <name>hive.metastore.schema.verification</name>

  <value>true</value>

   <description>

   </description>

</property>

改为false

9.SSH通信总结:

 

先执行ssh-keygen -t rsa,产生密钥,文件位于root/.ssh/文件夹中,然后执行cp   ~/.ssh/id_rsa.pub   ~/.ssh/authorized_keys 进行授权(其实是将本机产生的密钥放置公钥文件中)

然后将本机的公钥文件复制给master,执行命令ssh-copy-id -i master,也就是master统一管理各个节点的公钥.

最后master节点执行 scp  /root/.ssh/authorized_keys   node1:/root/.ssh

会把每天机器上的公钥都会复制给node节点,这样node节点就可以通信

错误调试

WARNING: POSSIBLE DNS SPOOFING DETECTED

SSH服务器无关,只需把.ssh目录下的文件删除即可。下次使用ssh时文件会重建的。

出现这问题的原因一般是同一主机使用了不同的用户名登陆。(如果多个域名和多个IP同时指向同一主机,ssh仍然视为不同主机。

rm known_hosts然后在ssh一次就好了

遗留问题解决(如果是有100节点怎么操作呢?解决 )

10. 设置hostname

vi /etc/sysconfig/network

hostname改为node

验证:重启linux

     或者:hostname 主机名(这样设置是hostname临时有效,重启后失效 )最好是执行以

下source /etc/profile

三、 关于hadoop2.2.0+hive0.13.x+hbase+0.96.2部分配置文件的修改说明

1. hadoop2.2.0

设置平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长

设置balance的带宽,默认只有1M/shdfs-site.xml

<property>

<name>dfs.balance.bandwidthPerSec</name>

<value>1048576</value>

</property>

设置本地节点的的物理磁盘预留空间,默认1024(1KB)

  <property>

  <name>dfs.datanode.du.reserved</name>

  <value>1024</value>

</property>

设置hadoop2.2.0的调度器 (选用计算能力调度器效率较快)

默认的调度器FIFO它先按照作业的优先级高低,再按照到达时间的先后选择被执行

计算能力调度器Capacity Scheduler

公平调度器Fair Scheduler

  <property>

  <name>yarn.resourcemanager.scheduler.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduer</value>

  </property>

五.利用sqoop  mysql—>hive传数据报错总结

   原理:sqoopmysqlhive表中的意思是:先把数据导入到hdfsuser/root/目录下,然后在从hdfs移到hive表中,等数据移完,就从root目录下,删除文件,释放空间

注意事项:

       利用sqoop从 211.99.11.52 mysql中同步到hive,但是会在home/devuser(当前用户的路径下回生成.java文件 )需定时的删除

报错一:

    org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory device_info_tab already exists

解决方案:

 hadoop dfs -rmr device_info_tab;

   hdfs://www.hadoop.node.slave.c:11000/user/dev/device_info_tab、

 Hadoop异常问题

is running beyond physical memory limits. Current usage: 1.1 GB of 1 GB physical memory used; 1.7 GB of 2.1 GB virtual memory used. Killing container.    异常的处理方案是  

set mapreduce.map.memory.mb=1025;//只要大于1024hive默认分配的内存分大一倍,也就是2048M

set mapreduce.reduce.memory.mb=1025;

 

解决方案:

set mapred.compress.map.output=true;

set mapred.output.compression.type=BLOCK;

set mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;