IT人生

  • 首页
  • 归档
  • kafka
  • Java
  • Spring
  • Golang
  • SQL
  • Spark
  • ElasticSearch
  • 关于

  • 搜索
Phoenix HBase Kudu ElasticSearch Spring 数据结构 操作系统 Kettle Azkaban Sqoop Hive Yarn Redis Mybatis Impala Cloudera 大数据 HDFS mycat shell Linux 架构 并发 mysql sql golang java 工具 spark kafka 人生

Impala安装json解析udf插件

发表于 2018-06-28 | 分类于 Impala | 0 | 阅读次数 1730

背景

Impala跟Hive一样,是常用的数据仓库组件之一。熟悉Hive的同学肯定知道,Hive官方提供了get_json_object函数用于处理json字符串,但是Impala官方并没有提供类似的方法,好在是有第三方实现了一个类似的udf扩展,只需进行编译安装后,就可以在Impala中处理json字符串了。

环境介绍 cdh 5.10.1 centos 6.8 impala 2.7.0

1、下载安装第三方软件

由于Impala是用c++编写的,所以安装Impala的udf时,需要进行编译,所以我们需要先下载编译相关的第三方软件,比如gcc等:

sudo yum install -y gcc-c++ cmake boost-devel

2、安装Impala UDF SDK

下载rpm,然后进行install。这里我们一定要注意,我们不能安装最新版的SDK,因为最新版的SDK还有bug,所以我们需要下载老版的SDK,具体讨论请见这里:

wget https://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/5.10.1/RPMS/x86_64/impala-udf-devel-2.7.0+cdh5.10.1+0-1.cdh5.10.1.p0.8.el6.x86_64.rpm
rpm -ivh impala-udf-devel-2.7.0+cdh5.10.1+0-1.cdh5.10.1.p0.8.el6.x86_64.rpm

3、下载udf代码

第三方实现的json解析udf代码位于:https://github.com/nazgul33/impala-get-json-object-udf。下载的方式有很多,我们可以clone,或者直接下载zip压缩包。下载好了之后解压:

wget https://codeload.github.com/nazgul33/impala-get-json-object-udf/zip/master
unzip impala-get-json-object-udf-master.zip

4、编译

进入刚才的目录,然后编译:

cd impala-get-json-object-udf-master
cmake .
make

5、上传扩展至hdfs

Impala加载扩展时默认从hdfs上读取,所以我们需要将编译好的udf扩展上传至hdfs上。

hdfs dfs -mkdir /user/udf
dfs dfs -put build/libjsonUdf.so /user/udf

6、使用扩展

进入impala-shell,创建udf函数,并且尝试使用:

impala-shell> use test_db;
impala-shell> CREATE FUNCTION json_get_object (string, string) RETURNS string location '/user/udf/libjsonUdf.so' symbol='JsonGetObject';
impala-shell> SELECT json_get_object('{"name":"steven"}', '$.name');
+----------------------------------------------------------------+
| user_activities.json_get_object('{"name":"steven"}', '$.name') |
+----------------------------------------------------------------+
| steven                                                         |
+----------------------------------------------------------------+

可以看到,我们的扩展已经生效了!

7、其他

当然Impala也支持直接导入Hive中的函数作为自己的udf,但是因为Hive是用java编写的,所以性能上没有c++ 来得快。如果可以的话,还是尽量用c++编写Impala的扩展。

  • 本文作者: Randy
  • 本文链接: http://www.itrensheng.com/archives/impala_udf
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Phoenix # HBase # Kudu # ElasticSearch # Spring # 数据结构 # 操作系统 # Kettle # Azkaban # Sqoop # Hive # Yarn # Redis # Mybatis # Impala # Cloudera # 大数据 # HDFS # mycat # shell # Linux # 架构 # 并发 # mysql # sql # golang # java # 工具 # spark # kafka # 人生
闲话高并发的那些神话,看京东架构师如何把它拉下神坛
Mysql分区表及自动创建分区Partition
  • 文章目录
  • 站点概览
Randy

Randy

技术可以暂时落后,但任何时候都要有上进的信念

80 日志
27 分类
31 标签
RSS
Github E-mail
Creative Commons
© 2021 备案号:沪ICP备19020689号-1
Randy的个人网站