* Hive框架基础(一)

一句话:学习Hive有毛用?

那么解释一下 毛用:

* 操作接口采用类SQL语法,提供快速开发的能力(不会Java也可以玩运算)

* 避免了去写MapReduce,减少开发人员的学习成本(MapReduce运算写断手)

* 扩展功能很方便

* 数据库不等同于数据仓库

数据库有很多,例如:mysql、oracle、DB2、sqlserver,但hive并不是数据库。

Hive是FaceBook的开源项目,Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件,映射成一张表,并提供类似SQL查询功能, hive的HQL语言(类似SQL)可以将任务翻译成Java语言并直接在MapReduce上运行,支持Yarn资源调度。hive一般不会直接接入到业务中使用,从某种意义上来讲呢,相当于一个Hadoop的客户端,Hive在集群中并不需要每一台服务器都安装Hive。

** Hive的一些重要特性

* 本质:将HQL转化成MapReduce任务

* 底层存储使用HDFS

* 适合离线批量处理,延迟比较大(用于周期性的执行分析),不适合用于在线的需要实时分析结果的场景

* Hive体系结构

* 用户接口: Client

* 终端命令行CLI --主要的一种使用方式,JDBC的方式一般不使用,比较麻烦。

* 元数据:metastore

* 默认apache使用的是derby数据库(只能有一个客户端使用),CDH使用postgreDB

* 元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表),表的数据所在目录等,并没有存储Hive表的真实数据

* 使用HDFS进行存储

* 使用MapReduce进行计算

* 解析器: 解析Hql语句

* 编译器: 把sql语句翻译成MapReduce程序

* 优化器: 优化sql语句

* 执行器: 在yarn平台运行MapReduce程序

* Hive在Hadoop中的位置,如图:

 
 

** Hive部署

* 安装JDK(此步骤省略,请查看之前内容)

* 安装Hadoop

此步骤要确保Hadoop可以正常使用,比如上传文件,运行jar任务等等

* 安装Hive

Hive下载地址传送门:链接:http://pan.baidu.com/s/1eSFuTWm 密码:k5xo

安装过程涉及命令:

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

进入Hive根目录下的conf目录,进行如下操作,到这个阶段应该无需解释了吧?

$ cp -a hive-env.sh.template  hive-env.sh,如图:

 
 

$ cp -a hive-default.xml.template  hive-site.xml,如图:

 
 

* 修改hive-env.sh

JAVA_HOME=/opt/modules/jdk1.8.0_121

HADOOP_HOME=/opt/modules/hadoop-2.5.0

export HIVE_CONF_DIR=/opt/modules/apache-hive-0.13.1-bin/conf

如图:

 
 

* 安装mysql,依次涉及命令:

$ su - root

# yum -y install mysql mysql-server mysql-devel

# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

# rpm -ivh mysql-community-release-el7-5.noarch.rpm

# yum -y install mysql-community-server

* 成功安装之后启动mysql服务

# systemctl start  mysqld.service,centOS7以下版本使用:# service mysqld start

注意,初次安装mysql是root账户是没有密码的

* 设置密码

方案一:

# mysqladmin -uroot password '123456'

方案二:

# mysql -uroot -p

mysql> update user set password=password("123456") where user='root';

mysql> flush privileges;

mysql> exit;

* 给用户授权

# mysql -uroot -p

mysql>grant all on *.* to root@'z01' identified by '123456' ;

mysql> flush privileges;

mysql> exit;

注释:

(grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;)

* mysql数据库默认只允许root用户通过localhost/127.0.0.1来登录使用

* 上面带有grant的那条语句中:

all:表示所有权限;

*.*:表示数据库.数据表;

root:表示授权给哪个用户,用户名可以任意指定,如果没有会自动创建;

'z01' :授权给哪台主机

'123456':授权给用户来登录的密码

(尖叫提示:如果你需要让所有的分布式机器都有权限访问mysql,在此例子中,还需要执行grant all on *.* to root@'z02' identified by '123456' ;以及grant all on *.* to root@'z03' identified by '123456' ;留意@符号后边的主机名)

* 配置hive-site.xml

打开之后,该文件中显示的全部为默认的配置,其中如下4项做出相应修改:

 
 

* 安装驱动包

涉及命令:

$ tar -zxf mysql-connector-java-5.1.27.tar.gz -C /opt/modules

$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/apache-hive-0.13.1-bin/lib/

操作如图所示:

 
 

* 修改目录权限

首先确保HDFS正常运行,之后涉及命令:

