Hive入门(1)

1.产生背景

(1)MapReduce编程十分复杂。

(2)传统的RDBMS能满足一般的需求,但是不能处理大数据,需要一个SQL就能处理大数据的。

(3)这时结合前俩个缺点改进,就有了Hive

(4)提高Hive要想到:SQL on Hadoop(在Hadoop上用SQL来操作)

2.Hive基本概念

(1)Hive的作用:Apache蜂巢™数据仓库软件便于读,写,和管理大型数据集居住在分布式存储系统上使用SQL。结构(meta/schema)可以映射到存储中的数据。提供了一个命令行工具和JDBC(它的操作一般只拿结果,不去做计算)驱动程序来连接用户到Hive。

(2)Hive是构建在Hadoop之上的数据仓库。(HDFS存储,MapReduce/Spark/Tez执行引擎),可以用命令指定(

  • set hive.execution.engine=spark/其他; 

(3)Hive QL:他是类SQL,然后将SQL转成MapReduce/Spark/Tez的作业,提交到集群上去执行。

3.Hive发展历程

(1)08/2007:FaceBook推出的

(2)05/2013:  0.11.0版本   Stinger phase1优化:推出了ORC存储格式和HiveServer2

补充ORC:它是Hadoop生态圈中的列式存储格式,用于降低Hadoop数据存储空间和加速Hive查询速度,有以下优点

      1)ORC是列式存储,有多种文件压缩方式,并且有着很高的压缩比。

      2)文件是可切分(Split)的。因此,在Hive中使用ORC作为表的文件存储格式,不仅节省HDFS存储资源,查询任务的输入数据量减少,使用的MapTask也就减少了。

      3)提供了多种索引,row group index、bloom filter index。

      4)ORC可以支持复杂的数据结构(比如Map等)

(3)10/2013:0.12.0  Stinger phase2优化:ORC improve

(4)04/2014:0.13.0  Stinger phase3优化:Vectorized query engine(向量化查询引擎)   / Tez(执行引擎推出)

(5)11/2014:0.14.0 Stinger.next phase1 Cost-based optimizer(CBO:判断出最优的执行计划来使用)

(6)1.0.0  .......   有关Stringer的描述:Making Apache Hive 100 Times Faster(能快一百个数量级,夸张的说法)

4.Hive的优点

(1)简单易用

(2)扩展性强:内存不够加机器,资源不够加Core(Hive不是集群啊,是个客户端)

(3)统一的元数据管理(元数据字段database  tablename colum  location)元数据一般存在MySQL里面,好处是和其他框架共享元数据之后,就能直接使用,例如SparkSQL处理。解决了一定的权限问题

5.体系架构

(1)首先访问Hive的方式有三种,CLI、JDBC和WEBUI和Driver交互,然后SQL解析,逻辑执行计划,抽象语法树那些,再对SQL进行优化,最后生成物理执行计划,通过Exection生成MapReduce作业来出咯HDFS上的数据。

(2)上面是右边的,现在我们看Meta Store是有数据的位置信息的,和抽象语法树实现交互。

6.Hive部署安装

(1)概述:随便找一台机器部署Hive然后关联HDFS,和元数据存储在MySQL中就好了,这只是测试环境,在生产中你的MySQL必须要保证,MySQL是HA的,不然它过了整个HIve架构就废了。访问SQL需要哪些东西?驱动(Driver)、url、权限。(2)下载hive:wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
(3)解压: tar -zxvf ....... -C ~/app/
(4)配置环境变量: ~/.bash_profile
    export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
    export PATH=$HIVE_HOME/bin:$PATH
(5)拷贝驱动:cp mysqldriver $HIVE_HOME/lib      //这个是要连MySQL来存储元数据的
(6)配置文件修改 

 cp hive-env.sh.template hive-env.sh
        HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
        
   hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/ruozedata_basic02?createDatabaseIfNotExist=true</v
alue>
    </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>
[hadoop@hadoop000 conf]$ clear
[hadoop@hadoop000 conf]$ cat hive-
cat: hive-: No such file or directory
[hadoop@hadoop000 conf]$ cat hive-site.xml 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

//自己选取有用的

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/ruozedata_basic03?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>
</configuration>    

(7)记一个坑

上面配置了元数据库在MySQL中的,但是如果MySQL GG了,或者Hadoop home目录变了Hive就会怎么都连不起来了,创建表也不行。。。。。
    
Hive表创建报错,具体日志信息如下
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes    
  字符集错误,修改元数据库的编码就可以啦

alter database ruozedata_basic03 character set latin1;

7.Hive和RDBMS的异同点?

(1)俩个都是写SQL

(2)RDBMS的实时性是较为看重的,但Hive是看重的是大数据的分析和统计,延迟性较高一个作业跑几小时很正常。

(3)RDBMS存储的数据量不能多,即使分布式布置也不能太多,且成本高,Hive就可以,因为底层存储的是HDFS。

(4)事务/insert/update,在Hive(0.14版本之后)中一般不用,因为是批次执行的,挂了就重来。

8.为什么生产环境中要CDH/HDP这种商业版的,而不用Apache的?

答:因为CDH/HDB版本的兼容性要比Apache的强许多。多框架整合jar包冲突很麻烦的!

注意选择统一的cdh尾号!!!你别搞5.7.0的Hadoop和5.2.0的Hive,容易出问题。

统一CDH系列下载路径:统一软件安装包下载路径:http://archive.cloudera.com/cdh5/cdh/5/

9.Hive的日志查看

(1)系统日志存储
在${HIVE_HOME}/conf/hive-log4j.properties 文件中记录了Hive日志的存储情况
(2)重命名hive-log4j.properties.template   hive-log4j.properties  
         默认的存储情况:$
         hive.root.logger=WARN,DRFA
         hive.log.dir=/tmp/${user.name} # 默认的存储位置是/tmp这个临时目录(这个目录就好像Windows的回收站)
hive.log.file=hive.log  # 默认的文件名
可以自己修改

10.什么叫结构化数据和非结构化数据和半结构化数据?

(1)相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,

(2)不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。
(3)字段可根据需要扩充,即字段数目不定,可称为半结构化数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值