十分钟带你走进Hive世界(每走一步都是为了离你更近些)

2023-10-26

该文章已更新到语雀中,后台回复“语雀”可获取进击吧大数据整个职业生涯持续更新的所有资料

该文基于Hive专题-从SQL聊Hive底层执行原理进一步的深入学习Hive,相信大多数童鞋对于Hive底层的执行流程只是局限于理论层面。那么本篇将带大家花半个小时左右的时间在自己的机器上实现Hive源码的追踪。通过本篇,你将可以学习到:
1、各个组件的安装部署
2、解决问题思路能力
3、自己动手实现本地调试Hive源码,即本地提交sql更加贴切追溯底层流程

网上也有很多类似的实现文章,但大多数比较零散。本篇将带你从零到1完整的实现该功能。注意:本篇涉及到所有基础软件包以及执行文件均已上传到语雀文档中且本篇****基于Windows整理

环境准备

一、Maven安装

1.1、下载软件包并解压缩

该软件包已经上传到语雀文档中,有需要的童鞋可以在后台回复"语雀"领取,如密码失效,请联系小编

1.2、配置环境变量

1.3、配置maven镜像

打开$MAVEN_HOME/conf/settings.xml文件,调整maven仓库地址以及镜像地址

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                            https://maven.apache.org/xsd/settings-1.0.0.xsd">
        <localRepository>你自己的路径</localRepository>
      <mirrors>
         <mirror>
           <id>alimaven</id>
           <name>aliyun maven</name>
           <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
           <mirrorOf>central</mirrorOf>        
         </mirror>
      </mirrors>
</settings>

二、cywin安装

该软件安装主要是为了支持windows编译源码涉及到的基础环境包

2.1、下载软件包

该软件包已经上传到语雀文档中,有需要的童鞋可以在后台回复"语雀"领取,如密码失效,请联系小编

2.2、在线安装相关软件包

需要安装cywin,gcc+相关的编译包

binutils 
gcc 
gcc-mingw 
gdb

三、JDK安装

3.1、下载软件包并解压缩

该软件包已经上传到语雀文档中,有需要的童鞋可以在后台回复"语雀"领取,如密码失效,请联系小编

3.2、配置环境变量

3.2.1、创建JAVA_HOME系统变量

3.2.2、创建CLASSPATH变量3.2.3、Path变量追加

四、Hadoop安装

4.1、下载软件包并解压缩

该软件包已经上传到语雀文档中,有需要的童鞋可以在后台回复"语雀"领取,如密码失效,请联系小编

4.2、配置环境变量

创建HADOOP_HOME系统变量,然后将该变量追加到Path全局变量中

4.3、编辑配置文件

注意:下载的软件包中可能不包含下列的文件,但提供了template文件,直接重命名即可。由于该篇是属于学习自用,所以只需要配置基础核心信息即可。下列文件位于$HADOOP_HOME/etc/hadoop目录下。

4.3.1、修改core-site.xml文件

<configuration>
 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>  
</configuration>

4.3.2、修改yarn-site.xml文件

<configuration>

<!-- Site specific YARN configuration properties -->
   <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>

</configuration>

4.3.3、修改mapred-site.xml文件

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

</configuration>

4.4、依赖文件

在Windows环境下启动Hadoop,需要专门的二进制文件和依赖库,即winutils支持和hadoop.dll等文件。需要把该文件放到HADOOP_HOME/bin目录下,同时可以将hadoop.dll放到C:\Windows\System32下一份避免出现依赖性错误。

4.5、初始化启动

以下命令在cmd命令行中,跳转到HADOOP_HOME/bin目录下和HADOOP_HOME/sbin目录下执行

# 首先初始化namenode,打开cmd执行下面的命令
$HADOOP_HOME/bin> hadoop namenode -format

# 当初始化完成后,启动hadoop
$HADOOP_HOME/sbin> start-all.cmd

当以下进程都启动成功后,hadoop基本环境也算是搭建成功了!

五、Mysql安装

5.1、下载软件包并解压缩

该软件包已经上传到语雀文档中,有需要的童鞋可以在后台回复"语雀"领取,如密码失效,请联系小编

5.2、配置环境变量

5.2.1、创建MYSQL_HOME变量5.2.2、将MYSQL_HOME变量追加到Path变量中

5.3、生成Data文件

使用系统管理员打开CMD窗口

--执行下面命令
mysqld --initialize-insecure --user=mysql 

5.4、安装Mysql并启动

--执行命令
mysqld -install

--启动服务
net start MySQL

5.5、密码修改

--初始登录时不需要密码,直接回车即可
mysql -u root -p

--修改root默认密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

--刷新提交
 flush privileges;  

六、Hive编译安装

如果你想要深入学习Hive底层,那么源码编译是必不可少的,所以本篇将采用源码包编译安装的方式。