$ bin/hadoop fs -chmod g+w /tmp

$ bin/hadoop fs -chmod g+w /user/hive/warehouse

(注意:/tmp存放临时文件;/user/hive/warehouse  具体的Hive仓库目录)

 
没有对应目录,则创建对应目录

* 启动Hive客户端

$ bin/hive,如图:

 
 

* 中场小结:hive、hadoop的关系、mysql三者之间的关系

* hive数据存储在HDFS的/user/hive/warehouse目录中,我们通过查看hive-site.xml中的hive.metastore.warehouse.dir属性即可发现如图:

 
 

* Hive基本操作

* 显示所有数据库

hive> show databases;

* 创建数据库

语法: 

hive (default)> create database 数据库名称 ;

例如:

创建一个数据库d1:

hive> create databases d1;

* 删除数据库

hive (default)> drop database 数据库名称 ;

* 进入d1数据库

hive> use d1;

* 创建表

语法:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name

[(col_name data_type  ...)]

[PARTITIONED BY (col_name data_type , ...)]

[ROW FORMAT row_format]

[LOCATION hdfs_path]

[AS select_statement];

例如:

在当前数据库中创建表staff,其中包含字段:id,name,sex

hive> create table staff(id int, name string, sex string) row format delimited fields terminated by '\t';

(注意:最后那一句英文表明数据字段之间用table制表符分割)

* 格式化输出表staff的结构

hive> desc formatted staff;

如图:

 
 

* 向表中插入数据

语法:

load data local inpath '文件路径' [overwrite] into table 数据库名.表名 ;

解释:

** local 表示加载本地文件

** 文件加载模式:append 追加(默认使用)或 overwrite 覆盖

