Hive概述、安装部署、mysql集成与测试

1. Hive概述

1.什么是hive?

  • 由Facebook开源用于解决海量结构化日志得数据统计;
  • Hive是基于Hadoopde的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并用提供类SQL查询功能;
  • 构建在Hadoop之上的数据仓库;
    使用HQL作为查询接口;
    使用HDFS储存;
    使用MapReduce计算;
  • 本质是:将HQL转化为Mapreduce程序
  • 灵活性和拓展性比较好:支持UDE,自定义储存格式等;
  • 适合离线数据处理。
    2)Hive在Hadoop生态系统内中的位置
    Hive概述、安装部署、mysql集成与测试

2.Hive架构
Hive概述、安装部署、mysql集成与测试

  • HIVE依赖于hadoop的HDFS和Map Reduce,数据储存在HDFS,通过Map Reduce来计算/处理数据;
  • 元数据:Meta store
    元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表);默认储存在自带的derby数据库中,推荐使用Mysql存Metastore;
  • 用户接口(Client)
    Cli(hive shell),JDBC/JDBC(java访问hive),webUI(浏览器访问hive)
  • 驱动器:Driver(包含SQl Parser 、Query Optimizer、 Physical Plan 、Execution)
    1)解析器(SQl Parser):将SQL字符串转化为抽象语法书AST,这一步一般都用第三方工具库完成,比如antir; 对AST进行语法分析,比如·表是否存在、字段是否存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否出现);
    2)编译器(Query Optimizer):将AST编译生成逻辑执行计划
    3)优化器(Physical Plan):对逻辑计划进行优化
    4)执行(Execution):把逻辑执行计划转化为可以运行的物理计划,对于Hive来说,就是MR/TEZ/Spark。

3.Hive的优点及应用场景

  • 操作接口采用类SQl语法,提供快速开发的能力(简单、容易上手);
  • 避免了去写MapReduce,减少开发人员学习成本;
  • 统一的元数据管理,可与impala/spark等共享元数据
  • 易拓展(HDFS+Mapreduce:可以拓展集群规模;支持自定义函数)
  • 数据的离线处理,比如:日志分析,海量结构化数据离线分析
  • Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求不高的场合;
  • Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高

2. Hive安装部署
1)下载安装Hive

下载地址(选择自己需要下载的版本,此博客采用1.3)
Apache版本的Hive。

https://archive.apache.org/dist/hive/

Hive概述、安装部署、mysql集成与测试
Cloudera版本的Hive。

http://archive-primary.cloudera.com/cdh5/cdh/5/

2)解压

tar -zxf apache-hive-0.13.1-bin.tar.gz -C /opt/modules/

3)修改hive-log4j.properties配置文件

cd /opt/modules/hive-0.13.1-bin/conf
mv hive-log4j.properties.template hive-log4j.properties
vi hive-log4j.properties
  hive.log.dir=/opt/modules/hive-0.13.1-bin/logs
#日志目录需要提前创建(mkdir /opt/modules/hive-0.13.1-bin/logs)
hive.log.dir=/opt/modules/hive-0.13.1-bin/logs

Hive概述、安装部署、mysql集成与测试
Hive概述、安装部署、mysql集成与测试
4)修改hive-env.sh配置文件

mv hive-env.sh.template hive-env.sh
vi hive-env.sh
export HADOOP_HOME=/opt/modules/hadoop-2.5.0
export HIVE_CONF_DIR=/opt/modules/hive-0.13.1-bin/conf

注释:HADOOP_HOME为hadoop的安装目录、HIVE_CONF_DIR为你hive的conf目录

Hive概述、安装部署、mysql集成与测试
5)首先启动HDFS,然后创建Hive的目录(HDFS的启动:进入到hadoop的安装目录下运行:sbin/start-dfs.sh)

bin/hdfs dfs -mkdir -p /user/hive/warehouse
bin/hdfs dfs -chmod g+w /user/hive/warehouse

Hive概述、安装部署、mysql集成与测试

6)启动hive

 bin/hive  
show databases;
#使用默认数据库
use default;
#查看表
show tables;

3. Hive与mysql集成
1)在/opt/modules/hive-0.13.1-bin/conf目录下创建hive-site.xml文件,配置mysql元数据库。

<configuration>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://bigdata-pro01.kfk.com/metastore?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.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>
<property>
  <name>hive.cli.print.header</name>
  <value>true</value>
  <description>Whether to print the names of the columns in query output.</description>
</property>

<property>
  <name>hive.cli.print.current.db</name>
  <value>true</value>
  <description>Whether to include the current database in the Hive prompt.</description>
</property>


</configuration>

Hive概述、安装部署、mysql集成与测试

2)设置用户连接
1.进入mysql

mysql -uroot -p123456

Hive概述、安装部署、mysql集成与测试
2.查看用户信息

show databases;
use mysql;
show tables;
select host,user,password from user;

Hive概述、安装部署、mysql集成与测试
Hive概述、安装部署、mysql集成与测试
3.更新用户信息

update user set Host='%' where User = 'root' and Host='localhost';

Hive概述、安装部署、mysql集成与测试
4.删除除上图划红线用户其余所有用户

delete from user where user='root' and host='127.0.0.1';
delete from user where host='localhost';
delete from user where host='bigdata-pro01.kfk.com';

结果如图所示:

Hive概述、安装部署、mysql集成与测试

5.刷新信息

flush privileges;

Hive概述、安装部署、mysql集成与测试
输入exit;退出mysql;
5.根据自己mysql的版本下载对应mysql驱动包到hive的lib目录下
mysql-connector-java-xxx.jar下载地址
不知道自己mysql版本的可以在mysql启动的时候看到
Hive概述、安装部署、mysql集成与测试
Hive概述、安装部署、mysql集成与测试
(这个5.1.73版本。。官网我实在是没有找到,最后居然在****中找到了,废了我一个积分)


4. Hive服务启动与测试
1)启动zookeeper、HDFS和YARN服务(没做HA的集群不用启动zookeeper,保证namenode是active转态就行

Hive概述、安装部署、mysql集成与测试Hive概述、安装部署、mysql集成与测试
2)查看web界面,确认服务开启
Hive概述、安装部署、mysql集成与测试

Hive概述、安装部署、mysql集成与测试

3)进入到hive安装目录,启动hive

bin/hive

Hive概述、安装部署、mysql集成与测试
Hive概述、安装部署、mysql集成与测试
4)通过hive服务创建表

CREATE TABLE stu(id INT,name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
show tables;

Hive概述、安装部署、mysql集成与测试
5)创建数据文件

vi /opt/datas/stu.txt
00001	zhangsan
00002	lisi
00003	wangwu
00004	zhaoliu

(注意用制表符隔开)

6.加载数据到hive表中

load data local inpath '/opt/datas/stu.txt' into table stu;

Hive概述、安装部署、mysql集成与测试

select count(1) from stu;

sql语句最终转化为MapReduce程序:

Hive概述、安装部署、mysql集成与测试
在yarn的web界面可以看到提交的任务
Hive概述、安装部署、mysql集成与测试
能力是一种态度
Q:1967483667