Ⅰ 如何使用Eclipse构建HBase开发环境
使用Eclipse构建HBase开发环境方法步骤:1:从HBase集群中复制一份Hbase部署文件,放置在开发端某一目录下(如在/app/hadoop/hbase096目录下)。2:在eclipse里新建一个java项目HBase,然后选择项目属性,在Libraries->Add External JARs…,然后选择/app/hadoop/hbase096/lib下相关的JAR包,如果只是测试用的话,就简单一点,将所有的JAR选上。3:在项目HBase下增加一个文件夹conf,将Hbase集群的配置文件hbase-site.xml复制到该目录,然后选择项目属性在Libraries->Add Class Folder,将刚刚增加的conf目录选上。4:在迟羡猛HBase项目中增加一个chapter12的package,然后增加一个HBaseTestCase的class,然后将《Hadoop实战第2版》12章的代码复制进去,做适当的修改,代码如下:package chapter12;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.client.Get;import org.apache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.HTable;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.client.Result;import org.apache.hadoop.hbase.client.ResultScanner;import org.apache.hadoop.hbase.client.Scan;import org.apache.hadoop.hbase.util.Bytes;public class HBaseTestCase {//声明静态配置 HBaseConfigurationstatic Configuration cfg=HBaseConfiguration.create();//码桥创建一张表,通过HBaseAdmin HTableDescriptor来创建public static void creat(String tablename,String columnFamily) throws Exception {HBaseAdmin admin = new HBaseAdmin(cfg);if (admin.tableExists(tablename)) {System.out.println("table Exists!");System.exit(0);}else{HTableDescriptor tableDesc = new HTableDescriptor(tablename);tableDesc.addFamily(new HColumnDescriptor(columnFamily));admin.createTable(tableDesc);System.out.println("create table success!");}}//添加一条数据,通过HTable Put为已经存在的表来添加派谈数据public static void put(String tablename,String row, String columnFamily,String column,String data) throws Exception {HTable table = new HTable(cfg, tablename);Put p1=new Put(Bytes.toBytes(row));p1.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(data));table.put(p1);System.out.println("put '"+row+"','"+columnFamily+":"+column+"','"+data+"'");}public static void get(String tablename,String row) throws IOException{HTable table=new HTable(cfg,tablename);Get g=new Get(Bytes.toBytes(row));Result result=table.get(g);System.out.println("Get: "+result);}//显示所有数据,通过HTable Scan来获取已有表的信息public static void scan(String tablename) throws Exception{HTable table = new HTable(cfg, tablename);Scan s = new Scan();ResultScanner rs = table.getScanner(s);for(Result r:rs){System.out.println("Scan: "+r);}}public static boolean delete(String tablename) throws IOException{HBaseAdmin admin=new HBaseAdmin(cfg);if(admin.tableExists(tablename)){try{admin.disableTable(tablename);admin.deleteTable(tablename);}catch(Exception ex){ex.printStackTrace();return false;}}return true;}public static void main (String [] agrs) {String tablename="hbase_tb";String columnFamily="cf";try {HBaseTestCase.creat(tablename, columnFamily);HBaseTestCase.put(tablename, "row1", columnFamily, "cl1", "data");HBaseTestCase.get(tablename, "row1");HBaseTestCase.scan(tablename);/* if(true==HBaseTestCase.delete(tablename))System.out.println("Delete table:"+tablename+"success!");*/}catch (Exception e) {e.printStackTrace();}}}5:设置运行配置,然后运行。运行前将Hbase集群先启动。6:检验,使用hbase shell查看hbase,发现已经建立表hbase_tb。
Ⅱ 独立的HBase实例解压缩,解压错误问题,怎么解决
下载hbase的安装包,hbase和底层的hdoop有一定的关联适配关系,应可能下载相配套的版本,可以少走很多弯路,下载后传到预定为hbase master的主机上。小编的版本比较老,hadoop为0.20.2,hbase是0.95.5
Ⅲ HBase Configuration
版本: 2.0.0 HBase的配置文件在conf/目录下。 在分布式模式下, 当修改类hbase的配置文件后, 需要同步到集群中的其他节点上。HBase不会自动同步。 可以芹春卖使用 rsync 、scp 等工具进行同步。 对于大部分配置,需要重启使之生效。 动态参数例外。 例如: 一个schema 每个region 有3个列族, 平均每个列族有3个StoreFile , 一个RegionServers 有100个regions , JVM将打开 3 3 100 = 900 个文件描述符, 这不包括打开的JAR文件、配置文件和其他文件。 打开一个文件不会消耗很多资源,风险在于可打开的文件数量。 另外一个相关的设置是允嫌逗许一个用户一次运行的进程数量。 linux系统的进程数量使用ulimit -u 设置。 这与nproc命令不同, nproc控制可以分配给一个用户的cpus数量。在有负载的情况下, ulimit -u 设置太低会导致OutOfMemoryError 异常。 See Jack Levin’森高s major HDFS issues thread on the hbase-users mailing list, from 2011. 支持的版本情况如下: Hbase 依赖hadoop, 它依赖lib目录下的hadoop jar包。 在分布式模式下, hbase依赖的jar包与hadoop集群使用的jar包保持一致非常重要。 为避免版本错误,请使用hadoop集群的jar替换hbase下的hadoop jar 。 确保整个hbase集群上的jar都被替换。 hadoop 版本不匹配会引发各种问题,大部分看起来像程序挂起了。 DataNode 有个文件上限, 需要配置hdfs-site.xml 的该属性如下: 确保已经重启了hdfs, 使配置生效。 未配置该属性, 可能会引发该错误: 或其他错误,参见, See also casestudies.max.transfer.threads and note that this property was previously known as dfs.datanode.max.xcievers (e.g. Hadoop HDFS: Deceived by Xciever ). ZooKeeper 3.4.x 版本及以上。 Hbase使用 multi 功能, 该功能从zk的3.4.0版本开始提供。 hbase.zookeeper.useMulti 属性默认为true 。 参见: HBASE-12241 (The crash of regionServer when taking deadserver’s replication queue breaks replication) and HBASE-6775 (Use ZK.multi when available for HBASE-6710 0.92/0.94 compatibility fix) for background. 对于2.0版本, 该属性已经废弃, 并且useMulti 总是开启的。
Ⅳ 求助帖,hbase新手,windows中的java怎么连接linux中的hbase
一、新建本地java工程file->new->java project二、添加jar包和配置文件1、添加JAR包右击Propertie在弹出的快捷菜单中选择Java Build Path对话框,在该对话框中单击Libraries选项卡,在该选项卡下单击Add External JARs按钮,定位到$HBASE/lib目录下,并选取如下JAR包。hadoop-core-1.0.0.jarcommons-loggings-version.jarcommons-cli-version.jarcommons-lang-version.jarcommons-configuration-version.jarhbase-0.94.1.jarzookeeper-3.4.3.jarslf4j-api-1.5.8.jarslf4j-log4j12-1.5.8.jarlog4j-1.2.16.jarprotobuf-java-2.4.1.jar2、添加hbase-site.xml配置文件在工程根目录下创建conf文件夹,将$HBASE_HOME/conf/目录中的hbase-site.xml文件复制到该文件夹中。通过右键选择Propertie->Java Build Path->Libraries->Add Class Folder。3、windows下开发HBase应用程序,HBase部署在linux环境中,在运行调试时可能会出现无法找到主机,类似异常信息如下:java.net.UnknownHostException: unknown host: master解决办法如下:在C:\WINDOWS\system32\drivers\etc\hosts文件中添加如下信息192.168.2.34 master
Ⅳ centos7 hbase2.1.3 安装
http://archive.apache.org/dist/hbase/2.1.3/hbase-2.1.3-bin.tar.gz 需要安装好jdk8,安装方法参考 centos7 jdk8安装 安装方法参考 centos7 hadoop2.8.5 安装 centos7 zookeeper3.5.5 安装 修改 ~/.bashrc 文件 文件中唤手加入 使环境变量生效 进入配置文件目录 修改下列配置文件 在 文件中找到 # export HBASE_MANAGES_ZK=false ,修辩嫌改为 启动前复制 htrace-core-3.1.0-incubating.jar 到lib目录下,不然可能会出错 启动服务 启动成功后访问web页和灶嫌面
Ⅵ hbase怎么用
HBase安装及简单使用
通过之前的hadoop0.20.2的安装并调试成功,接下来我们继续安装hbase0.90.5。在安装hbase0.90.5之前,因为hbase0.90.5只支持jdk1.6,所以,我把之前的jdk1.8卸载,重新安装了jdk1.6。
第一步:
首先需要下载hbase0.90.5.tar.gz,并解压到/home/hadoop/的目录下,同时将目录修改为hbase0.90.5
第二步:
替换hadoop核心jar包,主要母的是防止hbase和hadoop版本不同出现兼容问题,造成hmaster启动异常
将hbase0.90.5/lib目录中的hadoop-core-0.20-append-r1056497.jar包进行备份后删除,再将/home/hadoop/hadoop下面的hadoop-0.20.2-core.jar赋值到/home/hadoop/hbase0.90.5目录下即可
第三步:
编辑配置文件
①/home/hadoop/hbase0.90.5/conf/hbase-env.sh
我们对行键'1001'中列族info的列名age赋值24(1001:info:age=>24),插入两次,会将最后一次的值进行合并,其中,用时间戳来区分。从图片中的时间戳不同可以看出保存的是最后一次put的内容。
Ⅶ 如何将一个hbase的数据导入另一个hbase
1.在hbase中创建一个表例如:create 'test','info'2.配置环境在hadoop的安装目录下找到hadoop.env.sh配置文件,将一文件加入到此配置文件中(export HBASE_HOME=/usr/hbaseexport HADOOP_CLASSPATH=$HBASE_HOME/hbase-0.94.12.jar:$HBASE_HOME/hbase-0.94.12-test.jar:$HBASE_HOME/conf:${HBASE_HOME}/lib/zookeeper-3.4.5.jar:${HBASE_HOME}/lib/guava-11.0.2.jar)以上的配置文件可以不用配置,一但配置在启动hive时就会出错,需要另加配置。然后拷贝jar包将hbase的hbase-0.91.12.jar拷贝到haddoop的lib下,将hbase-0.94.12.tests.jar 到hadoop的lib下将hbase的配置文件hbase-site.xml文件拷贝到hadoop的conf下3.重新启动hadoop4.将所需要的文件上传到hdfs上,我用的eclipse上传的,大家也可以用hadoop fs -put test3.dat /application/logAnalyse/test/5.在你安装的hbase的lib目录下执行一下的命令hbase org.apache.hadoop.hbase.maprece.ImportTsv – Dimporttsv.columns=info:userid,HBASE_ROW_KEY,info:netid test2 /application/logAnalyse/test/test3.dat或是hbase org.apache.hadoop.hbase.maprece.ImportTsv – Dimporttsv.columns=HBASE_ROW_KEY,cf:c1,cf:c2 -Dimporttsv.separator=, test2 /application/logAnalyse/test/test3.txt这样你去hbase执行scan 'test2'几可以看到已经有数据了
Ⅷ HBase存储架构
上图是HBase的存储架构图。
由上图可以知道,客户端是通过Zookeeper找到HMaster,然后再与具体的Hregionserver进行沟通读写数据的。
具体到物理实现,细节包括以下这些:
首先要清楚HBase在hdfs中的存储路径,以及各个目录的作用。在hbase-site.xml 文件中,配置项 <name> hbase.rootdir</name> 默认 “/hbase”,就是hbase在hdfs中的存储根路径。以下是hbase0.96版本的个路径作用。1.0以后的版本请参考这里: https://blog.bcmeng.com/post/hbase-hdfs.html
1、 /hbase/.archive HBase 在做 Split或者 compact 操作完成之后,会将 HFile 移到.archive 目录中,然后将之前的 hfile 删除掉,该目录由 HMaster 上的一个定时任务定期去清理。
2、 /hbase/.corrupt 存储HBase损坏的日志文件,一般都是为空的。
3、 /hbase/.hbck HBase 运维过程中偶尔蔽升会遇到元数据不一致的情况,这时候会用到提供的 hbck 工具去修复,修复过程中会使用该目录作为临时过度缓冲。
4、 /hbase/logs HBase 是支持 WAL(Write Ahead Log) 的,HBase 会在第一次启动之初会给每一台 RegionServer 在.log 下创建一个目录,若客户端如果开启WAL 模式,会先将数据写入一份到.log 下,当 RegionServer crash 或者目录达到一定大小,会开启 replay 模式,类似 MySQL 的 binlog。
5、 /hbase/oldlogs 当.logs 文件夹中的 HLog 没用之后会 move 到.oldlogs 中,HMaster 会定期去清理。
6、 /hbase/.snapshot hbase若开启了 snapshot 功能之后,对某一个用户表建立一个 snapshot 之后,snapshot 都存储在该目录下,如对表test 做了一个 名为sp_test 的snapshot,就会在/hbase/.snapshot/目录下创建一个sp_test 文件夹,snapshot 之后的所有写入都是记录在这个 snapshot 之上。
7、 /hbase/.tmp 当对表做创建或者删除操作的时候,会将表move 到该 tmp 目录下,然后再去做处理操作。
8、 /hbase/hbase.id 它是一个文件,存储集群唯一的 cluster id 号,是一个 uuid。
9、 /hbase/hbase.version 同样也是一宏拿老个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来
10、 -ROOT- 该表是一张的HBase表,只是它存储的是.META.表的信息。通过HFile文件的解析脚本 hbase org.apache.hadoop.hbase.io.hfile.HFile -e -p -f 可以查看其存储的内容,如下所示:
以上可以看出,-ROOT-表记录的.META.表的所在机器是dchbase2,与web界面看到的一致:
11、 .META. 通过以上表能找到.META.表的信息,该表也是一张hbase表,通过以上命令,解析其中一个region:
以敏神上可以看出,adt_app_channel表的数据记录在dchbase3这台reginserver上,也与界面一致,如果有多个region,则会在表名后面加上rowkey的范围:
通过以上描述,只要找到-ROOT-表的信息,就能根据rowkey找到对应的数据,那-ROOT-在哪里找呢?从本文一开始的图中可以知道,就是在zookeeper中找的。进入zookeeper命令行界面:
可以看出-ROOT-表存储在 dchbase3 机器中,对应界面如下:
以上就是HBase客户端根据指定的rowkey从zookeeper开始找到对应的数据的过程。
那在Region下HBase是如何存储数据的呢?
以下就具体操作一张表,查询对应的HFile文件,看HBase的数据存储过程。
在HBase创建一张表 test7,并插入一些数据,如下命令:
查看wal日志,通过 hbase org.apache.hadoop.hbase.regionserver.wal.HLog –mp -p 命令可以解析HLog文件,内容如下:
查看HFile文件,内容如下:
由此可见,HFile文件就是存储HBase的KV对,其中Key的各个字段包含了的信息如下:
由于hbase把cf和column都存储在HFile中,所以在设计的时候,这两个字段应该尽量短,以减少存储空间。
但删除一条记录的时候,HBase会怎么操作呢?执行以下命令:
删除了rowkey为200的记录,查看hdfs,原来的HFile并没有改变,而是生成了一个新的HFile,内容如下:
所以在HBase中,删除一条记录并不是修改HFile里面的内容,而是写新的文件,待HBase做合并的时候,把这些文件合并成一个HFile,用时间比较新的文件覆盖旧的文件。HBase这样做的根本原因是,HDFS不支持修改文件。