Hive简介与安装及语法

来源:互联网 发布:江西银行网络培训学院 编辑:程序博客网 时间:2024/06/09 12:36

Hive简介

Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 QL ,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive 上的数据不能直接update,需要先下载,再修改,再上传。它依赖hdfs和yarn。
Hive可以理解成SQL的解析引擎,将SQL语句,解析成Mapreduce任务。
Hive的表对应的就是HDFS的目录/文件夹,默认在user/warehouse 目录下。
Hive的元数据(数据的描述信息,比如有哪些表,这些表有哪些字段,以及这些表对应的目录存在hdfs上的具体位置)一般存储在关系型数据库中,默认是derby但是有很大的缺陷,不能同时支持多个用户访问,以及不能高并发。一般我们需要使用MySql作为它的元数据的存储。

Hive一般有三个对外的接口,CLI(命令行)、webGUI 、还有JDBC/ODBC(支持多语言)

Hive的安装

现有六台主机,每个主机上需要运行的进程如下
主机名 IP                    安装的软件        运行的进程
itcast01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController
itcast02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController
itcast03 192.168.1.203 jdk、hadoop ResourceManager
itcast04 192.168.1.204 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
itcast05 192.168.1.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
itcast06 192.168.1.206 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

以上可以看出,hdfs在01和02上,其中有一台处于standby状态,zk是04、05、06三台服务器。yarn运行在服务器03上。01或02管理hdfs上的数据,真正的数据再datanode(04、05、06)上。

1、启动04、05、06上的zk。

./zkServer.sh start

2、01上启动hdfs。(bin目录下)

./start.dfs.sh

3、03上启动yarn

./start-yarn.sh 

4、安装hive。
将hive的安装包安装在其中的任意一台服务器上均可。

4.1、tar -zxvf apache-hive(压缩包名) -C /itcast/(解压存放目录)
4.2、可能需要修改解压后hive文件的所属用户和用户组,如不需要,可跳过。
chown -R root:root apahe-hive(解压后的名称)
4.3、修改配置文件,在hive的conf目录下,
      1、重命名:mv hive-default.xml.template hive-site.xml
      2、修改配置文件信息,如下:

<property> //配置mysql在哪台机器上   数据库不存在是否创建.      <name>javax.jdo.option.ConnectionURL</name>      <value>jdbc:mysql://hadoop00: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.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>123</value>      <description>password to use against metastore database</description>    </property>

注意要将mysql的驱动jar包拷贝到hive的lib目录下,mysql数据库允许远程连接,并且授权,
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句 .:所有库下的所有表 %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘123’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

此时hive的安装就完成了。

hive语法

进入hive shell
执行create table people(id int,name string)
这是一个创建people表的命令,当执行这条语句时,干了哪些事情?

在元数据库mysql中保存了表people的元数据信息,并且在hdfs上创建了一个people的文件夹。

语法(和mysql的语法类似)

show databases
use database
create table student (id int,name string) row format delimited fields terminated by ‘\t’;
show tables;
show create table student;

将本地数据加载到hive表中(root目录下有student文本),去掉local是从hdfs上加载数据
load data local inpath ‘/root/student.txt’ into table student;

select * from student(并不转化为mapreduce,因为只需返回总数即可)

select count(*) from student (转化为mapreduce,因为要计算)

select * from student order by id desc;

Hive框架的计算模型的延迟太高,并不适合实时的计算模型,

创建数据库时,在hdfs上生成以库名+db的文件夹。
create database itcast

注意:当我们刚开始用hive建一张表时,表的字段信息和表名信息保存在元数据库中,要计算的数据保存在hdfs中,默认的元数据库时derty(都会替换成mysql),默认产生metastore_db文件夹,元数据信息在此文件夹中

元数据信息是以怎样的方式保存在mysql中的?
进mysql数据库,在TBLS表中保存表名,表的字段信息保存在COLUMNS_VZ中,SDS中保存着表对应HDFS上的哪个目录。

外部表:先有数据,然后将数据指向所建的表。(以下命令均在hive shell 下运行)
1、hdfs上创建一个文件夹。
在hive shell 下执行dfs -mkdir /data
2、将本地的数据put到hdfs上dfs /root/student.txt /data/a.txt
以及dfs /root/student.txt /data/b.txt
3、建一张表指向data目录
create external table ext_student (id int,name string) row format delimited fields terminated by ‘\t’ location ‘\data’;
select * from ext_student; (弱主键性质)
注意:这里只要将数据放到/data目录下就能查到。

分区表
1、建一个分区表(即是分区表也是外部表)
普通表和分区表区别:有大量数据增加的需要建分区表

create external table beauties (id bigint, name string) partitioned by (nation  string) row format delimited fields terminated by '\t' location '/beauty' ; 

注意:分区表下不能执行用hadoop shell put 的数据,否则这样会查不到,需要在hive命令下通知hive给mysql添加一条分区信息

dfs - put /root/b.txt /beauty/nation=China; //查不到。还需要执行下面语句才能查到
alter table beauties add partition (nation=’China’) location “/beauty/nation=China”;

原创粉丝点击