由于自己想知道HiveSQL编译成MapReduce的具体过程,在面试中也有面试官问到了这个问题,所以准备花一段时间看一下底层对应的源码。
我使用的是hive版本2.3.7,hadoop版本2.8.5
源码编译
首先使用git clone hive源码
git clone https://github.com/apache/hive.git
根据自己的环境配置选择相应的分支
查看所有分支 :git branch -a
查看当前使用分支: git branch
切换分支 :git checkout 分支名
或者下载hive的包,我下载的是hive-2.3.7的包:
https://codeload.github.com/apache/hive/tar.gz/refs/tags/rel/release-2.3.7
切换到hive源码的根目录,然后输入以下命令
mvn clean package -DskipTests -Phadoop-2 -Pdist #跳过测试
mvn clean package -Pdist -DskipTests #如果显示Hadoop依赖问题报错则可以去掉Hadoop项
mvn clean package -DskipTests -Dmaven.javadoc.skip=true #跳过文档生成
编译成功的界面如下:
image.jpeg
可能遇到的问题:
1.pentaho-aggdesigner-algorithm:jar缺失
image.jpeg根本原因是阿里云镜像jar包索引不明,按照其他方法提供的更改POM文件中spring镜像仓库依然无法下载jar包,可以手动下载安装,也可以尝试将还原maven默认的仓库地址
mvn install:install-file -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-algorithm -Dversion=5.1.5-jhyde -Dpackaging=jar -Dfile=pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar(jar绝对路径)
2.Java环境问题
在命令行我输入java命令是正常执行的,输入echo $JAVA_HOME也是可以正确输出JAVA_HOME路径,但是执行编译命令一直报错JAVA_HOME没有正确设置
image.jpeg
可以在命令行显式的设置JAVA_HOME,我的是Mac,Windows填写自己配置的路径即可
set JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home
打包成功以后,在/hive-rel-release-2.3.7/packaging/target可以找到编译好的hive包
image.jpeg
环境准备
Hadoop环境以及MySQL
由于Hive运行依赖Hdfs存储真实数据和MySQL存储元数据(模拟生产场景,不使用默认的derby)
在这里不再复述相关环境的搭建与配置,默认Hadoop和MySQL已经配置好了
Hive环境配置
使用命令生成hive-site.xml文件
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
<!-- 需要修改的配置如下:-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:MySQL://localhost1:3306/hive?useSSL=false&characterEncoding=UTF-8</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>
Enforce metastore schema version consistency.
True: Verify that version information stored in is compatible with one from Hive jars. Also disable automatic
schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
proper metastore schema migration. (Default)
False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
</description>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
对文件hive-env.sh进行编辑,找到HADOOP_HOME,对其更改成我们自己的Hadoop目录。
HADOOP_HOME=/Users/yanhaowen/bigdata_tools/hadoop-2.8.5
hive-site.xml的默认配置项有些多,如果直接找我们想要修改的配置,不是很容易,所以我们可以使用vim的快速查找功能
1.按esc退出insert
2./+想要查找的内容,回车
例如:/JDBC 回车,就会定位到文件中的JDBC的地方
如果有多个匹配成功的,可以通过n或N进行上一个或下一个的匹配
由于使用的是MySQL数据库存储元数据,需要添加mysql相应jar包到lib目录下
例如:mysql-connector-java-5.1.49-bin.jar
配置完成后,初始化hive服务
bin/schematool -dbType mysql -initSchema
如果初始化过程中遇到问题,那么可以使用下面的命令来查看详细信息:
schematool -dbType mysql -initSchema --verbose
完成后,启动元数据服务
nohup hive --service metastore &
image.jpeg
也可以通过命令查看hive服务
ps -ef |grep hive
然后启动hive客户端,最简单的启动hive脚本
image.jpeg然后启动hive客户端,最简单的启动hive脚本
image.jpeg至此,本地环境搭建完成。
参考:
网友评论