1. hive
1.1 Hive概述
1.1.1 Hive概述
- Hive是基于Hadoop的一个数据仓库工具。可以将结构化的数据文件映射为一张表,并提供完整的sql查询功能,本质上还是一个文件
- 底层是将sql语句转换为MapReduce任务进行运行
- 本质上是一种大数据离线分析工具
- 学习成本相当低,不用开发复杂的mapreduce应用,十分适合数据仓库的统计分析
- hive可以用来进行 数据提取、转化、加载,这是一种可以存储、查询和分析存储在hadoop上的数据。
1.1.2 数据仓库
-
数据是集成的,数据的来源可能是:MySQL、oracle、网络日志、爬虫数据… 等多种异构数据源。Hadoop你就可以看成是一个数据仓库,分布式文件系统hdfs就可以存储多种不同的异构数据源
-
数据仓库不仅要存数据,还要管理数据,即:hdfs 和 mapreduce,从这个角度看之前的hadoop其实就是一个数据仓库,hive其实就是在hadoop之外包了一个壳子,hive是基于hadoop的数据仓库工具,不通过代码操作,通过类sql语言操作数据仓库中的数据。
底层其实仍然是分布式文件系统和mapreduce,会把sql命令转为底层的代码
-
数据仓库的特征
- 数据仓库是多个异构数据源集成的
- 数据仓库存储的一般是历史数据,大多数的应用场景是读数据(分析数据)
- 数据库是为捕获数据而设计,而数据仓库是为了分析数据而设计
- 数据仓库是弱事务的,因为数据仓库存的是历史数据,一般都读(分析)数据场景
-
OLTP系统(online transaction processing)
- 数据库属于OLTP系统,联机事务处理,涵盖了企业大部分的日常操作,比如购物、库存、制造、银行、工资、注册、记账等,比如mysql oracle等关系型数据库
- OLTP系统的访问由于要保证原子性,所以有事务机制和恢复机制
-
OLAP系统(online analytical processing)
- 数据仓库属于OLAP系统,联机分析处理系统,hive等
- OLAP系统一般存储的是历史数据,所以大部分都是只读操作,不需要事务
1.1.3 Hive的HQL
- HQL - Hive通过类SQL的语法,来进行分布式的计算
- HQL用起来和SQL非常的类似,Hive在执行的过程中会将HQL转换为MapReduce去执行,所以Hive其实是基于Hadoop的一种分布式计算框架,底层仍然是MapReduce
1.1.4 Hive特点
- Hive优点
- 学习成本低,只要会sql就能用hive
- 开发效率高,不需要编程,只需要写sql
- 模型简单,易于理解
- 针对海量数据的高性能查询和分析
- 与 Hadoop 其他产品完全兼容
- Hive缺点
- 不支持行级别的增删改
- 不支持完整的在线事务处理
1.1.5 Hive适用场景
- Hive 构建在基于静态(离线)批处理的Hadoop 之上,Hadoop通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive 并不能够在大规模数据集上实现低延迟快速的查询因此,Hive并不适合那些需要低延迟的应用
- Hive并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的离线批处理作业,例如,网络日志分析。
1.2 Hive安装
1.2.1 详细安装步骤
-
下载hive安装包(2.3.7版本)
http://us.mirrors.quenda.co/apache/hive/
-
解压到 /usr/local/ 目录下
sudo tar -zxvf apache-hive-2.3.7-bin.tar.gz -C /usr/local
-
给文件夹重命名
sudo mv /usr/local/apache-hive-2.3.7-bin /usr/local/hive2.3.7
-
设置环境变量
sudo gedit /home/tarena/.bashrc
在末尾添加如下内容export HIVE_HOME=/usr/local/hive2.3.7 export PATH=.:${HIVE_HOME}/bin:$PATH
-
刷新环境变量
source /home/tarena/.bashrc
-
下载并添加连接MySQL数据库的jar包(8.0.19 Ubuntu Linux Ubuntu Linux 18.04)
下载链接: https://downloads.mysql.com/archives/c-j/
解压后找到 mysql-connector-java-8.0.19.jar
将其拷贝到 /usr/local/hive2.3.7/lib
sudo cp -p mysql-connector-java-8.0.19.jar /usr/local/hive2.3.7/lib/ -
创建hive-site.xml配置文件
sudo touch /usr/local/hive2.3.7/conf/hive-site.xml
sudo gedit /usr/local/hive2.3.7/conf/hive-site.xml
并添加如下内容<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> <description>password to use against metastore database</description> </property> </configuration>
-
在hive配置文件中添加hadoop路径
cd /usr/local/hive2.3.7/conf
sudo cp -p hive-env.sh.template hive-env.sh
sudo gedit /usr/local/hive2.3.7/conf/hive-env.sh
添加如下内容:HADOOP_HOME=/usr/local/hadoop2.10 export HIVE_CONF_DIR=/usr/local/hive2.3.7/conf
-
hive元数据初始化
schematool -dbType mysql -initSchema
-
测试hive
hive
hive>show databases;
如果能够正常显示内容,则hive安装并配置完毕
1.2.2 hive安装总结
- 安装JDK
- 安装Hadoop
- 配置JDK和Hadoop的环境变量
- 下载Hive安装包
- 解压安装hive
- 下载并安装MySQL连接器
- 启动Hadoop的HDFS和Yarn
- 启动hive
1.3 Hive基本操作
1.3.1 文件和表如何映射
-
流程操作准备
mkdir hivedata cd /home/tarena/hivedata/ vi t1.txt 1,tom,23 2,lucy,25 3,jim,33 hadoop fs -mkdir /hivedata hadoop fs -put t1.txt /hivedata
-
如何建立一张表和其对应
【1】进入到hive的命令行进行建库建表操作 create database tedu; use tedu; create table t1(id int, name string, age int); 【2】到hdfs中确认目录 /user/hive/warehouse/ 会有tedu.db 【3】将本地t1.txt放到hdfs指定目录中 hadoop fs -put /home/tarena/hivedata/t1.txt /user/hive/warehouse/tedu.db/t1 【4】在hive命令行进行查看测试 hive>select * from t1; 发现都是 NULL ,可能是分隔符的问题