gpt4 book ai didi

hadoop - Hive 和 Impala 哈希一致吗?

转载 作者:行者123 更新时间:2023-12-02 06:38:17 24 4
gpt4 key购买 nike

我正在寻找一种一致的方法来在 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 的方法。有人有什么建议吗?

最佳答案

这个答案已经太晚了,但让我们将其保留在这里,以供其他可能会发现它有帮助的人使用。

“在 Impala 中执行 MD5 的方法”是的,您可以在最新版本的 Impala 中使用 Hive 的 UDF 内置函数(我使用的是 CDH 5.12,它与 impala 2.9 和 hive 1.1 配合良好) )

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

或者你可以简单地运行显示功能;在你的 hive 控制台中beeline -u jdbc:hive2://localhost:10000

所以我们来模拟一下从 hive 添加 MD5 函数到 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 可访问的目录中,您可以将其重命名以方便使用“我将其命名为 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 路径和​​我们之前同意转换为符号的 .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 |

关于hadoop - Hive 和 Impala 哈希一致吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52226750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com