一种hive持久化函数的控制方法及系统与流程

文档序号:12124590阅读:1046来源:国知局

本发明涉及大数据处理的技术领域,尤其涉及一种hive持久化函数的控制方法,以及hive持久化函数的控制系统。



背景技术:

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

在hive平台上做大数据计算时通用会使用到UDF(User-Defined Functions,用户定义函数),主要是由于UDF非常灵活易用,用户可以在UDF中实现非常复杂的逻辑运算,在某些情况下UDF具有不可替代的作用。

在hive中建立持久化UDF的时候需要在每个数据库中执行一遍create function UDF名as包命using jar‘集群路径’的命令,即创建UDF名称并通过指定已经上传到集群中jar包的某个类完成该UDF的定义。在对UDF进行删除等操作也是如此。例如,中国专利申请(申请号:CN201410483891.0)提供了一种Hive中自制用户提取信息工具的方法和装置。

如果需要加载UDF的数据库很多,则对UDF的添加、删除等操作将非常费时费力。如果只在一个数据库下建立UDF,在其他数据库中使用该UDF时,则需要在UDF名前添加该UDF所在数据库的名称,即:数据库名.UDF名。这虽然降低了建立UDF的复杂性,却使UDF的使用变得复杂。



技术实现要素:

为克服现有技术的缺陷,本发明要解决的技术问题是提供了一种hive持久化函数的控制方法,其使得在大量数据库需要添加UDF时操作变得方便,增强了可维护性,使得UDF具有更强的易用性,保证了UDF的灵活性和安全性。

本发明的技术方案是:这种hive持久化函数的控制方法,该方法包括以下步骤:

(1)修改hive的源代码,以便在不指定数据库域名时,使hive的读取和存储UDF信息的操作指向default数据库;

(2)优化hive的部署;

(3)建立跨库UDF:在hive中的任意一个数据库下,用create function建立跨库UDF。

本发明通过在hive中的任意一个数据库中创建UDF,则可以在hive中所有库中跨库访问该UDF,而不必在每个数据库中都创建一遍UDF。使得在大量数据库需要添加UDF时操作变得方便,增强了可维护性;在hive的各个数据库中使用UDF时,可以像使用hive内置的函数一样方便,不需要添加任何数据库域名前缀,使得UDF具有更强的易用性;依然可以创建个别数据库自有的UDF,只需添加数据库域名前缀即可,保证了UDF的灵活性和安全性。

还提供了一种hive持久化函数的控制系统,该系统包括:

hive的源代码修改模块,其配置来检查输入的参数是否合法;

部署优化模块,其配置来优化hive的部署;

跨库UDF建立模块,其配置来在hive中的任意一个数据库下,用create function建立跨库UDF。

附图说明

图1所示为根据本发明的hive持久化函数的控制方法的流程图。

具体实施方式

如图1所示,这种hive持久化函数的控制方法,该方法包括以下步骤:

(1)修改hive的源代码,以便在不指定数据库域名时,使hive的读取和存储UDF信息的操作指向default数据库;

(2)优化hive的部署;

(3)建立跨库UDF:在hive中的任意一个数据库下,用create function建立跨库UDF。

本发明通过在hive中的任意一个数据库中创建UDF,则可以在hive中所有库中跨库访问该UDF,而不必在每个数据库中都创建一遍UDF。使得在大量数据库需要添加UDF时操作变得方便,增强了可维护性;在hive的各个数据库中使用UDF时,可以像使用hive内置的函数一样方便,不需要添加任何数据库域名前缀,使得UDF具有更强的易用性;依然可以创建个别数据库自有的UDF,只需添加数据库域名前缀即可,保证了UDF的灵活性和安全性。

另外,所述步骤(1)中,首先修改类FunctionRegistry中getFunctionInfoFromMetastore函数和getFunctionInfo,将其中的dbName=SessionState.get().getCurrentDatabase().toLowerCase()替换为dbName=default;再修改类FunctionUtils类中的getQualifiedFunctionNamePart函数,将其中的String dbName=SessionState.get().getCurrentDatabase()替换为dbName=default。

另外,所述步骤(2)中,将修改好的hive文件中的ql工程用mvn编译成jar包,在含有pom.xml的项目路径下执行mvn package,生成包含依赖的jar文件,然后用该jar包替换机器上原有的jar包。

另外,所述步骤(3)中,在任意数据库下,创建UDF名称,并通过指定已经上传到集群中jar包的一个类完成该UDF的定义,从而建立跨库访问的UDF。具体地,执行create function UDF名as包名.类名,使用jar包在hadoop集群中的路径。

另外,该方法还包括步骤(4),在创建UDF时,如果添加数据库域名前缀,则UDF建立在该数据库下。

本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而所述的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。因此,与本发明的方法相对应的,本发明还同时包括一种hive持久化函数的控制系统,该系统通常以与方法各步骤相对应的功能模块的形式表示。使用该方法的系统包括:

hive的源代码修改模块,其配置来检查输入的参数是否合法;

部署优化模块,其配置来优化hive的部署;

跨库UDF建立模块,其配置来在hive中的任意一个数据库下,用create function建立跨库UDF。

本发明的有益效果如下:

1.通过在hive中的任意一个数据库中创建UDF,则可以在hive中所有库中跨库访问该UDF,而不必在每个数据库中都创建一遍UDF。使得在大量数据库需要添加UDF时操作变得方便,增强了可维护性。

2.在hive的各个数据库中使用UDF时,可以像使用hive内置的函数一样方便,不需要添加任何数据库域名前缀,使得UDF具有更强的易用性。

3.依然可以创建个别数据库自有的UDF,只需添加数据库域名前缀即可,保证了UDF的灵活性和安全性。

以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1