一致的hive和impala哈希?

6vl6ewon  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(799)

我正在寻找一种一致的方法来散列hive查询语言和impala查询语言中的内容,其中散列函数产生相同的值,而不管它是在hive还是在impala中完成的。澄清一下,我想要 some_hive_hash_thing(A) = some_other_impala_hash_thing(A) .
对于Hive,我知道有 hash() 它使用md5(或者这里的任何命令)。对于 Impala ,我知道有 fnv_hash() 它使用fnv算法。我知道hive和impala有自己的哈希函数,但它们完全不同。
理想情况下,我正在寻找一种方法 fnv_hash 在Hive里,或者在 Impala 里做md5的方法。有人有什么建议吗?

qcuzuvrc

qcuzuvrc1#

现在作为答案已经太迟了,但是让我们把它放在这里,让其他可能觉得有用的人看看。
“在impala中实现md5的方法”是的,在最近的版本中,您可以使用impala中hive的UDF内置功能(我使用的是CDH5.12,它在Impala2.9和Hive1.1中运行良好)
您可以在这里找到内置函数的列表https://cwiki.apache.org/confluence/display/hive/languagemanual+udf
或者你可以直接跑 SHOW FUNCTIONS; 在你的Hive控制台里 beeline -u jdbc:hive2://localhost:10000 让我们模拟一下如何将md5函数从hive添加到impala。

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可以访问的目录中,您可以将其重命名为一个简单的用法“im gonna name it hive exec.jar”。

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

chown -R hdfs /opt/examples/

然后在hdfs中创建一个放置jar的地方

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         |

相关问题