标签: hbase

编写ActiveRecord适配器

我想为HBase数据库编写自己的ActiveRecord适配器,因为目前还没有.但是,我一直在网上搜索一下,找不到有关如何编写ActiveRecord适配器的任何好资源.您将如何进行此操作,或者您可以推荐任何链接?

ruby activerecord hbase ruby-on-rails

7
推荐指数
1
解决办法
5988
查看次数

HBase如何跨区域服务器分区表?

请告诉我HBase如何跨区域服务器分区表.

例如,假设我的行键是从0到10M的整数,我有10个regionservers.
这是否意味着第一个区域服务器将存储所有行的键值为0 - 10M,第二个1M - 2M,第三个2M-3M,......第十个9M - 10M?

我希望我的行密钥是时间戳,但我认为大多数查询都适用于最新日期,所有查询只会由一个区域服务器处理,这是真的吗?

或者这些数据可能会以不同的方式传播?
或者也许我可以以某种方式创建比我有区域服务器更多的区域,因此(根据给定的示例)服务器1将具有0 - 0,5M和3M - 3,5M的密钥,这样我的数据将更均匀地传播,这是可能?


更新

我刚发现有选择hbase.hregion.max.filesize,你认为这会解决我的问题吗?

parallel-processing hadoop hbase

7
推荐指数
1
解决办法
8595
查看次数

主从与分布式计算

HBase有一个主从模型,而Cassandra有一个点对点模型.我知道在主从模型中,主服务器是SPOF(单点故障),并且在对等模型中没有这样的东西.

每种型号还有其他优缺点吗?特别是我正在寻找主对手在对等模型上的任何优势.

p2p hbase distributed-computing master-slave cassandra

7
推荐指数
1
解决办法
3615
查看次数

关于SLF4J绑定的HBase 0.92警告

