大数据之hive基础理论

关于大数据
Hadoop是什么
海量数据分布式的存储和计算框架
数据存储:HDFS: Hadoop Distributed File System
数据计算:YARN/MapReduce

1 hive 产生背景

hive定义:

The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
官方网址:http://hive.apache.org/
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
使用sql 管理 读 写分布式存储的大数据的一个数据仓库软件。

2 分布式存储

分布式存储:HDFS、S3、OSS
Hive定义了SQL语言:HQL (类SQL)
通常用于离线处理
SQL =Hive=MapReduce/Spark/Tez===>YARN
Hive on MapReduce
Hive on Spark
Hive on Tez

3为什么要使用Hive

1) SQL   传统数据库都使用的SQL语句,而Hive使用的是HQL语句。容易上手。
2) Hadoop   MapReduce是基于HDFS系统的,通常而言Hive处理数据都是度多写少。Hive的表更新是采用覆盖的方式,而这种情况下处理数据绝大部分都会访问整个表。这对在大规模数据集上运行的数据仓库非常见效。
3) MetaStore: Pig/Impala/Presto/SparkSQL(共享元数据信息)

Hive与RDBMS的关系
SQL: Hive QL和SQL的关系
实时性
事务
分布式
数据量
在这里插入图片描述

用过数据库的都知道,数据库需要在创建时制定好数据格式,也就是俗称的建表。传统数据库和Hive在使用前都需要建表,但是不知道小伙伴们有没有遇到这种情况。传统数据库在建表之后往里面导数据时,通常会因为很多问题导致SQL异常,从而加载出错,而常见的情况就是数据格式不对。
传统数据库在加载数据的时候会严格检查数据格式,如果不符合规范就会拒绝加载。而这种验证过程将耗费大量时间,这对于大数据而言,时间上是无法满足需求的。而Hive在插入数据的时候并不会验证数据,它只会在查询的时候验证。这种加载时验证的方式称之为读时模式,而查询时验证的方式则称之为写时模式

metastore是hive元数据的集中存放地
metastore默认使用内嵌的derby数据库作为存储引擎
Derby引擎的缺点:一次只能打开一个会话
使用Mysql作为外置存储引擎,多用户同时访问

4 Hive安装

下载:http://archive-primary.cloudera.com/cdh5/cdh/5/
在使用CDH版本的时候一定要注意:尾巴对准了
wget http://archive-primary.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz

解压:tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app/
配置环境变量: ~/.bash_profile
	export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
	export PATH=$HIVE_HOME/bin:$PATH
生效: source ~/.bash_profile
Hive配置:$HIVE_HOME/conf
	hive-env.sh
		HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
	hive-site.xml配置的就是MySQL的相关信息
	拷贝mysql驱动到$HIVE_HOME/lib
<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://localhost:3306/ruoze_d5?createDatabaseIfNotExist=true&amp;useUnicode=true&characterEncoding=UTF-8</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>

Hive安装

内嵌模式:元数据保持在内嵌的Derby模式,只允许一个会话连接

本地独立模式:在本地安装Mysql,把元数据放到Mysql内

远程模式:元数据放置在远程的Mysql数据库。
想说的是,hive只是个工具,包括它的数据分析,依赖于mapreduce,它的数据管理,依赖于外部系统

这一步其实不是必须的,因为Hive默认的metadata(元数据)是存储在Derby里面的,但是有一个弊端就是同一时间只能有一个Hive实例访问,这适合做开发程序时做本地测试。

Hive提供了增强配置,可将数据库替换成mysql等关系型数据库,将存储数据独立出来在多个服务示例之间共享。

5 安装问题

1 mysql赋权
2 账户密码问题
3 hostname 问题

<value>jdbc:mysql://localhost:3306/ruoze_d5?createDatabaseIfNotExist=true&amp;useUnicode=true&characterEncoding=UTF-8</value>

查看log
hive 配置文件

[[email protected] conf]$ pwd 
/home/hadoop/app/hive-1.1.0-cdh5.7.0/conf
[[email protected] conf]$ ll
total 24
-rw-r--r--. 1 hadoop hadoop 1196 Mar 24  2016 beeline-log4j.properties.template
-rw-r--r--. 1 hadoop hadoop 2429 Oct 22 17:03 hive-env.sh
-rw-r--r--. 1 hadoop hadoop 2378 Mar 24  2016 hive-env.sh.template
-rw-r--r--. 1 hadoop hadoop 2662 Mar 24  2016 hive-exec-log4j.properties.template
-rw-r--r--. 1 hadoop hadoop 3505 Mar 24  2016 hive-log4j.properties.template
-rw-r--r--. 1 hadoop hadoop  732 Oct 23 13:35 hive-site.xml
查看log存放路径
[[email protected] conf]$ cat hive-log4j.properties.template

# Define some default values that can be overridden by system properties
hive.log.threshold=ALL
hive.root.logger=WARN,DRFA
hive.log.dir=${java.io.tmpdir}/${user.name}
hive.log.file=hive.log

6 启动 hive

#./hive

[[email protected] ~]$ 
[[email protected] ~]$ hive
which: no hbase in (/home/hadoop/app/hive-1.1.0-cdh5.7.0/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/bin:/usr/java/jdk1.7.0_80/bin:/usr/java/jdk1.7.0_80/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/sbin:/usr/java/jdk1.7.0_80/bin:/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin)

Logging initialized using configuration in jar:file:/home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/hive-common-1.1.0-cdh5.7.0.jar!/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive (default)>

快速入门 建立表。插入数据。

create table ruoze_helloworld(id int,name string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

load data local inpath '/home/hadoop/data/helloworld.txt' overwrite into table ruoze_helloworld;

alter database ruoze_d5 character set latin1;