本文主要介绍hive2.1.1版本编译及调试的一些基本配置。内容参考网上各博主的一些文章,自己搭建环境进行测试,故记录下配置步骤,以供有需要的人使用,避免踩坑。
-------centos7 使用图形化界面
1.获取并安装CentOS默认的图形化界面
yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
2.若有冲突,先移除冲突模块在安装 yum -y remove xxx.noarch
3. 以systemctl get-default 可查看当前默认的模式为 multi-user.target
4.以命令 systemctl set-default graphical.target 修改为图形界面模式
5.再次以命令 systemctl get-default 即可查看当前修改后的默认模式为graphical.target
配置maven
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://maven.ibiblio.org/maven2/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
hive安装
1.vi hive-env.sh
HADOOP_HOME=/opt/module/hadoop-2.7.6
HIVE_CONF_DIR=/opt/module/hive-2.3.3/conf
2.vi hive-log4j2.properties
property.hive.log.dir = /opt/module/hive-2.3.3/logs
3.cp mysql-connector-java-5.1.9.jar /opt/module/hive-2.3.3/lib/
4.vi hive-site.xml
.,$-1d (光标所在行到 倒数第二行)
<!--Hive作业的HDFS根目录位置 -->
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<!--Hive作业的HDFS根目录创建写权限 -->
<property>
<name>hive.scratch.dir.permission</name>
<value>733</value>
</property>
<!--hdfs上hive元数据存放位置 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!--连接数据库地址,名称 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://centos101:3306/hive</value>
</property>
<!--连接数据库驱动 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--连接数据库用户名称 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<!--连接数据库用户密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<!--客户端显示当前查询表的头信息 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!--客户端显示当前数据库名称信息 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.241.101:9083</value>
</property>
5.mysql创建hive用户密码
mysql> CREATE DATABASE hive;
mysql> USE hive;
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
mysql> quit;
6.schematool -dbType mysql -initSchema
7. ./hive --service metastore &
hive --debug -hiveconf hive.root.logger=DEBUG,console
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
hive2.1.1源码编译步骤
一:下载apache-hive-2.1.1-src.tar.gz源码包 http://archive.apache.org/dist/hive/hive-2.1.1/
二:解压 tar -zxvf apache-hive-2.1.1-src.tar.gz
三:执行命令 mvn clean install -DskipTests
clean 清除产生的项目
install 在本地Repository中安装jar
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
(-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。)
四:当显示 BUILD SUCCESS 时候说明编译成功
五:将hive2.1.1 编译成 eclipse项目 执行命令 mvn eclipse:clean (idea项目 mvn idea:idea )
六:执行 mvn eclipse:eclipse -DdownloadSources-DdownloadJavadocs 下载相关源码文件
七:下载eclipse ,自己选择版本号 wget http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/3/eclipse-jee-neon-3-linux-gtk-x86_64.tar.gz
八:解压下载的eclipse jar包,桌面运行eclipse,将hive2.1.1源码文件导入到eclipse中
本地调试:
一:1.在eclipse中设置hadoop的配置文件路径 2.hive的配置路径 3.hive所需要的jar包
window - preferences - java - build path - user libraries ==> new (hive_lib) add external jars 将hive lib下所有的hive相关的包都添加进去
二:在hive-cli 项目中的buildpath libraries中添加hive conf路径 和 hadoop 配置文件路径 add library增加hive_lib
三:新建application测试配置 debug configuration - java application - project 为hive-cli main class 为 org.apache.hadoop.hive.cli.CliDriver ,勾选以下两个include选项
四:此时点击debug 开始debug,但是会报错,需要增加一些配置
(1)通过Eclipse安装datanucleus Help->Install New Software->Work with输入框里输入网址http://www.datanucleus.org/downloads/eclipse-update/ 安装最新版本的即可 注意:勾选掉 concat all update sites during install to find required software 选项 该选项会去更新安装所有已安装的插件所以会比较费时,此时我们不需要
(2)设置datanucleus Window->Preferences->DataNucleus->SchemaTool-> 根据你在hive-default.xml里的配置进行设置Drive Path、Driver Name、Connection URL:
(3)右击Hive源码工程->DataNucleus->Add DataNucleus Support-> Enable Auto-Enhancement
五: (1)若出现 Attempt to invoke the "BONECP" plugin to create a ConnectionPool gave an error : The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
将mysql-connnec-xxx jar包也添加到library里即消除错误
(2)若出现 uery for candidates of org.apache.hadoop.hive.metastore.model.MVersionTable and subclasses resulted in no possible candidates
Persistent class "org.apache.hadoop.hive.metastore.model.MVersionTable" has no table in the database, but the operation requires it.
Please check the specification of the MetaData for this class.org.datanucleus.store.rdbms.exceptions.NoTableManagedException:
Persistent class "org.apache.hadoop.hive.metastore.model.MVersionTable" has no table in the database, but the operation requires it. Please check the specification of the MetaData for this class.
1)开启hive metastore 服务 ./hive --service metastore &
2)在src下新建resources目录,将 hive-site.xml,core-site.xml文件添加进去。必须包含 hive thrift 配置,否则会一直提示warn,程序无法进行下去。
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.241.101:9083</value>
</property>
六:执行debug,在console页面出现hive (default)> 命令行,表明正式调通hive源码环境,在需要查看源码的地方打断点,在命令行执行sql语句即可
远程调试 针对hive高版本
使用hive-debug启动hive调试模式 hive --debug -hiveconf hive.root.logger=DEBUG,console
新建remote java application 输入 启动debug模式的ip地址 和端口号 8000,启动即可
beeline 远程调试
修改 beeline.sh 文件中的HADOOP_CLIENT_OPTS 配置项
添加 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
export HADOOP_CLIENT_OPTS="-Xmx1g -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 $HADOOP_CLIENT_OPTS"
在idea中新建 remote ,输入ip 和 配置的端口号,启动debug模式,需要在执行代码中打断点,此时代码才会在源码中断点处中断。