hive是依赖于hdfs和yarn的一个数据仓库

数据库和数据仓库的区别:

数据库在存储数据的同时,允许实时的增删改查等操作

数据仓库在存储数据的同时还执行着计算和分析数据的工作,但是并不能实时的进行增删改等操作,如果

需要对数据进行更新则需要将数据下载下来更新之后再放入数据仓库中,是一次写入多次读取的过程

所以hive并不能取代mysql,mssql等数据库(不像hbase一样可以根据不同业务的需求取代那些传统数据

库),甚至可以将hive看成是一种数据挖掘工具,用来分析hdfs上的大数据





hive上的数据库和表都对应着hdfs上的一个目录(不是文件),表中的数据对应的是该目录下的文件内容

,hive的表分为内部表,外部表和分区表

内部表:创建表时没有指定的话,默认为内部表。先创建,后从本地系统导入数据到内部表中

外部表:创建表时通过指定对应的hdfs存储地址来建立外部表和hdfs文件的关联

分区表:创建表时可以通过业务需求来建立多级分区,如:按照日期来分区,这样在hdfs中不同分区的数

据会被存储在不同的文件夹中。向分区表导入数据时需要指定分区的字段





hive执行流程:

当hive执行一个任务时,会向元数据仓储发送或者查询元数据信息,以获得hive中表和hdfs文件系统中的

对应关系。以mysql为例:hive中的信息都存储在mysql的名为hive的数据库中,hive表信息存储在TBLS表

中,TBLS存储了hive中每个表的ID,创建时间,类型等信息。根据表ID可以在COLUMNS_V2表中查找该表对

应的有哪些字段,字段的类型等。根据表ID可以在SDS表中查到该表的hdfs输入路径,输入输出格式化的

方式(mr任务时有用)等信息









hive安装和配置mysql作为其元数据的仓储:

只在一个节点上安装即可





1.上传tar包

 

2.解压

tar -zxvf hive-0.9.0.tar.gz  ~/cloud/

3.安装mysql(切换到root用户)

配置HIVE_HOME环境变量

检查机器上是否有安装了mysql相应的服务

rpm -qa | grep mysql

如果有则卸载

rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps

安装mysql服务端和客户端

rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm 

rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm 

安装成功后运行下面的程序进行mysql初始化

/usr/bin/mysql_secure_installation

(注意:删除匿名用户,允许用户远程连接)

登陆mysql

mysql -u root -p





4.配置hive

cp hive-default.xml.template hive-site.xml 

修改hive-site.xml(删除所有内容,只留一个<configuration></configuration>,然后将下面





对应的property属性添加进进去)

或者新建hive-site.xml 文件添加如下内容(以下配置文件要注意mysql服务所在的地址和连接

的用户名密码等):

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://cloud3: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>

</configuration>



5.安装hive和mysql完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下

如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)

mysql -uroot -p

#(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'JChubby123' WITH GRANT OPTION;

FLUSH PRIVILEGES;









hive操作:

6.建表(默认是内部表)

create table trade_detail(id bigint, account string, income double, expenses double, 

time string) row format delimited fields terminated by '\t';

建表时要指定字段之间的分隔符





建分区表

create table td_part(id bigint, account string, income double, expenses double, time 

string) partitioned by (logdate string) row format delimited fields terminated by '\t';

除了执行字段分隔符 之外还要指定分区字段





建外部表

create external table td_ext(id bigint, account string, income double, expenses 

double, time string) row format delimited fields terminated by '\t' location '/td_ext';

通过external关键字来建立外部表,location来指定要关联的hdfs文件系统的位置

分区表加载数据

load data local inpath './book.txt' overwrite into table book partition 

(pubdate='2010-08-22');













使用sqoop将mysql的数据导入到hive表中(sqoop先将数据导入到hdfs中,在调用hive的命令load到hive

表中,所以要配置hive的环境变量)

在hive当中创建两张表

create table trade_detail (id bigint, account string, income double, 

expenses double, time string) row format delimited fields terminated by '\t';

create table user_info (id bigint, account string, name  string, age int) 

row format delimited fields terminated by '\t';



将mysq当中的数据直接导入到hive当中

sqoop import --connect jdbc:mysql://192.168.61.130:3306/cloud --username 

