1、Hive是什么
1.1、Hive是数据仓库
数据仓库英文名DataWarehouse,可简写为DW或DWH。数据仓库 ,由数据仓库之父比尔·恩门(Bill Inmon)于1990年提出,主要功能仍是将组织透过资讯系统之联机事务处理(OLTP)经年累月所累积的大量资料,透过数据仓库理论所特有的资料储存架构,作一有系统的分析整理,以利各种分析方法如联机分析处理(OLAP)、数据挖掘(Data Mining)之进行,并进而支持如决策支持系统(DSS)、主管资讯系统(EIS)之创建,帮助决策者能快速有效的自大量资料中,分析出有价值的资讯,以利决策拟定及快速回应外在环境变动,帮助建构商业智能(BI)。往白了说数据仓库就是用来作为查询分析的数据库,很少用来插入,修改,删除
2.2、Hive是解释器、编译器、优化器、执行器
简单的将就是说HQL会被Hive解释,编译,优化并生成查询计划,一般情况而言查询计划会被转化为MapReduce任务进而执行。
2、Hive架构
- 对外接口 :命令行接口CLI、客户端接口Client 、WebGUI接口WUI;
- 元数据存储:通常在关系型数据库,如mysql、oracle;
- Driver:包含解释器、编译器、优化器、序列反序列化、UDF、执行器;
- Hadoop:HDFS用来进行MapReduce分布式计算;
3、Hiive的安装
- 3.1 前置--安装mysql 5.7+
- 3.2 准备--tar包apache-hive-2.3.3
- 3.3 配置--hive-site.xml配置
- 3.4 辅助--使用可视化工具zeppelin-0.7.3-bin-all
4、准备工作
- 1.访问 hive官网 ,下载对应版本hive的tar包
- 2. 解压tar包,到指定文件夹目录下
//解压hive的tar包,到指定的app目录下
$ tar -zxvf apache-hive-2.3.3-bin.tar.gz -C ../app
//修改包名
$ mv apache-hive-2.3.3-bin apache-hive-2.3.3
5、 配置hive-site.xml
1. 使用hive-default.xml.template,创建hive-site.xml
//进入hive/conf文件夹下
$ cd apache-hive-2.3.3/conf/
//拷贝hive-default.xml.template ,重命名为 hive-site.xml
$ cp hive-default.xml.template hive-site.xml
2. 修改元数据数据库地址, javax.jdo.option.ConnectionURL;
//修改hive-site.xml配置
$ vi hive-site.xml
//1. 按 i 键,进入编辑状态
//2. 按 / 键,查找 javax.jdo.option.ConnectionURL
//修改如下
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC</value>
</property>
3. 修改元数据数据库驱动,javax.jdo.option.ConnectionDriverName;
// 按 / 键,查找 javax.jdo.option.ConnectionDriverName
//修改如下
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
4. 修改元数据数据库用户名,javax.jdo.option.ConnectionUserName;
//按 / 键,查找 javax.jdo.option.ConnectionUserName
//修改如下
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
5. 元数据数据库登陆密码,javax.jdo.option.ConnectionPassword;
//按 / 键, 查找 javax.jdo.option.ConnectionPassword
//修改如下
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
6. 修改hive数据仓库存储地址(在hdfs上具体存储地址),hive.metastore.warehouse.dir;
//按 / 键,查找 hive.metastore.warehouse.dir
//默认 /user/hive/warehouse ,这里不进行调整
//修改如下
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
7. 配置其他路径;
//1. 配置 hive.querylog.location
//修改如下
<property>
<name>hive.querylog.location</name>
<value>/home/hadoop/opt/tmp/hive</value>
</property>
//2. 配置 hive.server2.logging.operation.log.location
//修改如下
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/home/hadoop/opt/tmp/hive/operation_logs</value>
</property>
//3. 配置 hive.exec.local.scratchdir
//修改如下
<property>
<name>hive.exec.local.scratchdir</name>
<value>/home/hadoop/opt/tmp/hive</value>
</property>
//4. 配置 hive.downloaded.resources.dir
//修改如下
<property>
<name>hive.downloaded.resources.dir</name>
<value>/home/hadoop/opt/tmp/_resources</value>
</property>
8. 配置错误日志
//按 esc 键,退出编辑;
//按 wq 键,保存编辑;
//查看 /conf
$ ll
//拷贝 hive-log4j2.properties.template ,并命名为 hive-log4j2.properties
$ cp hive-log4j2.properties.template hive-log4j2.properties
//编辑 hive-log4j2.properties
$ vi hive-log4j2.properties
//按 i 键,进入编辑状态
//配置输出log文件
property.hive.log.dir = /home/hadoop/opt/hive
6、 初始化hive元数据
1. 初始化schema,schematool -dbType mysql -initSchema;
//使用 schematool, 初始化 schema
[hadoop@hadoop000 apache-hive-2.3.3]$ bin/schematool -dbType mysql -initSchema
2. 补充初始化 schema 时,会出现Underlying cause: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver异常,这里是因为缺少mysql连接驱动,这里使用 mysql-connector-java 5.1.38;
//下载mysql-connector的jar包
[hadoop@hadoop000 lib]$ wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.
//检查mysql驱动是否下载完成
[hadoop@localhost lib]$ ll | grep mysql
-rw-rw-r--. 1 hadoop hadoop 983911 Dec 16 2015 mysql-connector-java-5.1.38.jar
-rw-r--r--. 1 hadoop hadoop 7954 Dec 20 2016 mysql-metadata-storage-0.9.2.jar
再次执行初始化,出现 schemaTool completed ,说明初始化成功;
3. 登录mysql,查看初始化后的hive库
//登录mysql
# mysql -uroot -proot
//查看数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hive |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
//使用 hive
mysql> use hive;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
//查看hive下,所有表,发现是 57 张,说明初始化成功
mysql> show tables;
+---------------------------+
| Tables_in_hive |
+---------------------------+
| AUX_TABLE |
| BUCKETING_COLS |
| CDS |
| COLUMNS_V2 |
| COMPACTION_QUEUE |
| COMPLETED_COMPACTIONS |
| COMPLETED_TXN_COMPONENTS |
| DATABASE_PARAMS |
| DBS |
| DB_PRIVS |
| DELEGATION_TOKENS |
| FUNCS |
| FUNC_RU |
| GLOBAL_PRIVS |
| HIVE_LOCKS |
| IDXS |
| INDEX_PARAMS |
| KEY_CONSTRAINTS |
| MASTER_KEYS |
| NEXT_COMPACTION_QUEUE_ID |
| NEXT_LOCK_ID |
| NEXT_TXN_ID |
| NOTIFICATION_LOG |
| NOTIFICATION_SEQUENCE |
| NUCLEUS_TABLES |
| PARTITIONS |
| PARTITION_EVENTS |
| PARTITION_KEYS |
| PARTITION_KEY_VALS |
| PARTITION_PARAMS |
| PART_COL_PRIVS |
| PART_COL_STATS |
| PART_PRIVS |
| ROLES |
| ROLE_MAP |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SKEWED_COL_NAMES |
| SKEWED_COL_VALUE_LOC_MAP |
| SKEWED_STRING_LIST |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES |
| SORT_COLS |
| TABLE_PARAMS |
| TAB_COL_STATS |
| TBLS |
| TBL_COL_PRIVS |
| TBL_PRIVS |
| TXNS |
| TXN_COMPONENTS |
| TYPES |
| TYPE_FIELDS |
| VERSION |
| WRITE_SET |
+---------------------------+
57 rows in set (0.00 sec)
7、 启动hive
1. 使用hiveserver2启动hive,启动前需要修改hadoop代理访问权限:
找到hadoop的core-site.xml,添加如下配置:
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
2. hive的访问方式分为两种:
1). beeline,该方式仅支持本地机器进行操作;
启动方式如下:$ bin/beeline -u jdbc:hive2://127.0.0.1:10000 -n hadoop
-n : 代理用户
-u : 请求地址
2). hiveserver2,该方式可提供不同的机器进行调用;
启动方式如下:$ bin/hiveservice2
查看是否已开放端口:netstat -ant | grep 10000