一、前言
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive是由Facebook贡献给Apache的开源项目,这个工具可以说是完全为DBA而生,它的的目标,是希望能让精通SQL但不熟悉JAVA编程的工程师,在HADOOP的大潮中不至于下岗待业,即使完全不懂JAVA,也能在HDFS数据分析中继续发挥光和热。Hive是做什么呢,个人理解可以将其视为一个SQL语言的解释器,它能将DBA提交的SQL语句,转换成能够在HADOOP上执行的M-R作业,对于DBA或前端用户来说,不必再将精力花在编写M-R应用上,直接借助SQL的易用性来实现大规模数据的查询和分析。
与Hadoop类似,Hive也有三种运行模式:
1.内嵌模式:将元数据保存在本地内嵌的Derby数据库中,这得使用Hive最简单的方式,不过使用内嵌模式的话,缺点也比较明显,因为一个内嵌的Derby数据库每次只能访问一个数据文件,这也就意味着不支持多会话连接。这种情况应对本地测试可能都有所不足,仅供初学者熟悉应用Hive;
2.本地模式:这种模式是将元数据库保存在本地的独立数据库中(比如说MySQL),这样就能够支持多会话和多用户连接。
3.远程模式:如果我们的Hive客户端比较多,在每个客户端都安装MySQL服务还是会造成一定的冗余和浪费,这种情况下,就可以更进一步,将MySQL也独立出来,将元数据保存在远端独立的MySQL服务中。
二、环境
系统:CentOS6.4 32位
软件包:
hive-0.8.1.tar.gz
mysql-connector-java-5.1.18-bin.jar
本实验均在上hadoop基础上做。
3种模式均在master主机(192.168.2.101)上配置,master主机已安装hadoop集群。
三、配置
1.内嵌模式
即将元数据存储在Derby数据库中,也是Hive默认的安装方式
# tar -zxvf hive-0.8.1.tar.gz -C /usr/ # mv /usr/hive-0.8.1/ /usr/hive # chown -R hadoop:hadoop /usr/hive/ //修改所属关系,hadoop用户已在hadoop集群中添加 # vim /etc/profile //添加环境变量 HIVE_HOME=/usr/hive PATH=$PATH:$HIVE_HOME/bin export HIVE_HOME # source /etc/profile //使之立即生效,而不必注销并重新登录。
# cd /usr/hive/conf/ //本模式使用默认配置无需修改。 # ll -rw-rw-r--. 1 hadoop hadoop 46817 Jan 25 2012 hive-default.xml.template -rw-rw-r--. 1 hadoop hadoop 1593 Jan 25 2012 hive-env.sh.template -rw-rw-r--. 1 hadoop hadoop 1637 Jan 25 2012 hive-exec-log4j.properties.template -rw-rw-r--. 1 hadoop hadoop 2043 Jan 25 2012 hive-log4j.properties.template
在HDFS上建立/tmp和/user/hive/warehouse目录,这是Hive默认的数据文件存放目录
# su - hadoop $ hadoop dfs -mkdir /tmp $ hadoop dfs -mkdir /user/hive/warehouse $ hadoop dfs -ls / drwxrwxr-x - hadoop supergroup 0 2014-06-17 18:57 /tmp drwxr-xr-x - hadoop supergroup 0 2014-06-17 19:02 /user drwxr-xr-x - hadoop supergroup 0 2014-06-15 19:31 /usr $ hadoop dfs -ls /user/hive/ drwxrwxr-x - hadoop supergroup 0 2014-06-17 19:02 /user/hive/warehouse $ hive //启动 Logging initialized using configuration in file:/usr/hive/conf/hive-log4j.properties Hive history file=/tmp/hadoop/hive_job_log_hadoop_201406171916_734435947.txt hive> show tables; OK Time taken: 7.157 seconds hive> quit;
2.配置连接mysql (在内嵌模式上配置)
# mv mysql-connector-java-5.1.18-bin.jar /usr/hive/lib/ //上传JDBC,用于java程序与mysql的连接 # chown hadoop:hadoop mysql-connector-java-5.1.18-bin.jar $ vim /usr/hadoop/conf/hive-site.xml //配置hive-site.xml文件,用于连接mysqljavax.jdo.option.ConnectionURL //所连接的MySQL数据库实例jdbc:mysql://localhost:3306/hive JDBC connect string for a JDBC metastore javax.jdo.option.ConnectionDriverName //连接的MySQL数据库驱动com.mysql.jdbc.Driver Driver class name for a JDBC metastore javax.jdo.option.ConnectionUserName //连接的MySQL数据库用户名hive username to use against metastore database $ hive //启动 Logging initialized using configuration in jar:file:/usr/hive/lib/hive-common-0.8.1.jar!/hive-log4j.properties Hive history file=/tmp/hadoop/hive_job_log_hadoop_201406172021_1374786590.txt hive> show tables; OK Time taken: 5.527 seconds hive> quit; javax.jdo.option.ConnectionPassword //连接的MySQL数据库密码hive password to use against metastore database
只需要修改ConnectionURL的ip为外部ip即可,
4 参数说明
hive.metastore.warehouse.dir:指定数据目录,默认值是/user/hive/warehouse; hive.exec.scratchdir:指定临时文件目录,默认值是/tmp/hive-${user.name}; javax.jdo.option.ConnectionURL:指定数据库的连接串,此处修改为:jdbc:mysql://192.168.2.10:3306/hive?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName:指定数据库连接驱动,此处修改为com.mysql.jdbc.Driver; javax.jdo.option.ConnectionUserName:指定连接MySQL的用户名,根据实际情况设定; javax.jdo.option.ConnectionPassword:指定连接MySQL的密码,根据实际情况设定;
最后说明下, mysql数据库的编码目前最好设置为latin1,否则使用hive会出现莫名其妙的问题