root --password JChubby123 --table trade_detail --hive-import --hive-overwrite --hive-table 

trade_detail --fields-terminated-by '\t'

sqoop import --connect jdbc:mysql://192.168.61.130:3306/cloud --username 

root --password JChubby123 --table user_info --hive-import --hive-overwrite --hive-table 

user_info -- fields-terminated-by '\t'





创建一个result表保存前一个sql执行的结果

create table result row format delimited fields terminated by '\t' as select 

t2.account, t2.name, t1.income, t1.expenses, t1.surplus from user_info t2 join (select 

account, sum(income) as income, sum(expenses) as expenses, sum(income-expenses) as surplus 

from trade_detail group by account) t1 on (t1.account = t2.account);













使用自定义的UDF函数

像传统数据库中的存储过程一样,自定义的UDF函数有输入和输出。当hive的函数不能满足业务需求的时





候就需要自定义UDF函数来进行任务执行

1.引入hive和hadoop common的jar包

2.自定义类,并继承自UDF类

3.定义UDF函数,统一命名为evaluate,如:

public Text evaluate(Text in)

输入和输出要使用hadoop io的基本类型,因为其也要走mr任务和网络传输

4.将其打包成jar并上传到装有hive的机器中

5.在hive shell中执行命令将jar包中的函数添加进去

自定义函数调用过程:

1.添加jar包(在hive命令行里面执行)

hive> add jar /root/NUDF.jar;





2.创建临时函数

hive> create temporary function getNation as 'NationUDF';

函数要写成包括包名的全名称





3.调用

hive> select id, name, getNation(nation) from beauty;





4.将查询结果保存到HDFS中

create table result row format delimited fields terminated by '\t' as select id, getNation

(nation) from beauties;

hive操作记录的更多相关文章

  1. Mycat读写分离、主从切换、分库分表的操作记录

    系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...

  2. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

  3. centos 6x系统下源码安装mysql操作记录

    在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...

  4. Mysql更换MyISAM存储引擎为Innodb的操作记录

    一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件.通过下面的命令结果可知,已经安装了innodb插件. mysql> show p ...

  5. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  6. Linux下修改系统编码的操作记录

    Linux系统安装后,发现中文显示乱码.因为系统编码为en_US.UTF-8,应改为支持中文的编码(即zh_CN.UTF-8)操作记录如下:1)检查linux的系统编码检查linux的系统编码,确定系 ...

  7. Nginx中防盗链(下载防盗链和图片防盗链)操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  8. nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录

    geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module.ngx_http_geo_modu ...

  9. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

随机推荐

  1. appium===Appium的前世今生

      一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriv ...

  2. java对象内存大小评估

    Java对象的内存布局:对象头(Header).实例数据(Instance Data)和对齐填充(Padding).无论是32位还是64位的HotSpot,使用的都是8字节对齐.也就是说每个java对 ...

  3. python日志模块笔记

    前言 在应用中记录日志是程序开发的重要一环,也是调试的重要工具.但却很容易让人忽略.之前用flask写的一个服务就因为没有处理好日志的问题导致线上的错误难以察觉,修复错误的定位也很困难.最近恰好有时间 ...

  4. python3的leetcode题,两个数求和等于目标值,返回这两个数的索引组成的列表(三种方法)

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为gai目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 ...

  5. Linux命令之:tr

    1. 用途: tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作. 2. 语法: tr [OPTION]... SET1 [SET2] 3. 参数: -s: ...

  6. hdu 1224(动态规划 DAG上的最长路)

    Free DIY Tour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  7. 使用maven进行Javadoc下载

    project -> maven -> Download Sources and Download JavaDocs

  8. Yii2中如何访问controller的二级目录下的控制器

    Yii2默认的控制器下只有一层目录放在controller目录下,当开发的需要的时候需要在该目录下面新增一层目录也就是在controller下增加二级目录,比如controller/api/Membe ...

  9. svn泄漏敏感信息利用方式

    之前仅知道svn权限配置不当,会导致敏感信息泄漏,但是一直不知道具体利用方式. 今天测试svn dig时抓包分析才知道: http://www.xxx.com/路径/.svn/text-base/文件 ...

  10. 洛谷 P1577 切绳子【二分答案】

    题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位. 输入输出格式 输入格式: 第一行两个整数N和K,接下来N行,描 ...