** load data加载只是进行了简单的位置转移(如果load一个HDFS上的数据,比如从HDFS中的一个位置移动到HDFS中的另一个位置,会发生数据转移,转移之后,原来目录的数据就没有了,如果是从local到HDFS,则不会删除原来的数据

** 加载数据过程中不会去判断字段分隔符是否正确,只有在用户查询数据的时候,会发现错误

例如:

首先,在hive的本地安装目录下,创建文件staff.txt,该文件内容如下:

 
 

接着,将本地文件中的数据导入到table中,使用命令:

hive> load data local inpath 'staff.txt' into table staff;

最后查看导入后的效果

hive> select * from staff;

如图:

 
 

* 修改Hive日志信息

** 重命名配置文件

$ mv hive-log4j.properties.template hive-log4j.properties

** 创建文件夹

$ mkdir logs

** 编辑hive-log4j.properties文件,并修改日志存储目录

hive.log.dir=/opt/modules/apache-hive-0.13.1-bin/logs

如图:

 
 
 
 

* 设置hive在操作时是否显示数据库名称和列名

如图:

 
改为true即可

* Hive任务

hive任务有两种:

走mapreduce:

hive (default)> select name from d1.staff;

如图:

 
 

不走mapreduce:

hive (default)> select * from d1.staff;

如图:

 
 

* Hive的调试

在调试Hive任务时,一般会加入如下参数:

$ bin/hive --hiveconf hive.root.logger=DEBUG,console

* mysql数据库备份与还原

备份与还原的数据库名称均为:metastore,如图:

 
 

** 备份:

$ mysqldump -uroot -p metastore > metastore.sql

如图:

 
 

** 还原:

方案1:

$ mysql -uroot -p metastore < metastore.sql

如图:

 
 

方案2:

$ mysql -uroot -p

mysql>  source /path/metastore.sql ;

* 拓展:mysql存储中innodb和MYISAM区别

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。

** innodb 

新版本5.5+中默认使用;

.frm 结构文件;

.ibdata1 数据文件;

** MYISAM

/var/lib/mysql;

.frm 结构文件;

.MYI 索引文件;

.MYD 数据文件;

* Hive命令两个重要参数

执行sql语句:-e

$ bin/hive -e "select * from d1.staff",如图:

 
 

执行sql语句文件:-f

首先创建一个带有sql语句的文件p1.hql,如图:

 
 

$ bin/hive -f p1.hql,如图:

 
 

* Hive 历史命令的存放

存放位置:~/.hivehistory

查看该文件,如图:

 
 

* Hive中临时设置配置并生效

例如:hive > set hive.cli.print.current.db=true;

(注意,此方式为临时生效)

* 总结

本节主要讲解如何配置并使用Hive,并观察hive任务在mapreduce中的运行以及结果的输出。


个人微博:http://weibo.com/seal13

QQ大数据技术交流群(广告勿入):476966007


作者:Z尽际
链接:https://www.jianshu.com/p/76c0897cbd09
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Hive框架基础(一)的更多相关文章

  1. Hive框架基础(二)

    * Hive框架基础(二) 我们继续讨论hive框架 * Hive的外部表与内部表 内部表:hive默认创建的是内部表 例如: create table table001 (name string , ...

  2. Sqoop框架基础

    Sqoop框架基础 本节我们主要需要了解的是大数据的一些协作框架,也是属于Hadoop生态系统或周边的内容,比如: ** 数据转换工具:Sqoop ** 文件收集库框架:Flume ** 任务调度框架 ...

  3. Hadoop框架基础(五)

    ** Hadoop框架基础(五) 已经部署了Hadoop的完全分布式集群,我们知道NameNode节点的正常运行对于整个HDFS系统来说非常重要,如果NameNode宕掉了,那么整个HDFS就要整段垮 ...

  4. HBase框架基础(四)

    * HBase框架基础(四) 上一节我们介绍了如何使用HBase搞一些MapReduce小程序,其主要作用呢是可以做一些数据清洗和分析或者导入数据的工作,这一节我们来介绍如何使用HBase与其他框架进 ...

  5. HBase框架基础(一)

    * HBase框架基础(一) 官方网址:http://hbase.apache.org/ * HBase是什么妖怪? 要解释HBase,我们就先说一说经常接触到的RDBMS,即关系型数据库: ** m ...

  6. Kafka框架基础

    * Kafka框架基础 官网:kafka.apache.org 框架简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kaf ...

  7. Oozie框架基础

    * Oozie框架基础 官方文档地址:http://oozie.apache.org/docs/4.0.0/DG_QuickStart.html 除Oozie之外,类似的框架还有: ** Zeus:h ...

  8. Hibernatel框架基础使用

    Hibernatel框架基础使用 1.简介 1.1.Hibernate框架由来 Struts:基于MVC模式的应用层框架技术 Hibernate:基于持久层的框架(数据访问层使用)! Spring:创 ...

  9. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

随机推荐

  1. C/C++易错难点笔记01

    疑惑点 C++是一门奇妙的语言.非常多时候你对底层不熟悉,非常难知道某些情况下的结果,以下是我不断积累的疑惑点,这里将其记录下来. 类的转换问题 代码: class A{ public: virtua ...

  2. linux 终端提示符

    默认的当路径一长就难看得出奇. 我的设置: export PS1="|\W$>\[\e[0m\]" 最后效果就是|目录名$> 参考:https://www.cnblog ...

  3. VC下加载多种格式图片的方法总结IPicture, CxImage, CImage(AtlImage), CPictureEx

    尽管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg.gif和png等格式的图片,而这几种格式却是常常要用到的.这里我给大家介绍两种办法来操作这些格式的图片. 1.用 ...

  4. VBA 第一天

    公司实习第一天,excel搞不定啊,学点VBA留着用: 录制宏: 点击录制宏按钮以后,在这段期间你做的每一个操作都会被记录下来,直到你点击停止录制按钮才能够停下,停下来后在此期间每一个操作都会以宏代码 ...

  5. 51nod 1179 最大的最大公约数 (打表计数法)

    题目: 考虑清楚就简单了,我们把每个数的因子计数. 两个数的公约数就是计数超过2的数,然后找到最大的那个就好了. 计算每个数的素因子,记得sqrt(),不然会超时. 打表计数法时间复杂度O(n*sqr ...

  6. hadoop 编译自己的jar包并运行

    我修从网上找了份java代码 我为了让它在hadoop下跑起来居然花了两个多小时... 首先最好不要在java代码中设置package...使用default package即可... 然后在java ...

  7. javascript工具--控制台详解

    一.显示信息的命令 console.log();  //控制台输入 网页中不会输出 console.info();  //一般信息 console.debug();  //除错信息 console.w ...

  8. H5中 input消除默认,取消在手机上的点击高亮效果

    input消除默认,代码如下    input{             -webkit-tap-highlight-color: rgba(255, 255, 255, 0);            ...

  9. servlet中Session的用法

    ## (1)什么是Session? 服务器端为了保存用户的状态而创建的一个特殊的对象(即session对象).          当浏览器第一次访问服务器时,服务器会创建session对象(该    ...

  10. 用TamperMonkey去掉cdsn中的广告

    最近CSDN需要登录后才能查看更多内容,有点影响心情 解决方案 添加一段书签 javascript:(function(){document.getElementById('article_conte ...