本帖最后由 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目录
- <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包
但是在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下兼容)
- 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.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之间进行数据同步的,特别注意,
- <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/s,hdfs-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传数据报错总结
原理:sqoop从mysql到hive表中的意思是:先把数据导入到hdfs的user/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;//只要大于1024,hive默认分配的内存分大一倍,也就是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;
复制代码
|