我想将 Django 与 NOSQL 解决方案一起使用。是否有任何生产就绪的 NOSQL 解决方案可以与最新的 Django 1.3 很好地配合?
我想知道 HBase 是否支持 RowKey 扫描的通配符。类似于:
select * from TABLE where KEY like '%SEARCH_KEY%';
Run Code Online (Sandbox Code Playgroud)
据我所知,如果我们对行键的前缀有一定的了解,我们可以使用部分键扫描(并且 HBase 在该扫描方面非常有效)。但是,如果我们没有信息前缀(意味着搜索键可能位于 RowKey 中的任何位置),那么 Hbase 必须运行全表扫描,对吗?
另外,如何在 HBase 中形成这样的查询(代码或通过 shell)?
有没有办法通过 sock 代理调用 HbaseAdmin/Htable?我想使用 localhost:1080 袜子代理映射到集群中的一个盒子,然后与 Hbase(Zookeeper、Master、RegionServer)交谈。有没有办法做到这一点?
谢谢。
Scan s = new Scan();
s.addFamily(Bytes.toBytes("cf1"));
s.setCaching(cacheRows);
s.setCacheBlocks(false);
s.setStartRow("30.0.2.2\01441756800\0");
s.setStopRow("30.0.2.3\01441756800\0");
ResultScanner scanner = table.getScanner(s);
long rows = 0;
try {
for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
rows++;
}
} finally {
scanner.close();
}
System.out.println("Total no of rows = " + rows);
Run Code Online (Sandbox Code Playgroud)
当我使用 cacheRows = 100 或 10000 运行上面的代码时,它会打印 Total no of rows = 480000
当我使用 cacheRows = 100000 运行上面的代码时,它会打印 Total no of rows = 10090
cacheRows = 10083 打印 480000
cacheRows = 10084 打印 …
我想从 hbase 表中选择一些行,如何设置多重过滤器?看来这AND不起作用。我尝试过两种方法。
scan 'hbase_table', { FILTER => "(RowFilter(=, 'regexstring:39$') AND SingleColumnValueFilter ('binary:family','binary:qualifier', '=', 'value')" }
Run Code Online (Sandbox Code Playgroud)
或者
scan 'hbase_table', {LIMIT => 10, FILTER => "(RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), RegexStringComparator.new("39$")) AND SingleColumnValueFilter.new(Bytes.toBytes('family'), Bytes.toBytes('qualifier'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('value')))", COLUMNS => 'family:qualifier'}
Run Code Online (Sandbox Code Playgroud)
非常感谢
在 hbase 中,我有列数:名称、城市……
并非所有列都有值(例如,某些行只能有“名称”)
我想提取行中的所有列+列的时间戳(按特定顺序),如果值为空,我想返回空字符串。
我面临的问题是,我必须Result通过“family”和“qualifier”访问列(我无法通过索引访问,result.listCells().get(i)因为会跳过空值)
scan.addColumn(Bytes.toBytes("personal data"), Bytes.toBytes("name"));
scan.addColumn(Bytes.toBytes("personal data"), Bytes.toBytes("city"));
ResultScanner scanner = table.getScanner(scan);
for (Result result = scanner.next(); result != null; result = scanner.next()){
byte [] valCity = result.getValue("personal data", "city"); //can't get timestamp using this
//check if valCity null write ("") else write the value
//next column...
}
Run Code Online (Sandbox Code Playgroud) 我在 IntelliJ IDE 中运行 HbaseTestingUtility 时遇到问题,我可以看到以下错误可能是由于文件名太长造成的:
16/03/14 22:45:13 WARN datanode.DataNode: IOException in BlockReceiver.run():
java.io.IOException: Failed to move meta file for ReplicaBeingWritten, blk_1073741825_1001, RBW
getNumBytes() = 7
getBytesOnDisk() = 7
getVisibleLength()= 7
getVolume() = C:\Users\user1\Documents\work\Repos\hadoop-analys\reporting\mrkts-surveillance\target\test-data\9654a646-e923-488a-9e20-46396fd15292\dfscluster_6b264e6b-0218-4f30-ad5b-72e838940b1e\dfs\data\data1\current
getBlockFile() = C:\Users\user1\Documents\work\Repos\hadoop-analys\reporting\mrkts-surveillance\target\test-data\9654a646-e923-488a-9e20-46396fd15292\dfscluster_6b264e6b-0218-4f30-ad5b-72e838940b1e\dfs\data\data1\current\BP-429386217-192.168.1.110-1457991908038\current\rbw\blk_1073741825
bytesAcked=7
bytesOnDisk=7 from C:\Users\user1\Documents\work\Repos\hadoop-analys\reporting\mrkts-surveillance\target\test-data\9654a646-e923-488a-9e20-46396fd15292\dfscluster_6b264e6b-0218-4f30-ad5b-72e838940b1e\dfs\data\data1\current\BP-429386217-192.168.1.110-1457991908038\current\rbw\blk_1073741825_1001.meta to C:\Users\user1\Documents\work\Repos\hadoop-analys\reporting\mrkts-surveillance\target\test-data\9654a646-e923-488a-9e20-46396fd15292\dfscluster_6b264e6b-0218-4f30-ad5b-72e838940b1e\dfs\data\data1\current\BP-429386217-192.168.1.110-1457991908038\current\finalized\subdir0\subdir0\blk_1073741825_1001.meta
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.moveBlockFiles(FsDatasetImpl.java:615)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.BlockPoolSlice.addBlock(BlockPoolSlice.java:250)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsVolumeImpl.addBlock(FsVolumeImpl.java:229)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.finalizeReplica(FsDatasetImpl.java:1119)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.finalizeBlock(FsDatasetImpl.java:1100)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver$PacketResponder.finalizeBlock(BlockReceiver.java:1293)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver$PacketResponder.run(BlockReceiver.java:1233)
at java.lang.Thread.run(Thread.java:745)
Caused by: 3: The system cannot find the path specified.
Run Code Online (Sandbox Code Playgroud)
知道吗,我如何指定 Hbasetestingutility 的基目录而不使用这个庞大的起始目录?
谢谢,
对于通过 Spark Streaming 处理的数据的长期存储(多次写入,少量读取),哪个更好的选择:Parquet、HBase 还是 Cassandra?或者是其他东西?有哪些权衡?
我想将 hbase 类路径添加到我的 spark 中,但是在运行hbase classpath命令时出现错误。
我在 env 中使用 java 1.8 在本地设置了 hadoop 3.2.0。
$ hbase 类路径
/usr/lib/hadoop/libexec/hadoop-functions.sh:第 2364 行:HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_USER:无效的变量名称 /usr/lib/hadoop/libexec/hadoop-functions.sh:第 2459 行:HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_OPTS:无效的变量名错误:无法找到或加载主类org.apache.hadoop.hbase.util.GetJavaProperty
我想优化我对 HBase 的使用以加快写入速度。我有一个任务从 Kafka 主题中读取,然后基于该主题写入 HBase。由于 Kafka 将记录所有要写入的内容,因此很容易从中恢复。我正在阅读“HBase High Perormance Cookbook”,并有以下说明:
请注意,这带来了关于何时使用 WAL 以及何时不使用的有趣想法。默认情况下,WAL 写入处于开启状态,并且数据始终写入 WAL。但是,如果您确定可以重写数据或少量丢失不会影响处理的整体结果,则可以禁用对 WAL 的写入。WAL 提供了简单而明确的恢复。这是默认情况下始终启用它的根本原因。在无法预料数据丢失的情况下,您应该将其保留为默认设置;否则,将其更改为使用 memstore。或者,您可以计划 DR(灾难恢复)
如何将此恢复配置为自动?我看到两个选项:
我该怎么做?