标签: hbase

结构化和非结构化索引 - Lucene和Hbase

我有一组需要索引的200M文档.每个文档都有一个自由文本和一组额外的稀疏元数据信息(100多列).

似乎自由文本索引的正确工具是Lucene,而结构化稀疏元数据的正确工具是HBase.

我需要查询数据并在自由文本搜索结果和结构化数据结果之间加入(例如,在其文本中获得所有具有短语"早安"的书籍于1980年首次发布).

我应该查看哪些工具/机制来加入结构化和未经检查的查询?结果可能包括数百万条记录(加入前后)

谢谢萨尔

lucene indexing hbase

5
推荐指数
1
解决办法
4070
查看次数

以编程方式创建和加载HFile到HBase时,新条目不可用

我正在尝试以编程方式创建HFiles并将它们加载到正在运行的HBase实例中.我发现很多信息的HFileOutputFormat,并在LoadIncrementalHFiles

我设法创建了新的HFile,将其发送到集群.在群集Web界面中,将显示新的存储文件,但新的键范围不可用.

InputStream stream = ProgrammaticHFileGeneration.class.getResourceAsStream("ga-hourly.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
String line = null;

Map<byte[], String> rowValues = new HashMap<byte[], String>();

while((line = reader.readLine())!=null) {
    String[] vals = line.split(",");
    String row = new StringBuilder(vals[0]).append(".").append(vals[1]).append(".").append(vals[2]).append(".").append(vals[3]).toString();
    rowValues.put(row.getBytes(), line);
}

List<byte[]> keys = new ArrayList<byte[]>(rowValues.keySet());
Collections.sort(keys, byteArrComparator);


HBaseTestingUtility testingUtility = new HBaseTestingUtility();
testingUtility.startMiniCluster();

testingUtility.createTable("table".getBytes(), "data".getBytes());

Writer writer = new HFile.Writer(testingUtility.getTestFileSystem(),
    new Path("/tmp/hfiles/data/hfile"),
    HFile.DEFAULT_BLOCKSIZE, Compression.Algorithm.NONE, KeyValue.KEY_COMPARATOR);

for(byte[] key:keys) {
    writer.append(new KeyValue(key, "data".getBytes(), "d".getBytes(), rowValues.get(key).getBytes()));
}

writer.appendFileInfo(StoreFile.BULKLOAD_TIME_KEY, Bytes.toBytes(System.currentTimeMillis()));
writer.appendFileInfo(StoreFile.MAJOR_COMPACTION_KEY, Bytes.toBytes(true)); …
Run Code Online (Sandbox Code Playgroud)

hadoop hbase bulk-load

5
推荐指数
1
解决办法
3686
查看次数

CDH4 Hbase使用Pig ERROR 2998 java.lang.NoClassDefFoundError:org/apache/hadoop/hbase/filter/Filter

我在伪分布式模式下使用CDH4,我在使用HBase和Pig时遇到了一些麻烦(但两者都很好).

我正在一步一步地遵循这个很好的教程:http: //blog.whitepages.com/2011/10/27/hbase-storage-and-pig/

所以我的Pig脚本看起来像这样

register /usr/lib/zookeeper/zookeeper-3.4.3-cdh4.1.2.jar
register /usr/lib/hbase/hbase-0.92.1-cdh4.1.2-security.jar
register /usr/lib/hbase/lib/guava-11.0.2.jar

raw_data = LOAD 'input.csv' USING PigStorage( ',' ) AS (
listing_id: chararray,
fname: chararray,
lname: chararray );

STORE raw_data INTO 'hbase://sample_names' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage ('info:fname info:lname');
Run Code Online (Sandbox Code Playgroud)

但是在输入以下命令时

pig -x local hbase_sample.pig
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. org/apache/hadoop/hbase/filter/Filter
Run Code Online (Sandbox Code Playgroud)

我在网上找到的主要原因是类路径,所以这里是当前配置的列表,也许你在我的配置中发现了一些废话:

export HADOOP_HOME=/usr/lib/hadoop
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HBASE_HOME=/usr/lib/hbase
export HBASE_CONF_DIR=/etc/hbase/conf
export PIG_HOME=/usr/lib/pig
export PIG_CONF_DIR=/etc/pig/conf

export PATH="$HADOOP_HOME/bin:$HBASE_HOME/bin:$HADOOP_MAPRED_HOME/bin:$PIG_HOME/bin:$PATH"
export HADOOP_CLASSPATH="$HBASE_HOME/bin"
export PIG_CLASSPATH="$HBASE_HOME/bin:$PIG_HOME/bin"
Run Code Online (Sandbox Code Playgroud)

如果您需要更多详细信息,请参阅完整的猪堆栈跟踪:

Pig Stack Trace
---------------
ERROR 2998: …
Run Code Online (Sandbox Code Playgroud)

hadoop hbase noclassdeffounderror apache-pig cloudera

5
推荐指数
1
解决办法
5686
查看次数

在Amazon EMR上使用java中的hbase时出现问题

所以我试图使用自定义jar在Amazon ec2上查询我的hbase集群,我将其作为MapReduce步骤启动.我的jar(在map函数内)我将Hbase称为:

public void map( Text key, BytesWritable value, Context contex ) throws IOException, InterruptedException {
    Configuration conf = HBaseConfiguration.create();
    HTable table = new HTable(conf, "tablename");
      ...
Run Code Online (Sandbox Code Playgroud)

问题是,当它到达HTable线并尝试连接到hbase时,步骤失败,我得到以下错误:

2014-02-28 18:00:49,936 INFO [main] org.apache.zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection
2014-02-28 18:00:49,974 INFO [main] org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper: The identifier of this process is 5119@ip-10-0-35-130.ec2.internal
2014-02-28 18:00:49,998 INFO [main-SendThread(localhost:2181)] org.apache.zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2014-02-28 18:00:50,005 WARN [main-SendThread(localhost:2181)] org.apache.zookeeper.ClientCnxn: Session 0x0 for server …
Run Code Online (Sandbox Code Playgroud)

hadoop hbase amazon-web-services elastic-map-reduce apache-zookeeper

5
推荐指数
1
解决办法
2010
查看次数

更改hbase时间戳排序以获取特定行的第一个版本

根据我的要求,我需要在Hbase中获取特定行的第一个版本.假设以下Htable:

row_key          cf1:c1           timestamp
----------------------------------------
1                  x                 t1
1                  x                 t2
1                  x                 t3
...
Run Code Online (Sandbox Code Playgroud)

假设我想根据时间戳检索第一个版本的row(1).首先,为此目的是否有任何hbase java方法?第二,如果没有这样的方法,我可以通过获取行(1)的最后版本来将时间戳的排序顺序更改为DESC以检索此类单元吗?对hbase的时间戳排序进行此更改有什么顾虑?

java hbase nosql

5
推荐指数
1
解决办法
2066
查看次数

Spark无法连接到HBaseClusterSingleton

我为我的测试类启动了一个Hbase集群.我使用那个助手类:

HBaseClusterSingleton.java

并使用它像:

private static final HBaseClusterSingleton cluster = HBaseClusterSingleton.build(1);
Run Code Online (Sandbox Code Playgroud)

我按如下方式检索配置对象:

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

我在Spark上使用它如下:

sparkContext.newAPIHadoopRDD(conf, MyInputFormat.class, clazzK,
    clazzV);
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,不需要启动Hbase集群,因为Spark将连接到我的虚拟集群.但是,当我运行我的测试方法时,它会抛出一个错误:

2015-08-26 01:19:59,558 INFO [执行任务启动worker-0-SendThread(localhost:2181)] zookeeper.ClientCnxn(ClientCnxn.java:logStartConnect(966)) - 打开到服务器localhost/127.0.0.1的套接字连接:2181.不会尝试使用SASL进行身份验证(未知错误)

2015-08-26 01:19:59,559 WARN [执行任务启动worker-0-SendThread(localhost:2181)] zookeeper.ClientCnxn(ClientCnxn.java:run(1089)) - 服务器空的会话0x0,意外错误,关闭套接字连接并尝试重新连接 java.net.ConnectException: 在org.apache.zookeeper的sun.nio.ch.SocketChannelImpl.finckConnect(SocketChannelImpl.java:739)的sun.nio.ch.SocketChannelImpl.checkConnect(本地方法)中拒绝连接 .ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)at org.apache.zookeeper.ClientCnxn $ SendThread.run(ClientCnxn.java:1068)

不在Spark上运行的Hbase测试运行良好.当我检查日志时,我看到群集和Spark正确启动:

2015-08-26 01:35:21,791 INFO [main] hdfs.MiniDFSCluster(MiniDFSCluster.java:waitActive(2055)) - 群集处于活动状态

2015-08-26 01:35:40,334 INFO [main] util.Utils(Logging.scala:logInfo(59)) - 在端口56941上成功启动了服务'sparkDriver'.

我意识到当我从命令行启动一个hbase时,我的Spark测试方法会连接到它!

那么,这是否意味着它不关心我传递给它的conf?关于如何解决它的任何想法?

java hbase apache-spark

5
推荐指数
0
解决办法
300
查看次数

Apache Phoenix的列族

我创建了下表:

CREATE TABLE IF NOT EXISTS "events" (
"product.name" VARCHAR(32),
"event.name" VARCHAR(32),
"event.uuid" VARCHAR(32),
CONSTRAINT pk PRIMARY KEY ("event.uuid")
)
Run Code Online (Sandbox Code Playgroud)

插入活动:

upsert into "events" ("event.uuid", "event.name", "product.name") values('1', 'click', 'api')
Run Code Online (Sandbox Code Playgroud)

从HBase shell获取数据:

hbase(main):020:0> scan 'events'
ROW                                                  COLUMN+CELL
 1                                                   column=0:_0, timestamp=1449417795078, value=
 1                                                   column=0:event.name, timestamp=1449417795078, value=click
 1                                                   column=0:product.name, timestamp=1449417795078, value=api
1 row(s) in 0.0200 seconds
Run Code Online (Sandbox Code Playgroud)

没有列的家庭;-(

从HBase shell,尝试插入数据:

hbase(main):021:0> put 'events', '2', 'event:name','buy'

ERROR: Unknown column family! Valid column names: 0:*
Run Code Online (Sandbox Code Playgroud)

为什么?

hbase phoenix

5
推荐指数
1
解决办法
5342
查看次数

hbase客户端API卡在table.get(行),

我正在使用hbase的本机API编写Hbase Java客户端.

我可以使用我创建的Hbase客户端连接到hbase并运行各种查询.我使用"hbase classpath"命令运行我的hbase客户端.这解决了所有依赖项.

现在我们希望这个hbase客户端成为项目的一部分,并将其作为其组件之一.因此,在集成之后,我们需要将其作为项目的War文件的一部分运行(我们需要将其作为rest API的一部分运行).我添加了hbase-site.xml.hdfs-site.xml和core-site.xml作为资源,并设置为Resource to configuration object.

Configuration conf = HBaseConfiguration.create()

URL hbaseUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("hbase-site.xml");
conf.addResource(hbaseUrl.toString());
URL hdfsUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("hdfs-site.xml");
conf.addResource(hdfsUrl.toString());
URL coreUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("core-site.xml");
conf.addResource(coreUrl.toString());
Run Code Online (Sandbox Code Playgroud)

当我试图只添加core-site.xml时,我收到错误说"包含失败"哪个文件存在于该主机上,因此在资源较旧时添加了该文件,这解决了我的问题.

HTable table = new HTable(conf , "tableName");
Run Code Online (Sandbox Code Playgroud)

我可以成功扫描并获取行操作并获取结果.

Scan scanTable = new Scan();
Get row = new Get(key);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试做"Result rowData = table.get(row); "

我的代码卡住了,没有显示任何错误.

我可以使用""hbase classpath"命令运行相同的代码.我是否需要设置$ HADOOP_CLASSPATH和$ HBASE_CLASSPATH变量,我通过jetty webserver运行我的代码.

以下是错误跟踪:

java.io.InterruptedIOException: Giving up trying to location region in meta: thread is interrupted.
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:1391)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:1169)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:1123)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionLocation(HConnectionManager.java:964)
at org.apache.hadoop.hbase.client.RegionServerCallable.prepare(RegionServerCallable.java:72)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:113)
at org.apache.hadoop.hbase.client.HTable.get(HTable.java:780)
at …
Run Code Online (Sandbox Code Playgroud)

java hadoop hbase hadoop2

5
推荐指数
1
解决办法
1174
查看次数

CDH Hue和Hbase身份验证

我是CDH的新手(我使用的当前版本是5.7.1)

我已经添加了HBase thrift角色并在Hue中设置,但我仍然遇到以下问题.

错误图片

HBase Browser   Failed to authenticate to HBase Thrift Server, check authentication configurations. 
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

hbase thrift hue

5
推荐指数
1
解决办法
2138
查看次数

HBase:创建多个表还是包含多个列的单个表?

什么时候创建多个表而不是创建具有大量列的单个表是有意义的。我知道表通常只有几个列族(1-2),每个列族可以支持1000多个列。

当HBase在单个表中可能包含大量列的情况下表现良好时,何时创建单独的表才有意义?

database-design hadoop hbase

5
推荐指数
1
解决办法
889
查看次数