Hadoop与HBase中遇到的问题

1. Hadoop中遇到的问题

以前所遇到的问题由于没有记录,所以忘了

(1)NameNode没有启动成功, 是由于你对HDFS多次格式化,导致datanode中与namenode中的VERSION文件中的namespaceID不一致(对于NameNode节点,该文件位于hdfs-site配置文件中dfs.name.dir参数所指定的路径下的current文件夹中, 对于DataNode节点, 该文件位于hdfs-site配置文件中dfs.data.dir参数所指定的路径下的current文件夹中.

解决方法: 第一种是把namespaceID的值改成一致,然后重启Hadoop;第二种删除dfs.name.dir与dfs.data.dir参数指定的目录,然后使用bin/hadoop namenode -formate 重新格式化,这种方法有风险, 因为会删除所有原来在HDFS上的文件.

(2)Eclipse的Run On Hadoop就是一个坑, 其根本就没运行在集群上, (可以通过job.setNumReduceTasks设置ReducerTask个数,无论你设置多少个,都只有一个,因为运行在本地,只是文件数据在集群上, 也就是说Mapper与Reducer任务都运行在本地; 还可以通过控制台信息查看到: 如果是集群上则会有这样的信息Running job: job_201405090934_0024, 如果是本地任务,则会显示Running job: job_local426339719_0001,看到没有,
中间有个local; 还可以通过web node1:50030查看任务运行情况,如果是本地任务,则不会在上面显示).

解决方法: 如果需要运行在集群上,要做三件事,如下:

//特别注意: 一定要设置,不然会报cannot read partitioner file错误
         conf.set("fs.default.name","node1:49000");
         //特别注意: 一定要设置,不然不会运行在集群上
         conf.set("mapred.job.tracker","node1:49001");
         //特别注意: 对相关类以及依赖的jar文件进行打包,这是运行在集群上必须要做的一步,不然集群找不到相关的Mapper等类文件
 		 File jarpath;
		 try {
			 jarpath = JarTools.makeJar("bin");
			 conf.set("mapred.jar", jarpath.toString());
		 } catch (Exception e) {
			 logger.error("进行jar打包出错!");
			 e.printStackTrace();
			 return;
		 }

(3) Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

在运行时,Run Configurations 在Arguments中的 VM arguments 添加-Djava.library.path=/home/hadoop/hadoop-1.2.1/lib/native/Linux-i386-32

该路径依据你的实际路径为准

2.HBase问题

(1) Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (无法定位登录配置)

22:32:56,821 WARN                    ClientCnxn:1089 - Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect

java.net.ConnectException: Connection refused

at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)

at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)

at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)

at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1068)

22:32:56,951 WARN          RecoverableZooKeeper:253 - Possibly transient ZooKeeper, quorum=localhost:2181, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid

22:32:56,952 INFO                  RetryCounter:155 - Sleeping 1000ms before retry #0...

这是因为在代码中没有Z设置ookeeper集群

//设置zookeeper集群
HBASE_CONFIG.set("hbase.zookeeper.quorum", "node2,node3,node4,node5,node6,node7,node8");

最好还设置HMaster

//设置HMatser
 HBASE_CONFIG.set("hbase.zookeeper.master","node1:60000");

(2)

JobClient:1422 - Task Id : attempt_201405081252_0008_m_000000_0, Status : FAILED

java.lang.IllegalArgumentException: Can‘t read partitions file

at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:116)

at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:62)

at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)

at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:676)

at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:756)

at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)

at org.apache.hadoop.mapred.Child$4.run(Child.java:255)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:396)

at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)

at org.apache.hadoop.mapred.Child.main(Child.java:249)

Caused by: java.io.FileNotFoundException: File /tmp/partitions_de363500-5535-466b-91bb-36472457386d does not exist.

at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:402)

at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:255)

at org.apache.hadoop.fs.FileSystem.getLength(FileSystem.java:816)

at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1479)

at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1474)

at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.readPartitions(TotalOrderPartitioner.java:301)

at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:88)

... 10 more

因为在生成HFile时使用了HFileOutputFormat与TotalOrderPartitioner(HFile对RowKey需要进行全局排序),所以需要分区文件, 但是TaskTracker找不到分区文件,要想TaskTracker读取分区文件,该文本必须存在与HDFS上, 所以需要设置一个参数:

Configuration conf = HbaseOperation.HBASE_CONFIG;
         conf.set("fs.default.name","node1:49000");

对于具体解释,还需进一步研究.

(3)Wrong number of partitions in keyset

说明你的分区文件中的分区个数不等于reducer的个数减一,即Regions的个数不等于reducer的个数减一,其实是因为你的任务运行在本地(这样只有一个Reducer),而Regions有多个,有兴趣可以查看TotalOrderPartitioner的源代码, 中间有一段代码为:

 for (int i = 0; i < splitPoints.length - 1; ++i) {
        if (comparator.compare(splitPoints[i], splitPoints[i+1]) >= 0) {
          throw new IOException("Split points are out of order");
        }
      }

