一致的Hive和Impala哈希?

问题描述 投票:3回答:1

我正在寻找一种一致的方式来对Hive查询语言和Impala查询语言中的内容进行哈希处理,无论该哈希函数是在Hive还是Impala中完成的,哈希函数都会产生相同的值。为了澄清,我想要类似some_hive_hash_thing(A) = some_other_impala_hash_thing(A)的东西。

对于Hive,我知道有hash()使用MD5(或任何命令here)。对于Impala,我知道有fnv_hash()使用FNV算法。我知道Hive和Impala具有自己的哈希函数,但它们彼此完全不同。

[理想情况下,我正在寻找在Hive中执行fnv_hash的方法,或在Impala中执行MD5的方法。有人有什么建议吗?

hadoop hive impala
1个回答
0
投票

这已经很晚了,但是让我们把它留在这里对其他可能觉得有帮助的人。

“在Impala中执行MD5的方法”是的,您可以在最新发行版中使用Hive在Impala中的任何内置功能(我使用的是CDH 5.12,它与Impala 2.9和hive 1.1一起正常工作)

您可以在此处找到内置函数的列表https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

或者您可以简单地运行SHOW FUNCTIONS;在您的蜂巢控制台中beeline -u jdbc:hive2://localhost:10000

因此,让我们模拟一下从蜂巢到Impala添加MD5功能。

DESCRIBE FUNCTION md5; 

为了确保函数存在并知道输入和输出变量的类型,所以在这里我们知道md5(string)将字符串作为变量,将字符串作为返回类型。

接下来,我们需要使用Jar命令找到包含我们的MD5类的hive-exec jar:

/opt/jdk**/bin/jar tf hive-exec-*.*.*-cdh**.jar | grep Md5

Jar命令通常在您的Java系统信息库的/ bin中,如果尚未在环境变量中对其进行配置。

您可以在../lib/hive/lib/中找到hive-exec-X-X.jar文件,如果找不到,只需使用locate命令即可

所以输出类似于:

 /opt/jdk**/bin/jar tf hive-exec-*.*.*-cdh**.jar | grep Md5
   org/apache/hadoop/hive/ql/udf/UDFMd5.class

保存该路径以供以后使用,但我们将'/'替换为'。'并删除“ .class”像这样 :org.apache.hadoop.hive.ql.udf.UDFMd5

将jar文件复制到HDFS可以访问的目录中,您可以将其重命名为简单的用途,“我将其命名为hive-exec.jar”。

cp /lib/hive/lib/hive-exec.jar  /opt/examples/

chown -R hdfs /opt/examples/

然后创建一个将罐子放入hdfs的位置

sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse/hive_jars

使用以下方式将jar文件复制到HDFS:

sudo -u hdfs hadoop fs -copyFromLocal /opt/examples/hive-exec.jar /user/hive/warehouse/hive_jars/ 

所以现在您只需要转到Impala-shell并连接到数据库,然后使用您到jar的HDFS路径和我们先前同意转换为symbol的.class路径来创建函数。

   Impala-shell>use udfs;
 create function to_md5(string) returns string location '/user/hive/warehouse/hive_jars/hive-exec.jar' symbol='org.apache.hadoop.hive.ql.udf.UDFMd5'; 

这里您可以像使用任何Impala函数一样立即使用它:

select to_md5('test');
    | udfs.to_md5('test')             |
    +----------------------------------+
    | 098f6bcd4621d373cade4e832627b4f6 |

    show functions ;
    Query: show functions
    +-------------+----------------------+-------------+---------------+
    | return type | signature            | binary type | is persistent |
    +-------------+----------------------+-------------+---------------+
    | STRING      | to_md5(STRING)       | JAVA        | false         |
© www.soinside.com 2019 - 2024. All rights reserved.