我安装HBase 0.92Hadoop 1.0.0它,它在完全分布式模式下工作正常,但一个恼人的警告不断出现.我怎么能摆脱它?

 .......
 hbase(main):001:0> status
 SLF4J: Class path contains multiple SLF4J bindings.

 SLF4J: Found binding in
 [jar:file:/opt/hbase-0.92.0/lib/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]

 SLF4J: Found binding in
 [jar:file:/opt/hadoop-1.0.0/lib/slf4j-log4j12-1.4.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
: See http://www.slf4j.org/codes.html#multiple_bindings for an
 explanation.

 3 servers, 0 dead, 0.6667 average load

 .......
Run Code Online (Sandbox Code Playgroud)

PS我没有设置$CLASSPATH变量hbase-env.sh.我运行Hadoop start-all.sh,然后启动HBase start-hbase.sh.

hadoop hbase slf4j

7
推荐指数
1
解决办法
6513
查看次数

将Jar文件添加到WEB-INF/lib

我是Eclipse,Java和Linux的新手.我搜索这个问题,但我没有回答.我想编写一个操作HBase表的程序.所以我有一些与HBase相关的Jar文件.在普通的Java应用程序中,我通过以下指令添加Jar文件

构建路径 - >配置构建路径 - >添加外部JAR

所以在Dynamic Web Project中声音就像不同.经过一些搜索后,我了解Jar文件必须添加到WEB-INF/lib或%TOMCAT_HOME%/ lib中.所以我从%TOMCAT_HOME%/ lib得到了答案,但我真的不知道如何在WEB-INF/lib中添加jar文件.我复制文件夹中的所有jar文件,但它不起作用.

请详细帮我.

java eclipse jsp hbase

7
推荐指数
1
解决办法
4万
查看次数

哪个集群NoSQL DB用于消息存储目的?

还有一个关于NoSQL选择的问题.但是,我还没有找到有人要求这种目的,消息存储......

我有一个Erlang聊天服务器,我已经使用MySQL存储好友列表,以及"JOIN needed"信息.

我想存储消息(用户因为离线而没有收到消息......)并检索它们.

我已经预先选择了NoSQL,我不能使用像MongoDB这样的东西,因为它是面向RAM的范例,并且不能像其他人一样集群.我想我的列表中有3个选项:

  • HBase的
  • 了Riak
  • 卡桑德拉

我知道他们的模型不同,一个使用键/值,另一个使用SuperColumns和co.

到目前为止,由于它是Erlang的稳定客户端库,我对Riak有偏好.

我知道我可以使用Cassandra和Thrift,但是对于Erlang来说似乎不太稳定(我没有得到很好的回报)

我现在对HBase一无所知,只知道它存在并且基于像Cassandra和Riak这样的Dynamo.

所以这就是我需要做的事情:

  • 每个注册用户存储1到X条消息.
  • 获取每个用户存储的消息数.
  • 一次检索用户的所有消息.
  • 一次删除用户的所有消息.
  • 删除所有超过X个月的邮件

现在,我对那些NoSQL DB真的很陌生,我一直都是MySQL爱好者,这就是为什么我问你这个问题,作为一个新手,会有比我更多经验的人帮我选择哪一个更好,并且会让我做我想做的一切,不用太麻烦......

谢谢 !

erlang hbase cassandra nosql riak

7
推荐指数
1
解决办法
2445
查看次数

hadoop java.net.URISyntaxException:绝对URI中的相对路径:rsrc:hbase-common-0.98.1-hadoop2.jar

我有一个连接到HBASE的map reduce作业,我无法弄清楚我遇到这个错误的位置:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: rsrc:hbase-common-0.98.1-hadoop2.jar
        at org.apache.hadoop.fs.Path.initialize(Path.java:206)
        at org.apache.hadoop.fs.Path.<init>(Path.java:172)
        at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.findOrCreateJar(TableMapReduceUtil.java:703)
        at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJars(TableMapReduceUtil.java:656)
        at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addHBaseDependencyJars(TableMapReduceUtil.java:573)
        at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJars(TableMapReduceUtil.java:617)
        at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:398)
        at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:356)
        at com.ancestry.bigtree.hfile.JsonToHFileDriver.run(JsonToHFileDriver.java:117)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at com.ancestry.bigtree.hfile.JsonToHFileDriver.main(JsonToHFileDriver.java:69)
        ... 10 more
Caused by: java.net.URISyntaxException: Relative path in absolute URI: rsrc:hbase-common-0.98.1-hadoop2.jar
        at java.net.URI.checkPath(URI.java:1804)
        at java.net.URI.<init>(URI.java:752)
        at org.apache.hadoop.fs.Path.initialize(Path.java:203)
Run Code Online (Sandbox Code Playgroud)

如果我没有Hbase库,那么工作运行正常.生成的相对路径在哪里?如何强制生成的路径是绝对的? …

java hadoop hbase mapreduce bulkloader

7
推荐指数
1
解决办法
2万
查看次数

调整使用底层HBase表的Hive查询

我在Hbase中有一个表让我们说"tbl",我想用Hive查询它.因此,我将表格映射到hive,如下所示:

CREATE EXTERNAL TABLE tbl(id string, data map<string,string>)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,data:")
TBLPROPERTIES("hbase.table.name" = "tbl");
Run Code Online (Sandbox Code Playgroud)

查询如下:

select * from tbl", "select id from tbl", "select id, data
from tbl
Run Code Online (Sandbox Code Playgroud)

真的很快

但查询喜欢

select id from tbl where substr(id, 0, 5) = "12345"

select id from tbl where data["777"] IS NOT NULL 
Run Code Online (Sandbox Code Playgroud)

非常慢.

相反,从Hbase shell运行时:

"scan 'tbl', {
COLUMNS=>'data', STARTROW='12345', ENDROW='12346'}" or
"scan 'tbl', { COLUMNS=>'data', "FILTER" =>
FilterList.new([qualifierFilter('777')])}"
Run Code Online (Sandbox Code Playgroud)

