Hive 入门及环境搭建
1)Hive主要用途
解决海量结构化日志数据的文件统计,即离线统计分析
2)架构图
HIVE本身就是一个客户端,不需要集群。
生产可以在几个hadoop机器上都配hive,目的不是集群,是几个节点都可以提交hive作业。
以上缺陷:MySQL单点故障
3)Hive VS RDBMS
1)都是使用sql来查询的
2)实时性:RDBMS实行性高(延时短),Hive主要是做离线批处理的(延时高)
3)事务性:都支持事务,但是Hive主要是离线处理,一般不需要考虑事务性
4)分布式:hive是基于mapreduce分布式执行引擎;RDBMS也是支持分布式,但是节点数比较少。
5)成本:RDBMS成本比较高,构建在专用的机器上;Hive随便找个Hadoop节点就能处理TB级别的数据。
Q:用spark跑sql能做到实时吗?
A:速度会快一点,但是也是不可能做实时的。sql是用来做统计分析的多,实时不能使用sql,只能用流处理框架
4)Hive 环境搭建
1. wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
2. tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app 或者编译 mvn clean package -Pdist
3. 添加HIVE_HOME到系统环境变量
export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH
4. Hive配置修改
hive-env.sh
HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
hive-site.xml 统一元数据管理
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/ruozedata_basic02?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
5. 拷贝mysql驱动包到$HIVE_HOME/lib
6. 配置日志路径 $HIVE_HOME/conf/hive-log4j.properties.template
hive.log.dir=${java.io.tmpdir}/${user.name}
hive.log.file=hive.log
5)搭建出现的异常
1. 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驱动包,把mysql驱动包放到$HIVE_HOME/lib即可
2. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.MetaException
(message:For direct MetaStore DB connections, we don't support retries at the client level.)
原因:创建表失败,这里是看不出具体报错的,要去查看log日志才能清楚知道错误信息
解决:去log日志下面找,在hive.log发现错误信息,key太长超过767:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
登陆mysql客户端,改变数据库字符集为latin1:mysql> alter database ruozedata_basic02 character set latin1;