本文仅对安装过程中主要环节及注意事项作归纳,详细安装过程还请参考文中所提主要引用文章。

【重要提醒】建议你直接在PC上安装Unbuntu作大数据相关测试,如果选择Windows平台,那么请随时准备好与安装噩梦作抗争的勇气!——也不是不可,实在是BUG(很多人也称为“坑”)太多!

本文安装与测试环境:

  • Windows7 SP1 64bits+6G内存(强烈建议8G+)
  • Hadoop 2.7.5
  • Hive 2.3.4
  • MySQL 5.7

一、Hive与Hadoop的关系

Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。Hive十分适合对数据仓库进行统计分析。

既然Hive基于Hadoop,那么必须先顺序安装Hadoop!

二、Hive与MySQL的关系

Hive处理的真实数据存储在Hadoop文件系统中,通常是HDFS中。

其中,Hive的元数据通常存储在关系数据库中!所以,Hive提供了一个服务程序(也就是普通的Windows中的服务程序)Metastore,它用于连接关系数据库来存储元数据。Hive中的元数据包括表的名称、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等。

Metastore连接的关系型数据库一般是Derby或者MySQL。其中,前者是Hive默认使用的,但是只能支持一个Hive会话。在实际开发中,需要使用多个Hive会话进行Hive的相关操作,而MySQL可以支持多个Hive会话,所以在企业中使用MySQL存储Hive元数据的情况更为普遍。

下面即开始痛苦而愉快的安装过程,请作好心理准备!

三、安装Hadoop 2.7.5

在耗费了好几天的时间后,我基本完全参考了引文第2篇描述,顺序安装成功Hadoop 2.7.5!

提醒:当时意向安装是2.7.7,但是几经折腾,都失败,最后直接根据引文第2篇要求操作的,我估计主要根据这个引文安装2.7.7也没有问题(但还没有测试!)

值得感谢的是,引文第2篇中内容提供非常详实,一路走下来基本没有遇到什么挫折!但是,有两个地方补充说明一下:

1.原文中“1.运行cmd窗口,执行“hdfs namenode -format”后继续输入'y',如图...”这个地方,在我的WIN7下不需要输入Y操作,直接等一下即可!

2.到最后,在四窗口未关闭前提下,建议你在命令行下运行jps命令(java内置的java process status),以便更有把握确定Hadoop成功安装并启动!在我的机器上运行jps命令后显示如下:

C:\hadoop-2.7.5\sbin>jps

8176 Jps

6116 NodeManager

5240 NameNode

3612 ResourceManager

5116 DataNode

四、安装MySQL 5.7

其实,Hadoop与MySQL先安装哪一个无所谓。

本文从略,请安装后设置好相关的环境变量等,并记录好相关的管理数据。

还有一点:

安装完这一步后,根据引文3或者4提示,要在MySQL中创建一个空数据库hive,用于存储Hive将来的元数据!

五、安装Hive 2.3.4

在前两者都安装成功的前提下,即可开始安装Hive。安装过程中,我是主要参考引文3,并对比引文4实现的。

其中,引文4最后的安装问题说明部分值得一赞!!!

六、安装Hadoop与Hive中主要注意事项

第一:Hadoop相关开源软件,在现在高版本情况下往往缺少针对Windows平台的.cmd文件的支持(而只提供了.sh文件)。为此,引文3中作者一开始的建议非常可行,即从提供.cmd文件的低版本中覆盖式复制低版本中的.cmd文件来取代高版本对应文件夹是可行的(但是,此操作前一定作好原来文件夹的准备!)。

第二:安装Hadoop过程中需要的 hadooponwindows-master.zip是必需的,目前我也收集了这一文件,而且原文作者还无私地提供了共享百度网盘方式,再次感谢这位朋友!

第三:如上面说的,建议同时下载Hive-2.1.1和Hive-2.3.4,前者用于对后者相应的文件夹进行覆盖!

第四:运行start-all.cmd时系统提示过时了,而应当使用start-dfs.cmd。但是,运行后者在我的机器上出现了两个窗口(而不是如前者的四个窗口,没有深入分析,于是使用了前者)。

第五:在运行“hive --service metastore”这一步,出现错误:

'C:\hive-2.3.4\bin\ext\metastore.cmd' 不是内部或外部命令,也不是可运行的程序或批处理文件。

观察发现:此目录ext下没有.cmd文件,仅有.sh文件!

解决办法是:使用2.1.1的对2.3.4的对应这个ext文件夹直接覆盖!

第六:这一步也非常重要!在解决了上述问题后,再次Hive 执行数据初始化(hive --service metastore)时,总是报错。解决办法如引文4后面所说:

通过Hive 自身携带的脚本,完成Hive 数据库的初始化。

Hive 携带脚本的文件位置(我的机器上C:\hive-2.3.4\scripts\metastore\upgrade\mysql),选择执行SQL的版本,如图:

Windows7成功安装Hive-2.3.4!_hive

问题是:如何使用mysql运行上述脚本,一般来说,你既可以在mysql命令行下也可以使用类似于MySQLWorkbench.exe这样的可视化IDE,但是问题是文件hive-schema-2.3.0.mysql.sql中还使用source命令嵌套调用了上面第二个脚本(SOURCE hive-txn-schema-2.3.0.mysql.sql;),这就涉及到一个路径问题。

我的办法是在MySQLWorkbench中把hive-schema-2.3.0.mysql.sql文件分成三部分(这个文件不到1000行):

文件1:hive-schema-2.3.0.mysql.sql(把语句SOURCE hive-txn-schema-2.3.0.mysql.sql;及其后的所有内容删除),这一句大约在835行!

文件2:hive-txn-schema-2.3.0.mysql.sql

文件3:insert_into_version.sql,此文简短,对应上面第一个文件中,语句SOURCE hive-txn-schema-2.3.0.mysql.sql;后面的所有内容,如下:

use hive;
-- -----------------------------------------------------------------
-- Record schema version. Should be the last step in the init script
-- -----------------------------------------------------------------
INSERT INTO VERSION (VER_ID, SCHEMA_VERSION, VERSION_COMMENT) VALUES (1, '2.3.0', 'Hive release version 2.3.0');

/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2012-08-23 0:56:31

然后,在MySQLWorkbench中依序运行上面三个文件即可!结果是在hive数据库(在MySQLWorkbench中称作schema)中创建了很多空表,如下图:

Windows7成功安装Hive-2.3.4!_hive_02

七、小结

选择在Windows上安装开源软件,就等于选择了与BUG作抗争,这里面的一个诀窍是尽量保持安装环境与引文相一致,再就是:不要轻易根据一个引文即开始操作,而是多多收集一些类似安装引文,好对比操作。

安装不易,开发更麻烦!我想:这也是“程序猿”一词的由来之一吧......

八、重要引文