它闪电般快!

当我查看由jobtracker上的hive生成的mapred作业时,我发现"map.input.records"计算Hbase表中的所有项目,这意味着作业在它甚至启动任何映射器之前进行全表扫描!此外,我怀疑它在执行之前将所有数据从Hbase表复制到hdfs到mapper tmp输入文件夹.

所以,我的问题是 - 为什么hive的hbase存储处理程序不会将hive查询转换为适当的hbase函数?为什么它扫描所有记录然后使用"where"子句对它们进行切片?怎么改进?

任何提高Hive查询性能的建议(映射到HBase表).

我们可以在HBase表上创建二级索引吗?

我们正在使用HBase和Hive集成并尝试调整Hive查询的性能.

performance integration hadoop hbase hive

7
推荐指数
1
解决办法
5405
查看次数

如何在Hive中访问HBase表,反之亦然?

作为开发人员,我通过使用现有MySQL表导入数据为我们的项目创建了HBase表sqoop job.问题是我们的数据分析师团队熟悉MySQL语法,暗示他们可以HIVE轻松查询表.对他们来说,我需要在HIVE中公开HBase表.我不想通过在HIVE中再次填充数据来复制数据.此外,复制数据将来可能会出现一致性问题.

我可以在没有重复数据的情况下暴露HIVE中的HBase表吗?如果是,我该怎么办?另外,如果insert/update/delete我的HBase表中的数据将更新数据出现在HIVE中而没有任何问题?

有时,我们的数据分析团队会在HIVE中创建表格并填充数据.我可以将它们暴露给HBase吗?如果有,怎么样?

hbase hive sqoop apache-hive

7
推荐指数
1
解决办法
5888
查看次数

Spark和HBase快照

假设我们可以直接从HDFS而不是使用HBase API来更快地访问数据,我们正在尝试基于HBase的表快照构建RDD.

所以,我有一个名为"dm_test_snap"的快照.我似乎能够使大多数配置工作正常,但我的RDD为空(尽管Snapshot本身存在数据).

我有一段时间找到一个使用Spark对HBase快照进行离线分析的人的例子,但我不敢相信我一个人试图让这个工作起来.非常感谢任何帮助或建议.

这是我的代码片段:

object TestSnap  {
  def main(args: Array[String]) {
    val config = ConfigFactory.load()
    val hbaseRootDir =  config.getString("hbase.rootdir")
    val sparkConf = new SparkConf()
      .setAppName("testnsnap")
      .setMaster(config.getString("spark.app.master"))
      .setJars(SparkContext.jarOfObject(this))
      .set("spark.executor.memory", "2g")
      .set("spark.default.parallelism", "160")

    val sc = new SparkContext(sparkConf)

    println("Creating hbase configuration")
    val conf = HBaseConfiguration.create()

    conf.set("hbase.rootdir", hbaseRootDir)
    conf.set("hbase.zookeeper.quorum",  config.getString("hbase.zookeeper.quorum"))
    conf.set("zookeeper.session.timeout", config.getString("zookeeper.session.timeout"))
    conf.set("hbase.TableSnapshotInputFormat.snapshot.name", "dm_test_snap")

    val scan = new Scan
    val job = Job.getInstance(conf)

    TableSnapshotInputFormat.setInput(job, "dm_test_snap", 
        new Path("hdfs://nameservice1/tmp"))

    val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableSnapshotInputFormat],
      classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
      classOf[org.apache.hadoop.hbase.client.Result])

    hBaseRDD.count()

    System.exit(0)
  }

}
Run Code Online (Sandbox Code Playgroud)

更新以包含解决方案 诀窍是,正如@Holden在下面提到的那样,conf没有通过.为了解决这个问题,我能够通过将对newAPIHadoopRDD的调用更改为:

val hBaseRDD …
Run Code Online (Sandbox Code Playgroud)

hadoop hbase scala apache-spark

7
推荐指数
1
解决办法
1879
查看次数