6.1、下载软件包并解压缩

该软件包已经上传到语雀文档中,有需要的童鞋可以在后台回复"语雀"领取,如密码失效,请联系小编

6.2、编译

在IDEA下执行如下命令:

mvn clean package -Phadoop-2 -DskipTests -Pdist

当编译结果如上图所示,则表示编译成功,可以进入下一步。
注意:在编译的过程中遇到问题的可能性非常大,大部分是因为maven,可能是网络问题,也可能跟你的镜像配置也有关系。另外对于一些模块编译过程中出现Could not transfer artifact XXXX的问题,可以先把pom文件中的scope设置注释掉!

6.3、安装

编译完成后,可以在$HIVE_SRC_HOME/packaging/target目录下找到对应的可执行的压缩包6.3.1、配置环境变量
创建HIVE_HOME系统变量,然后将该变量追加引用到Path变量中6.3.2、编辑hive-env.sh文件

# 配置环境信息
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=D:\GitCode\hadoop-2.7.2

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=D:\GitCode\apache-hive-2.3.9-bin\conf

# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=D:\GitCode\apache-hive-2.3.9-bin\lib

6.3.3、编辑hive-site.xml文件
该文件中的参数稍微有些多,不过我们只改动基础的部分即可。

<property>
    <name>hive.repl.rootdir</name>
    <value>D:\GitCode\apache-hive-2.3.9-bin\tmp_local</value>
  </property>
  
   <property>
    <name>hive.repl.cmrootdir</name>
    <value>D:\GitCode\apache-hive-2.3.9-bin\tmp_local</value>
  </property>
  
   <property>
    <name>hive.exec.local.scratchdir</name>
    <value>D:\GitCode\apache-hive-2.3.9-bin\tmp_local</value>
  </property>
  
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>D:\GitCode\apache-hive-2.3.9-bin\tmp_local\${hive.session.id}_resources</value>
  </property>
  
  <property>
    <name>hive.querylog.location</name>
    <value>D:\GitCode\apache-hive-2.3.9-bin\tmp_local</value>
  </property>
  
   <property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>D:\GitCode\apache-hive-2.3.9-bin\tmp_local</value>
   </property>
  
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>

6.3.3、log文件重命名
将conf文件中的几个Log文件后缀带有template移除即可6.3.4、驱动包加载
本文使用mysql作为元数据存储,因此需要将JDBC的驱动包放到$HIVE_HOME/lib目录下

6.4、元数据初始化

在windows环境下,$HIVE_HOME/bin目录下并未找到cmd结尾的可执行文件,因此为了调通基础环境,可以从低版本中进行拷贝。本文涉及到的脚本和软件包都打包上传到云盘中

# 打开cmd命令行
$HIVE_HOME/bin> hive schematool -dbType mysql -initSchema  --verbose 

注意:在初始化过程中,可能会有表无法创建的问题,这里手动创建即可。或者直接source sql文件。本篇文章使用的是hive-shceam-2.3.0.mysql.sql,SQL文件位置于HIVE_HOME/scripts/metastore/upgrade/mysql下:

服务启动调试

在搭建Hadoop的环节中,已经将Hadoop服务启动了,这里将Hive Metastore服务启动

hive --service metastore

2.1、服务端启动Debug模式

为了方便学习,大家可以在IDEA中打开Terminal,开启debug模式和metastore服务启动。

hive --debug

2.2、客户端断点模式

2.2.1、配置remote debug
在IDEA中配置Remote DeBug信息2.2.2、断点标识
本文是在客户端进行源码追溯,所以一般会进入CliDriver类中,比如在main方法中打上断点,然后开始Debug到这里,整个调试功能就已经实现了,大家可以在本地编写HSQL,然后根据断点深入学习Hive底层具体的执行流程,甚至自己改造源码!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十分钟带你走进Hive世界(每走一步都是为了离你更近些) 的相关文章

