* 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. [Angular] Provide Feedback to Progress Events with Angular’s HttpRequest Object

    In some cases your application might need to upload large amounts of data, such as files. Obviously ...

  2. extjs 时间范围选择的实现

    extjs中 有时须要选择一个日期范围 ,须要自己主动推断,选择的開始日期不能大于结束日期,或结束日期不能小于開始日期,实现的代码例如以下 效果图: watermark/2/text/aHR0cDov ...

  3. poj2385(dp)

    题目链接:http://poj.org/problem?id=2385 Apple Catching Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  4. inheritance in kentico

    Visual inheritance http://devnet.kentico.com/docs/7_0/devguide/index.html?visual_inheritance.htm The ...

  5. Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 本博文介绍了MongoDB,并详细指引读者在Ubuntu下MongoDB的安装和使用.本教程在Ubuntu14.04下测试通过. 一.MongoDB介绍 MongoDB 是一个是 ...

  6. javax.validation注解使用

    @Pattern(regexp = "^[0-9]*$",message = "完成比例(进度)必须是数字")

  7. shiro什么时候会进入doGetAuthorizationInfo(PrincipalCollection principals)

    shiro会进入授权方法一共有三种情况!(注解.标签.代码) 1.subject.hasRole(“admin”) 或 subject.isPermitted(“admin”):自己去调用这个是否有什 ...

  8. WPF 基础

    关于布局的规则 控件的布局应该由容器来决定,而不是通过自身使用margin之类的东西来控制位置 避免为控件定义明确的尺寸,但应该限定一个可接受的最大及最小尺寸 不要将界面元素设置成与屏幕坐标相关 容器 ...

  9. Pyinstaller 1 使用PyInstaller

    使用PyInstaller pyinstaller命令的语法是: pyinstaller[ options ] script [ script ...] | spec文件 在最简单的情况下,将当前目录 ...

  10. hiho160周 - 字符串压缩,经典dp

    题目链接 小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串.他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示.例如AAAAAAAAAABABABCCD可以用10(A) ...