• Hive 引擎介绍
    • 1.Hive引擎的使用
    • 2.Hive引擎实现方式
    • 3.适配自己的hive版本
    • 4.未来的目标

    Hive 引擎介绍

    1.Hive引擎的使用

            Linkis实现的Hive执行引擎现在支持HiveQL的提交,用户通过Linkis使用文档中的三种接口方式(SDK, HTTP, WebSocket)提交自己的执行代码,就可以将自己的HiveQL提交到的集群中进行执行。

            想要使用Linkis系统执行HiveQL程序,需要下载Linkis的release安装包并配置、安装并启动指定的指定的微服务。

    1.1 环境变量配置

            Hive引擎依赖的环境变量:HADOOP_HOME、HADOOP_CONF_DIR、HIVE_HOME以及HIVE_CONF_DIR。

            在启动hive执行引擎相关的微服务之前,请确保以上环境变量是已经设置的,如果没有设置的话,请先在/home/${USER}/.bash_rc 或 linkis-ujes-spark-enginemanager/conf目录中的 linkis.properties配置文件中设置。如以下所示

    1. HADOOP_HOME=${真实的hadoop安装目录}
    2. HADOOP_CONF_DIR=${真实的hadoop配置目录}
    3. HIVE_CONF_DIR=${真实的hive配置目录}
    4. HIVE_HOME=${真实的hive安装目录 }

    1.2 依赖服务启动

    Hive引擎的启动,需要依赖以下的Linkis微服务:

    • 1)、Eureka: 用于服务注册于发现。
    • 2)、Linkis-gateway: 用于用户请求转发。
    • 3)、Linkis-publicService: 提供持久化、udf等基础功能。
    • 4)、Linkis-ResourceManager:提供Linkis的资源管理功能。

    1.3 自定义参数配置

            正常使用hive,还需要启动HiveEntrance 和 HiveEngineManager。

            HiveEntrance是hive作业的接受者,HiveEngineManager是HiveEngine的启动者。

            启动之前,用户可以设置关于hive引擎的自定义参数。

            Linkis考虑到用户希望能够更自由地设置参数,提供了许多的配置参数。

            下表有一些常用的参数,Hive引擎支持配置更多的参数以获得更好的性能,如您有调优需求,欢迎阅读调优手册。

            用户可以在linkis.properties中配置这些参数。

    参数名称 参考值 说明
    wds.linkis.enginemanager.memory.max 40G 用于指定hiveEM启动的所有引擎的客户端的总内存
    wds.linkis.enginemanager.cores.max 20 用于指定hiveEM启动的所有引擎的客户端的总CPU核数
    wds.linkis.enginemanager.engine.instances.max 10 用于指定hiveEM可以启动的引擎个数

    1.4 前端部署

            上述微服务启动部署启动成功之后,用户如需要通过web浏览器来提交自己的HiveQL代码。可以通过部署配置微众另一款开源的前端产品Scriptis,该产品让用户能在web页面上编辑、提交代码,并能够实时接收后台给的信息。

    1.5运行效果图

    Hive运行效果图1
    图1 Hive运行效果图1

    Hive运行效果图2
    图2 Hive运行效果图2

    2.Hive引擎实现方式

            Hive执行引擎的实现,是参照Linkis开发文档实现了Entrance、EngineManager和Engine三个模块的必要接口,其中Engine模块是最特殊的,Hive实现的方式也有自己的一套逻辑。

            Linkis现在提供的Release版本基于的hadoop版本是2.7.2, hive版本是1.2.1,两者都是apache版本。

            Linkis的Hive引擎与底层hive进行交互主要是通过HiveEngineExecutor这个类,该类是由HiveEngineExecutorFactory这个bean进行实例化。

            HiveEngineExecutor实现的executeLine接口中,Linkis通过使用的hive提供的CommandProcessFactory类,传入本地的hive的配置信息,得到一个org.apache.hadoop.hive.ql.Driver类,Driver类提供了API帮助提交用户的脚本代码到集群中执行。

            Driver在提交hive sql代码之后,有提供执行是否成功以及获取成功之后获取结果集的API。如果执行成功,借助Linkis提供的统一存储服务,将结果集存储到指定的目录当中以供用户查看。

            另外,Driver在提交hive sql之后,如果产生了mapreduce任务,我们也可以通过HadoopJobExecHelper提供的killRunningJobs的API将已经提交的hive查询任务杀死,这就是用户前台kill任务的逻辑。

            还有一点,Linkis的hive引擎还实现了进度功能。具体是通过HadoopJobExecHelper的runningJobs字段,获取正在运行的MR任务,然后这些MR任务都有相应map和reduce的进度,将他们做一个数学计算就可以获得任务的总进度,需要注意的是runningJobs是正在运行的MR job,一旦执行完就会从List中删除,所以最开始还需要获取sql的执行计划,具体可以参看代码的实现。

    3.适配自己的hive版本

            由于Linkis现在的版本是支持1.2.1的apache版本,很多用户的集群可能并不和我们公司一致,所以需要自己重新编译Hive执行引擎。

            举一个例子,如果用户使用的是1.1.0的cdh版本,他需要在顶层的pom.xml将hive.version改成指定的版本然后进行编译。

    我们在适配的时候,也发现有jar包有冲突,这需要用户查看日志来进行排除,如果还是无法确定原因,欢迎加群咨询。

    微信及QQ群

    4.未来的目标

    1.无缝地适配更多的hive版本。 2.部署方式更加简单,尝试使用容器化的方式。 3.功能更加完善,在执行进度、数据精度等方面做的更加准确和完备