随机推荐

  • 【Unity】SafeArea适配大小

    通过使用SafeArea 修改stretch适配类型的UI画布的Top偏移 适应安卓异型屏幕
  • rust nom 实现一个简单的sql解析器

    rust nom 实现一个简单的sql解析器 祝福 前言 分析 字段 表 查询语句 编码 关键字 字符规则 alias 字段 常规格式的字段处理 字符串格式字段处理 子查询处理 字段处理汇总 表 整个查询语句 结尾 祝福 过年期间 新型冠状
  • socket error总结

    Socket error 0 Directly send error Socket error 10004 Interrupted function call Socket error 10013 Permission denied Soc
  • nfs 成功挂载后,写入时出现permission denied的解决

    nfs服务器端 etc exports文件中已指定 rw 可读可写 在客户端也能正常挂载 可在向挂载目录里写入内容提示 permission denied 后来才搞清楚 nfs在服务器端导出的目录 也有一定权限要求 当把服务端导出目录 修改
  • T88合并两个有序数组

    题目 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2 请你将 nums2 合并到 nums1 中 使 nums1 成为一个有序数组 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 你可以假设 nums1
  • DropDownList控件的数据绑定

    DropDownList控件如何进行数据绑定 简单方法 在单击控件的向右箭头 在 编辑项 里面进行编辑添加 如下图所示 在前台代码中添加 方法一 在页面初始化时候将集合绑定到DropDownList 人工绑定 public void Pag
  • 致 Python 初学者

    文章目录 1 前言 2 明确学习目标 不急于求成 不好高骛远 3 在开始学习 Python 之前 你需要做一些准备 2 1 Python 的各种发行版 2 2 安装 Python 2 3 选择一款趁手的开发工具 3 习惯使用IDLE 这是学
  • 未来城市规划

    未来城市规划 题目描述 n n n 个节点的树 m m m 次操作 每个边都有初始边权 c
  • Kubernetes将会在1.24版本中弃用dockershim

    点击上方 分布式实验室 关注公众号 回复 1 抽取技术书 Kubernetes 计划在即将发布的 1 24 版本里弃用并移除 dockershim 使用 Docker 引擎作为其 Kubernetes 集群的容器运行时的工作流或系统需要在升
  • MFC的静态库.lib、动态库.dll(包含引入库.lib)以及Unicode库示例

    以vs2012为标准 转自 http technet microsoft com zh cn library w4zd66ye 有改动 一 MFC的静态库 lib MFC静态库使用下列命名约定 uAFXcWd LIB 库命名约定的说明符如下
  • VOSviewer 操作指南 简明

    VOSviewer 操作指南 Vosviewer 软件是一种知识图谱可视化软件 并且可以使用基本的分类聚类方法 帮助我们得到进一步的信息 下载地址 https www vosviewer com download 解压完成后 你得到因该是一
  • 27 个为什么,帮助你更好的理解Python

    选自 Python官方文档 https docs python org zh cn 3 7 faq design html
  • pytorch报错:RuntimeError: CUDA error: device-side assert triggered究极解决方案

    原因 模型的数据处理出了问题 一般是类似于数组访问越界的问题 1 例如分类的标签是数据处理的时候是1 10 但是torch在计算交叉熵是默认是0 9 2 embedding模块的词表长度问题 比如embedding中词表总长度是100 但是
  • Unix时间与Win32 FileTime时间

    Unix 时间 1970 01 01 00 00 00 与 Win32 FileTime 时间 1601 01 01 00 00 00 两者相差毫秒数为 11644473600000L Win32 FileTime 采用 100ns 为单位
  • Postgres安装

    准备工作 1 查看自己的电脑是多少位 cmd界面中输入 systeminfo 按回车 主要是看一下系统类型 系统类型 64 位操作系统 基于 x64 的处理器 版本 Windows 10 专业版 版本号 20H2 安装日期 2021 10
  • 【IDEA】idea 调试技巧 查看字段 什么时候修改的

    文章目录 1 概述 1 概述 如果你阅读源码 你一定会有个困扰 类中的某个字段的值到底是在哪里改变的 你要一点点追踪调用栈 逐步排查 稍不留神 就可能有遗漏 我们可以在 IntelliJ IDEA 中为某个字段添加断点 当字段值有修改时 自
  • es--基础--06--es集群

    es 基础 06 es集群 1 集群概念 概念看es入门学习3 理论 2 集群的搭建 利用原有的单机 elasticsearch 5 6 8 来搭建 搭建三台es服务器 分别提供的端口是9201 9202 9203 2 1 停止elasti
  • 特征选择策略:为检测乳腺癌生物标志物寻找新出口

    内容一览 microRNA 小分子核糖核酸 是一类短小的单链非编码 RNA 转录体 这些分子在多种恶性肿瘤中呈现失控性生长 因此近年来被诸多研究确定为确诊癌症的可靠的生物标志物 biomarker 在多种病理分析中 差异表达分析 Diffe
  • 解决Dropbox国内无法实时更新的问题

    Dropbox软件需要在全局模式下才能时时同步 但全局模式下无法打开某些国内网站 所以需要解决该问题 解决方法 通过设置代理的方式让Dropbox软件自动同步 但在尝试中 设置为socks5代理发现不能使用 改为http代理 马上生效 打开
  • 十分钟带你走进Hive世界(每走一步都是为了离你更近些)

    该文章已更新到语雀中 后台回复 语雀 可获取进击吧大数据整个职业生涯持续更新的所有资料 该文基于Hive专题 从SQL聊Hive底层执行原理进一步的深入学习Hive 相信大多数童鞋对于Hive底层的执行流程只是局限于理论层面 那么本篇将带大