小编Ram*_*Ram的帖子

调整使用底层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
查看次数

如何在给定字符串中的四个空格后获取子字符串?

我有类似的字符串"align is going to school sad may me".我想在四个空格后得到子字符串.字符串将在运行时输入.任何人都可以建议我在一些空格后找到Sub String ......

String st = "align is going to school sad may me";

int i = 0;
String [] strings = new String [15];
StringTokenizer stringTokenizer = new StringTokenizer (st, " ");

while (stringTokenizer.hasMoreElements ())
{
    strings [i]= (String)stringTokenizer.nextElement ();
    i++;
}
System.out.println ("I value is" + i);

for (int j=4; j<i; j++)
{
    System.out.print (strings[j] + " ");
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了这个,它的工作可以请你建议我在一些空格后找到Sub字符串的简单方法.

java

5
推荐指数
2
解决办法
9406
查看次数

如何将文件从ASCII转换为UTF-8?

我正在尝试将一堆文件从ASCII转码为UTF-8.

为此,我尝试使用iconv:

iconv -f US-ASCII -t UTF-8 infile > outfile
Run Code Online (Sandbox Code Playgroud)

-f ENCODING 输入的编码

-t ENCODING 输出的编码

该文件仍未转换为UTF-8.它是一个.dat文件.

在发布之前,我搜索了Google并找到了以下信息:

ASCII是UTF-8的子集,因此所有ASCII文件都已经过UTF-8编码.ASCII文件中的字节和"将其编码为UTF-8"所产生的字节将完全相同.它们之间没有区别.

强制编码从US-ASCII到UTF-8(iconv)

在字符集之间转换文本文件的最佳方法?

上述链接仍无济于事.

即使它是ASCII格式,它也支持UTF-8,因为UTF-8是一个超级集合,另一方要接收我的文件需要文件编码为UTF-8.他只需要文件格式为UTF-8.

请给我任何建议.

unix linux encoding ascii utf-8

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

Java平台独立性如何运作?

我在64位编译器上执行了一个java程序,并为该程序生成了字节代码.是否可以在32位编译器上运行相同的字节代码而不会丢失数据?

在我的程序中,我已经x=10024在64位编译器上声明了一个变量?
那么32位编译器中x的值是多少?如果x的值相同,如何在不丢失数据的情况下如何?你能详细说明吗?

java jvm bytecode

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

标签 统计

java ×2

ascii ×1

bytecode ×1

encoding ×1

hadoop ×1

hbase ×1

hive ×1

integration ×1

jvm ×1

linux ×1

performance ×1

unix ×1

utf-8 ×1