分享

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

xioaxu790 2014-11-3 20:48:02 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 20306
本帖最后由 howtodown 于 2014-11-3 21:02 编辑
问题导读
1.hadoop2.2.0的无法启动可能的原因是什么?
2.配置hbase自带的zookeeper管理集群的时候,节点数如果不为奇数,会产生什么问题?







一、 hadoop2.2.0的安装启动错误总结
关于hadoop在启动时datanode无法启动问题
1.core-site.xml文件中没有配置从节点

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

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

4.因为多次formate namenode造成namenode和datanode的clusterID不一致
解决方案: 删除所有节点/home/hadoop/hadoop-2.2.0/dfs/data/下 curren目录
  1. <name>hadoop.tmp.dir</name>   
  2.      <value>file:/usr/local/hadoop-2.2.0/temp</value>
复制代码

删除该路径下的文件,在重新启动
关于hadoop在启动时namenode无法启动问题( 系统时间要保持一致 )

报错:
  1. java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
复制代码

解决方案:添加slf4j-api-1.7.5.jar
启动信息报错
  1.       Failed to load class “org.slf4j.impl.StaticLoggerBinder”
复制代码

官网解决方案:删除hadoop/lib/下的slf4j-log4j12-1.7.5jar包
     但是在Hbase和hive启动的时候要去hadoop读取信息是使用这个jar包,所以就在Hbase和hive中添加这2个jar包就解决了


二、 hadoop+hive+hbase组件的整合问题总结
1.Hadoop-2.2.0+hbase-0.96.2+hive-0.12.0 启动没有问题,但是在hive查询hbase中的数据的时候出错,版本不兼容。(CentOS 6.5) (Ubuntu下兼容)
  1. Failed with exception java.io.IOException:java.lang.ClassCastException:
  2.      org.apache.hadoop.hbase.client.Result cannot be cast to
  3.      org.apache.hadoop.io.Writable
复制代码


2.Hbase-0.98.2和Hive-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. 验证hive与hbase连接通信(如果没有配置hive.aux.jars.path)
这个包是关键hive与hbase通信,是基于hadoop2.2.0编译出来的 ,
这个包是启动hive依赖mysql连接的驱动包
  hive -hiveconf hbase.zookeeper.quorum=node1通过,
  hive映射hbase表结构通过

6.如果是在hive与hbase之间进行数据同步的,特别注意,
  1. <property>
  2.   <name>hive.aux.jars.path</name>
  3. <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>
  4. </property>
复制代码


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

7,配置hbase自带的zookeeper管理集群的时候,要注意,节点一定要奇数个才行,
不然在hbase启动的时候不报错,但是在执行hbase shell的时候在初始化zookeeper,
选举不出HRS,hbase就会挂掉,


8. hive报错
  1. hive> show tables;
  2. FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
  3. hive -hiveconf hive.root.logger=DEBUG,console
复制代码


解决将hive.site.xml文件中的
  1. <property>
  2.   <name>hive.metastore.schema.verification</name>
  3.   <value>true</value>
  4.    <description>
  5.    </description>
  6. </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节点执行
  1. scp  /root/.ssh/authorized_keys   node1:/root/.ssh
复制代码


会把每天机器上的公钥都会复制给node节点,这样node节点就可以通信
错误调试
  1. WARNING: POSSIBLE DNS SPOOFING DETECTED
复制代码

与SSH服务器无关,只需把.ssh目录下的文件删除即可。下次使用ssh时文件会重建的。
出现这问题的原因一般是同一主机使用了不同的用户名登陆。(如果多个域名和多个IP同时指向同一主机,ssh仍然视为不同主机。
rm known_hosts然后在ssh一次就好了
遗留问题解决(如果是有100个节点怎么操作呢?解决 )

10. 设置hostname
  1. vi /etc/sysconfig/network
  2. 把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/s,hdfs-site.xml
  1. <property>
  2. <name>dfs.balance.bandwidthPerSec</name>
  3. <value>1048576</value>
  4. </property>
复制代码



设置本地节点的的物理磁盘预留空间,默认是1024(1KB)
  1.   <property>
  2.   <name>dfs.datanode.du.reserved</name>
  3.   <value>1024</value>
  4. </property>
复制代码



设置hadoop2.2.0的调度器 (选用计算能力调度器效率较快)
默认的调度器FIFO它先按照作业的优先级高低,再按照到达时间的先后选择被执行
计算能力调度器Capacity Scheduler
公平调度器Fair Scheduler
  1.   <property>
  2.   <name>yarn.resourcemanager.scheduler.class</name>
  3. <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduer</value>
  4.   </property>
复制代码



五.利用sqoop  mysql—>hive传数据报错总结
   原理:sqoop从mysql到hive表中的意思是:先把数据导入到hdfs的user/root/目录下,然后在从hdfs移到hive表中,等数据移完,就从root目录下,删除文件,释放空间
注意事项:
       利用sqoop从 211.99.11.52 mysql中同步到hive中,但是会在home/devuser(当前用户的路径下回生成.java文件 )需定时的删除
报错一:
  1.     org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory device_info_tab already exists
复制代码


解决方案:
  1. hadoop dfs -rmr device_info_tab;
  2.    hdfs://www.hadoop.node.slave.c:11000/user/dev/device_info_tab、
复制代码


Hadoop异常问题
  1. 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.
复制代码


    异常的处理方案是  
  1. set mapreduce.map.memory.mb=1025;//只要大于1024,hive默认分配的内存分大一倍,也就是2048M
  2. set mapreduce.reduce.memory.mb=1025;
复制代码



解决方案:
  1. set mapred.compress.map.output=true;
  2. set mapred.output.compression.type=BLOCK;
  3. set mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
复制代码




已有(3)人评论

跳转到指定楼层
anyhuayong 发表于 2014-11-4 08:37:44
不错的总结,楼主辛苦
回复

使用道具 举报

loreting 发表于 2014-11-4 14:36:39
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

absolutely 发表于 2016-8-5 11:28:02
楼主,可不可以写一份hive与hbase集成的?我是hbase0.98,hive1.0.1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条