本地eclipse远程操作 hbase
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地eclipse远程操作 hbase相关的知识,希望对你有一定的参考价值。
org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:307)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:131)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:56)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:287)
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:267)
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:139)
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:134)
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:825)
at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:606)
at org.apache.hadoop.hbase.MetaTableAccessor.tableExists(MetaTableAccessor.java:370)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:281)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:291)
at tt.createTable(tt.java:75)
at tt.main(tt.java:34)
代码:
Configuration HBASE_CONFIG = new Configuration();
HBASE_CONFIG.set("hbase.zookeeper.quorum", "h2a1.ecloud.com,h2m1.ecloud.com,h2m2.ecloud.com");
HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
cfg = new HBaseConfiguration(HBASE_CONFIG);
admin = new HBaseAdmin(cfg);
本地能Ping通远程机,远程机不能ping通本地
file->new->java project
二、添加jar包和配置文件
1、添加JAR包
右击Propertie在弹出的快捷菜单中选择Java Build Path对话框,在该对话框中单击Libraries选项卡,在该选项卡下单击
Add External JARs按钮,定位到$HBASE/lib目录下,并选取如下JAR包。
hadoop-core-1.0.0.jar
commons-loggings-version.jar
commons-cli-version.jar
commons-lang-version.jar
commons-configuration-version.jar
hbase-0.94.1.jar
zookeeper-3.4.3.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
log4j-1.2.16.jar
protobuf-java-2.4.1.jar
2、添加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
YCSB测试HBase远程完全分布式集群
写在前面
本文只讲一个很简单的问题,YCSB对HBase集群的测试。虽然网上有很多介绍YCSB测试HBase的文章,但都是针对本地HBase伪分布式集群的。大家都知道,稍微正式一些的压测都会要求测试客户端与目标集群分离部署,而且伪分布式集群通常不会在生产环境下使用,本身也没有太大的压测意义。本文会着重介绍一下压测远程HBase完全分布式集群的不同之处。
微信版本升级后,代码块似乎显示有些问题,可以点击文章末尾的“阅读原文”查看相应命令和配置文件。
正文
YCSB是Yahoo开源的性能测试工具,支持很多种类的NoSQL数据库测试,这里既包括了经典的HBase/Cassandra/MongoDB,也有近两年新推出的Spanner/Kudu等。此外,YCSB最大的特点是其灵活性,对于尚未纳入官方支持的NoSQL数据库,可以快速进行二次开发。如果你正在进行NoSQL数据库选型或者研发一款定制版Nosql数据库,那么YCSB一定是你居家旅行必备良药。
二次开发工作主要是com.yahoo.ycsb.DB的基础上定义自己的接口实现。DB是一个抽象类,定义了NoSQL数据库的5类典型操作,包括insert/update/delete/read/scan。你需要为自己的Nosql实现该上述方法。当然还有一些初始化(init)和收尾工作(cleanup)也要有相应的处理。
HBase是YCSB较早支持的NoSQL数据库,目前在主线版本上支持0.98/1.0/1.2/1.4/2.0几个版本(后两个版本是在2018-03-23增加的)。这些版本的主要差别在于对DB类的不同实现,阅读源码可以发现,在1.0版本后,DB的实现类并没有发生变化,1.2/1.4/2.0三个版本都是直接继承了1.0版,没有重载任何方法。从这点上来说,Ivan认为使用其中哪个版本测试应该都是OK的。
使用YCSB进行HBase完全分布式集群测试,主要是以下几个步骤。
1、搭建HBase分布式集群
Ivan的HBase版本为1.2.6,部署HBase集群具体步骤略去。
2、下载YCSB版本
Ivan选择的是YCSB0.13版本,如果使用master应该也是OK的,前文已经说过,这两个版本中HBase的访问接口是一样的。
wget https://github.com/brianfrankcooper/YCSB/archive/0.13.0-staging.zip
3、编译YCSB
执行进行编译。
mvn clean package
由于YCSB支持了很多NoSQL数据库,所以在编译时依赖的Jar包也比较多。Ivan尝试了几次编译,都由于下载依赖包超时失败,尤其是在cassandra部分。看了下maven的输出信息,超时的部分都是测试相关的。所以调整命令如下
mvn clean package -Dmaven.test.skip=true
编译顺利完成。
4、添加HBase配置
本文的重点来了!!!很多人容易犯晕的地方。
事实上,如果YCSB与HBase伪分布式集群合并部署时,这部分的配置是可以忽略的。YCSB通过上下文全局变量可以直接得到HBase的信息,实现压测。可能这就是网上很多文章并不去介绍配置的原因。
我们还是从YCSB官方文档找答案,在0.94/0.98/1.0三个版本中给出的配置方式完全不同,仔细阅读发现1.0版本实际上是特别针对Google BigTable的配置文件。这由于BigTable提供了对HBase的兼容API,YCSB将其作为一种NoSQL云服务也纳入了进来。但是此处的配置没有参考意义。在1.2版本中,虽然接口代码继承自1.0版本,但readme中明确提到配置文件要参考0.98版本,后续1.4/2.0的readme基本是照抄。
阅读0.98版本的readme,发现其实设置非常简单,我们只需要将HBase集群master节点下的hbase-site.xml文件拷贝到YCSB节点的某个位置,并在稍后的命令中指定即可。 网上有的文章会提到其他配置甚至脚步文件,这里Ivan明确的说,只需要hbase-site.xml,不需要其他文件!!!
Ivan的hbase-site.xml文件内容如下。
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/bigdata/zookeeper-3.4.11/zkData</value>
</property>
</configuration>
事实上,YCSB主要是从中读取zookeeper的节点信息。
Ivan将hbase-site.xml拷贝到/home/ycsb-hbase/conf(也可根据你的环境定义其他路径)目录下。所以相应的,请修改YCSB本地的hosts文件,将机器名与IP的对应关系维护进去。
5、创建目标表
创建usertable表,这个是YCSB测试的前置条件,测试脚本中不会自动创建
create 'usertable','family'
6、执行测试命令
最后一步,只需要在命令行中增加 -cp 参数指定hbase-site.xml的路径即可。 例如以下命令。
1)加载数据
bin/ycsb load hbase10 -P workloads/workloada -cp /home/ycsb-hbase/conf -p table=usertable -p columnfamily=family -threads 100
2)执行scan测试
bin/ycsb run hbase10 -P workloads/workloade -cp /home/ycsb-hbase/conf -p table=usertable -p columnfamily=family -threads 100
打完收工。
最后啰嗦一句,YCSB测试HBase完全分布式集群的主要差异在于配置文件,即hbase-site.xml和修改本地hosts文件,目的是为了连接zookeeper集群。
更多YCSB介绍与测试命令可参考前文
以上是关于本地eclipse远程操作 hbase的主要内容,如果未能解决你的问题,请参考以下文章