Win10不需要Cygwin搭建大数据测试环境(4)---Hive

时间:2022-12-12 00:26:34

系列文章

1:《Win10不需要Cygwin搭建大数据测试环境(1)-Hadoop》
2:《Win10不需要Cygwin搭建大数据测试环境(2)-HBase》
3:《Win10不需要Cygwin搭建大数据测试环境(3)-Java操作HBase》
4:《Win10不需要Cygwin搭建大数据测试环境(4)-Hive》

前言

这篇文章是系列文章中的第四篇,主要描述了win10系安装Hive。

准备工作

1:完成第一篇教程,确保Hadoop正常运行。
2:下载Hive,我安装的版本是apache-hive-2.1.1-bin。安装路径是D:\apache-hive-2.1.1-bin。
3:设置环境变量 HIVE_HOME=D:\apache-hive-2.1.1-bin。

元数据(metastore)

这个是Hive独有的概念。
怎么理解呢?
HIVE的功能是将HQL翻译成MapReduce在Hadoop上执行。
元数据的功能就是将HQL翻译成MapReduce所需要的数据。
元数据默认存储在Derby中,建议都用关系型数据库。我的例子是使用了MySql。

部署过程

几个关键位置
D:\apache-hive-2.1.1-bin\conf
D:\apache-hive-2.1.1-bin\bin
D:\apache-hive-2.1.1-bin\scripts\metastore\upgrade

1:hive-site.xml

这是至关重要的配置文件。D:\apache-hive-2.1.1-bin\conf下面本没有这个文件。
但是有hive-default.xml.template这个文件,复制一个hive-default.xml.template,重命名为hive-site.xml.

修改如下配置,每个配置都需要搜索名称(name),然后改成自己的配置(value)。以下四项是关于元数据存储的数据库的配置。

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</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>root</value>
<description>password to use against metastore database</description>
</property>

接下来就是修改类似于 “${system:” 的配置了。在hive-site.xml中有很多地方引用了这种形式的变量,但是在实际运行时,在windows环境下这个变量存在问题。因此统一修改成
相对路径 ‘hive_home‘.使相关的文件尽量保存在同一个目录下。
相关的修改如下:

 <property>
<name>hive.exec.local.scratchdir</name>
<value>hive_home/scratch_dir</value>
<description>Local scratch space for Hive jobs</description>
</property>

<property>
<name>hive.downloaded.resources.dir</name>
<value>hive_home/resources_dir/${hive.session.id}_resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>

<property>
<name>hive.querylog.location</name>
<value>hive_home/querylog_dir</value>
<description>Location of Hive run time structured log file</description>
</property>

<property>
<name>hive.server2.logging.operation.log.location</name>
<value>hive_home/operation_dir</value>
<description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>

2:hive-log4j2.properties

将hive-log4j2.properties.template这个文件复制,重命名为hive-log4j2.properties.
将如下内容直接替换。

status = INFO
name = HiveLog4j2
packages = org.apache.hadoop.hive.ql.log

# list of properties
property.hive.log.level = INFO
property.hive.root.logger = DRFA
property.hive.log.dir = hive_log
property.hive.log.file = hive.log
property.hive.perflogger.log.level = INFO

# list of all appenders
appenders = console, DRFA

# console appender
appender.console.type = Console
appender.console.name = console
appender.console.target = SYSTEM_ERR
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{ISO8601} %5p [%t] %c{2}: %m%n

# daily rolling file appender
appender.DRFA.type = RollingRandomAccessFile
appender.DRFA.name = DRFA
appender.DRFA.fileName = ${hive.log.dir}/${hive.log.file}
# Use %pid in the filePattern to append <process-id>@<host-name> to the filename if you want separate log files for different CLI session
appender.DRFA.filePattern = ${hive.log.dir}/${hive.log.file}.%d{yyyy-MM-dd}
appender.DRFA.layout.type = PatternLayout
appender.DRFA.layout.pattern = %d{ISO8601} %5p [%t] %c{2}: %m%n
appender.DRFA.policies.type = Policies
appender.DRFA.policies.time.type = TimeBasedTriggeringPolicy
appender.DRFA.policies.time.interval = 1
appender.DRFA.policies.time.modulate = true
appender.DRFA.strategy.type = DefaultRolloverStrategy
appender.DRFA.strategy.max = 30

# list of all loggers
loggers = NIOServerCnxn, ClientCnxnSocketNIO, DataNucleus, Datastore, JPOX, PerfLogger

logger.NIOServerCnxn.name = org.apache.zookeeper.server.NIOServerCnxn
logger.NIOServerCnxn.level = WARN

logger.ClientCnxnSocketNIO.name = org.apache.zookeeper.ClientCnxnSocketNIO
logger.ClientCnxnSocketNIO.level = WARN

logger.DataNucleus.name = DataNucleus
logger.DataNucleus.level = ERROR

logger.Datastore.name = Datastore
logger.Datastore.level = ERROR

logger.JPOX.name = JPOX
logger.JPOX.level = ERROR

logger.PerfLogger.name = org.apache.hadoop.hive.ql.log.PerfLogger
logger.PerfLogger.level = ${hive.perflogger.log.level}

# root logger
rootLogger.level = ${hive.log.level}
rootLogger.appenderRefs = root
rootLogger.appenderRef.root.ref = ${hive.root.logger}

3:导数据

前面说了元数据需要数据库的支持,默认在linux下,可以使用如下命令完成数据库的初始化

schematool -dbType mysql -initSchema

但是windows下研究了半天好似不行,跟踪了一下执行的命令,最后发现

D:\apache-hive-2.1.1-bin\scripts\metastore\upgrade

这个路径下有数据库初始化的SQL脚本,尝试了一下竟然成功了。

将mysql\hive-schema-2.1.0.mysql.sql这个脚本导入到数据库中。用工具也行,用mysql命令也行。

mysql命令>SOURCE SOURCE D:\apache-hive-2.1.1-bin\scripts\metastore\upgrade\mysql\hive-txn-schema-2.1.0.mysql.sql;

这一步执行应该不会有错误,如果有错误,看是不是选错文件夹了,我第一次选错了。

4:hadoop创建文件夹

hadoop上需要创建目录/user/hive/warehouse/的文件夹

5:启动Hadoop

6:启动hive

启动metastore

>hive --service metastore -hiveconf hive.root.logger=DEBUG

启动hiveserver

>hive --service hiveserver2

启动客户端

>hive --service cli 

如果没有报错,表示win10安装hive成功。

7:执行测试语句

hive>create table test_table(id INT, name string);
hive>show tables;

这个test_table应该可以在Hadoop的路径下看到。

后续内容

beeline的使用
同HBase的整合
同Spark的整合

猜测

Hive和Hadoop的master是部署在一起的,那是否可以理解为Hive实际上是通过环境变量HADOOP_HOME来读取hadoop的配置,同Hadoop进行交互的。
因为Hive中并没有任何Hadoop的配置信息。

主要参考文章

http://blog.csdn.net/cds86333774/article/details/51135954
http://www.cnblogs.com/1130136248wlxk/articles/5517909.html
http://blog.csdn.net/scgaliguodong123_/article/details/52483829
http://blog.csdn.net/zhongguozhichuang/article/details/52702476
http://www.cnblogs.com/hbwxcw/p/5960551.html