1. 背景
hive是基于hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供sql查询功能,能将sql转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。
hive要跑起来,需要搭建集群,hadoop集群,配置metastore, sentry,还需要mysql数据库,十分繁琐,不利于初学者快速学习代码。
2. 目标
本文的目标在于介绍hive的本地调试模式,让hive能在本地跑起来,在IDE中进行debug,不需要配置一大堆繁琐的东西。
3. Hive本地调试模式配置
3.1 配置java环境
java环境的配置,网上参考资料不多说。下载jdk,配置java环境变量:
export JAVA_HOME=/home/me/jdk-8u231-linux-x64/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
3.2 配置hadoop环境
不需要安装hadoop,只需下载hadoop,并解压到本地。然后配置HADOOP_HOME环境:export HADOOP_HOME=/home/me/hadoop-2.10.0
3.3 配置hive调试模式:
首先编译hive包,然后执行下面的脚本。下面脚本表示导入hive的配置,然后启动。/home/me/Desktop/code/hive/packaging/target/apache-hive-1.2.2-mdh1.2.2.0-SNAPSHOT-bin为hive编译后包所在的目录。
export HIVE_OPTS='--hiveconf hive.conf.restricted.list=mapred.max.split.size,hive.security.authenticator.manager,hive.security.authorization.manager,hive.users.in.admin.role,mapreduce.input.fileinputformat.split.maxsize --hiveconf mapred.job.tracker=local --hiveconf hive.conf.validation=false --hiveconf fs.default.name=file:///home/me --hiveconf hive.metastore.warehouse.dir=file:///home/me/warehouse --hiveconf javax.jdo.option.ConnectionURL=jdbc:derby:;databaseName=/home/me/warehouse/metastore_db;create=true'
export HIVE_HOME=/home/me/Desktop/code/hive/packaging/target/apache-hive-1.2.2-mdh1.2.2.0-SNAPSHOT-bin/apache-hive-1.2.2-mdh1.2.2.0-SNAPSHOT-bin
/home/me/Desktop/code/hive/packaging/target/apache-hive-1.2.2-mdh1.2.2.0-SNAPSHOT-bin/apache-hive-1.2.2-mdh1.2.2.0-SNAPSHOT-bin/bin/hive --debug -hiveconf hive.support.sql11.reserved.keywords=false -hiveconf hive.root.logger=INFO,console -hiveconf hive.cbo.enable=false -hiveconf hive.reloadable.aux.jars.path=/home/me/hive-extends
启动后会输出一下信息,包括了代理端口:
Listening for transport dt_socket at address: 8000
3.4 IDE配置调试
在InteliJ中Run->Debug->Edit configuration,添加一个Remote类型的配置,指定IP和端口即可。之后可以打断点,执行debug,然后在Terminator中输入查询语句,进行调试了