Bootstrap

hive2.1.1源码编译及调试

本文主要介绍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模式,需要在执行代码中打断点,此时代码才会在源码中断点处中断。

;