HFileOutputFormat.configureIncrementalLoad(job, table);自动对job进行配置。TotalOrderPartitioner是需要先对key进行整体排序,然后划分到每个reduce中,保证每一个reducer中的的key最小最大值区间范围,是不会有交集的。因为入库到HBase的时候,作为一个整体的Region,key是绝对有序的。

暂时写到这里, 有些问题不记得了,以后遇到问题会继续更新,....

Hadoop与HBase中遇到的问题

时间: 2024-08-02 15:12:14

Hadoop与HBase中遇到的问题的相关文章

Hadoop与HBase中遇到的问题(续)java.io.IOException: Non-increasing Bloom keys异常

在使用Bulkload向HBase导入数据中, 自己编写Map与使用KeyValueSortReducer生成HFile时, 出现了下面的异常: java.io.IOException: Non-increasing Bloom keys: 201301025200000000000003520000000000000500 after 201311195100000000000000010000000000001600 at org.apache.hadoop.hbase.regionserv

什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么

什么是Zookeeper,Zookeeper的作用是什么,它与NameNode及HMaster如何协作?在没有接触Zookeeper的同学,或许会有这些疑问.这里给大家总结一下. 一.什么是Zookeeper  ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) . 蜜蜂(Hive) . 小猪(Pig)  的管理员, Apache Hbase和 Apache Solr 以及LinkedIn sensei  等项目中都采用到了 Zookeeper.ZooKeeper是一个分

ZooKeeper原理及其在Hadoop和HBase中的应用

简介 ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举.分布式锁和分布式队列等功能. 基本概念 本节将介绍ZooKeeper的几个核心概念.这些概念贯穿于之后对ZooKeeper更深入的讲解,因此有必要预先了解这些概念. 集群角色 在ZooKeeper中,有三种角色: Leader Follower Observer 一

Hadoop集群中Hbase的介绍、安装、使用

导读 HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. 一.Hbase简介 HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统:Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce

计算下微软Windows Azure HDInsight中Hadoop和HBase的成本和省钱秘籍

计算下微软Windows Azure HDInsight中Hadoop和HBase的成本和省钱秘籍 计算: 以一个最简单Hadoop集群来计算,需要两个头节点(Namenode)和两个数据节点(Datanode)以及3个Zookeeper结点,这样算下来每小时要5.44+2.72*2+0*3=10.88RMB,每天需要10.88*24=261.12RMB,每个月需要261.12*30=7833.6RMB,这是最低配置! 如果我们还需要HBase,那么最低配置7833.6+(5.44+2.72*2

HBase中此类异常解决记录org.apache.hadoop.ipc.RemoteException(java.io.IOException):

ERROR: Can't get master address from ZooKeeper; znode data == null   一定注意这只是问题的第一层表象,真的问题是: File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplica 网上很多都是叫用两种方式解决 stop/start  重启hbase 格式化 hdfs namenode -format,不能随随便便就格

Hadoop之——HBase笔记

1.HBase(NoSQL)的数据模型 1.1 表(table) 存储管理数据的. 1.2 行键(row key) 类似于MySQL中的主键. 行键是HBase表天然自带的. 1.3 列族(column family) 列的集合. HBase中列族是需要在定义表时指定的,列是在插入记录时动态增加的. HBase表中的数据,每个列族单独一个文件. 1.4 时间戳(timestamp) 列(也称作标签.修饰符)的一个属性. 行键和列确定的单元格,可以存储多个数据,每个数据含有时间戳属性,数据具有版本

Hadoop 数据库 - HBase

转自:http://blog.csdn.net/iAm333 1 什么是HBase? HBase,是Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统.使用HBase技术可以在廉价的PC服务器上搭建起大规模结构化的存储集群.它底层的文件系统使用HDFS,使用Zookeeper来管理集群的HMaster和各Region server之间的通信,监控各Region server的状态,存储各Region的入口地址等. 2. 何时用HBase? 首先想想传统的关系型

CentOS系统下Hadoop、Hbase、Zookeeper安装配置

最近两天给一个项目搭建linux下的大数据处理环境,系统是CentOS 6.3.主要是配置JDK,安装Tomcat,Hadoop.HBase和Zookeeper软件,本人在Hadoop这方面也是新手,配置这个环境遇到过许多问题,查了许多资料,这里做一个总结,以便日后回顾. 首先是账户权限的修改,安装软件环境需要上传文件和一些系统文件的修改权限,所以最好设置成root权限 权限修改方法:http://www.linuxidc.com/Linux/2012-03/55629.htm 软件的安装,网上