大数据技术 Hive安装及使用
沉沙 2018-09-25 来源 : 阅读 1271 评论 0

摘要:本篇教程探讨了大数据技术 Hive安装及使用,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

本篇教程探讨了大数据技术 Hive安装及使用,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

<


 
一、安装方式(内嵌模式,本地模式远程模式)
安装环境以及前提说明:
    Hive是依赖于hadoop系统的,因此在运行Hive之前需要保证已经搭建好hadoop集群环境。
本例中使用的hadoop版本为2.6.1,Hive版本为2.1.1版。
1.Hive的3种安装方式:
    1)内嵌模式(元数据保存在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错)
    2)本地模式(本地安装mysql 替代derby存储元数据)
    3)远程模式(远程安装mysql 替代derby存储元数据)
 
2.内嵌模式参数:
    javax.jdo.option.ConnectionURL
    jdbc:derby:;databaseName=/usr/local/hive/bin/metastore_db;create=true
    描述了hive元数据存储的位置
 
3.Mysql的几个操作
    1)查询平台本身的Mysql版本和安装的MySQL是否是同一个版本,不一致要删除旧的数据库
    2)安装缺少的两个rpm包:libaio 和 perl。联外网(虚拟机要桥接到外网,配置外网后如果ping IP可行,ping域名不行,则需要把ifcfg-eth0复制一份拷贝到dns中)或下载后拷贝到服务器
    3)按项目规模选择合适的配置文件
      ①my-small.cnf是为了小型数据库而设计的。不应该把这个模型用于含有一些常用项目的数据库。
      ②my-medium.cnf是为中等规模的数据库而设计的。如果你正在企业中使用RHEL,可能会比这个操作系统的最小RAM需求(256MB)明显多得多的物理内存。由此可见,如果有那么多RAM内存可以使用,自然可以在同一台机器上运行其它服务。
      ③my-large.cnf是为专用于一个SQL数据库的计算机而设计的。由于它可以为该数据库使用多达512MB的内存,所以在这种类型的系统上将需要至少1GB的RAM,以便它能够同时处理操作系统与数据库应用程序。
      ④my-huge.cnf是为企业中的数据库而设计的。这样的数据库要求专用服务器和1GB或1GB以上的RAM。
    这些选择高度依赖于内存的数量、计算机的运算速度、数据库的细节大小、访问数据库的用户数量以及在数据库中装入并访问数据的用户数量。随着数据库和用户的不断增加,数据库的性能可能会发生变化。
    4)考虑安全问题要对root用户设置密码并删除空用户;创建一个普通用户,并给普通用户赋予localhost和%(远程)的权限;为普通用户创建一个数据库
    5)查看权限和更新权限
        SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
        UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='hive';
    6)初始化MySQL数据库
        schematool -dbType mysql -initSchema
 
4.本地模式参数
    1)javax.jdo.option.ConnectionURL
    jdbc:mysql://localhost/hive?createDatabaseIfNotExist=true
    为Hive创建的访问MySQL的用户的库空间
    2)javax.jdo.option.ConnectionDriverName
    com.mysql.jdbc.Driver
    MySQL的JDBC驱动(需要把mysql的驱动包放到目录 /lib 中)
    3)javax.jdo.option.ConnectionUserName
    hive
    为Hive创建的访问MySQL的用户
 
5.远程模式需要配置那些文件
    1)配置环境变量:/.bashrc
    2)配置Hadoop和Hive的路径:hive-env.sh
    3)hive-default.xml.template --> hive-site.xml
    4) hive.server2.thrift.port– TCP 的监听端口,默认为10000。 
   hive.server2.thrift.bind.host– TCP绑定的主机,默认为localhost
    5)启动
  hive --service metastore &
        hive --service hiveserver2 &
 
二、Hive
1. 什么是Hive
是建立在Hadoop基础上的数据仓库基础架构。可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为QL,类似于SQL语句。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的mapper和reducer来处理内建的mapper和 reducer 无法完成的复杂的分析工作。
Hive 是 SQL解析引擎,它将SQL语句转译成Map/Reduce Job然后在Hadoop执行。
Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在Map/Reduce Job里使用这些数据。
2. Hive实现WordCount

创建一个数据库,如create database word;
建表

create external table word_data(line string) row format delimited fields terminated by '\n' stored as textfile location '/home/hadoop/worddata';

根据MapReduce的规则,我们需要进行拆分,把每行数据拆分成单词,这里需要用到一个hive的内置表生成函数(UDTF):explode(array),参数是array,其实就是行变多列:
create table words(word string);
insert into table words select explode(split(line, " ")) as word from
word_data;
split是拆分函数,跟java的split功能一样,这里是按照空格拆分,所以执行完hql语句,words表里面就全部保存的单个单词
这样基本实现了,因为hql可以group
by,所以最后统计语句为:
select word, count(*) from word.words group by word;
注释:word.words 库名称.表名称,group by word这个word是create
table words(word string) 命令创建的word string



 
3.Java连接Hive查询表信息
public class HiveTest
{
    private static String driverName =
"org.apache.hive.jdbc.HiveDriver";
    private static ResultSet res;
    public static void main(String[] args)
throws Exception {
        Class.forName(driverName);//加载驱动
        Connection conn =
DriverManager.getConnection(
                "jdbc:hive2://192.168.111.219:10000/default",
"hive", "123456");//建立连接
        Statement stmt =
conn.createStatement();//声明
        res = stmt.executeQuery("select *
from userinfo");//用声明stmt对象下的executeQuery方法查询
        while (res.next()) {
            System.out.println(res.getInt(1) +
"\t" + res.getString(2));
        }
        res.close();
        stmt.close();
        conn.close();
    }
}
4.Hive支持的数据类型
    1)基本数据类型:数值类型、布尔型和字符串(TIMESTAMP、BINARY)
        TINYINT 1字节 有符号整数
        SMALLINT2字节 有符号整数
        INT 4字节 有符号整数
        BIGINT  8字节 有符号整数
        FLOAT   4字节 单精度浮点数
        DOUBLE  8字节 双精度浮点数
    2)复杂数据类型:ARRAY、MAP 和 STRUCT
 
5.Hive的数据类型转换
    1)隐式类型转换的规则:

    任何整数类型可以隐式地转换为一个范围更广的类型。

    所有整数类型、FLOAT 和 STRING 类型都能隐式转换为 DOUBLE。 
    TINYINT、SMALLINT 和 INT 都可以转换为 FLOAT。 
    BOOLEAN 类型不能转换为其他任何类型。
    TIMESTAMP 可以被隐式转换为 STRING。 
    2)显示数据类型转换(CAST)
    例如,CAST(‘1’ AS INT)  把字符串’1’转换成整数值 1。 
 
6.内表和外表
EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)。
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
 
11.Hive的三种启动方式
1)  
hive  命令行模式
进入hive安装目录,输入bin/hive的执行程序,或者输入 hive –service cli
用于linux平台命令行查询,查询语句基本跟mysql查询语句类似
2)  
hive  web界面的启动方式
bin/hive –service hwi  (& 表示后台运行)
用于通过浏览器来访问hive,感觉没多大用途,浏览器访问地址是:127.0.0.1:9999/hwi
3)  
hive  远程服务 (端口号10000) 启动方式
    bin/hive
–service hiveserver2  &(&表示后台运行)
用java,python等程序实现通过jdbc等驱动的访问hive就用这种起动方式了,这个是程序员最需要的方式
 
二、数据库
1.hive会为每个数据库创建一个目录。数据是库中的表将会以这个数据库目录的子目录形式存储。
有一个例外就是default数据中的表,因为这个数据库本身没有自己的目录。
数据库所有的目录位于属性hive.metastore.warehouse.dir所指定的顶层目录之后。
用户可以通过如下命令来修改这个默认的位置
create database financials location
'/my/preferred/directory';

建立数据库:create database if not exists financials;
显示Hive中所包含的数据库:show databases;
使用正则表达式匹配来筛选出需要的数据库名:show databases like 'h.*';
为数据库增加一个描述信息并查看:create database financials comment
'Holds all financial tables';   describe database financials
切换数据库:use financials
显示当前数据库:set hive.cli.print.current.db=true
删除数据库:drop database if exists financials(库中没有表);   drop database if exists financials
CASCADE;(库中有标强删)
用root登陆Mysql,给用户添加CREATE,DROP权限:


    GRANT
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON hive.* TO hive@'%' identified by
'123456';
    FLUSH PRIVILEGES;
 
 
三、数据类型举例
1、建表命令
CREATE TABLE
employee(
name STRING,
salary FLOAT,
subordinates
ARRAY,
deductions
MAP,
address
STRUCT)
row format delimited
fields terminated by '\001'
collection items
terminated by '\002'
MAP KEYS terminated
by '\003'
LINES terminated by
'\n'
stored as textfile;
2、查看表结构:describe employee;
3、导数据:load data local inpath
'/root/employees.txt' into table employee;
4、查询表内容
SELECT * FROM
employee;
SELECT name ,salary
FROM employee;
SELECT name ,
subordinates[0] FROM employee;
SELECT name ,
deductions["State Taxes"] FROM employee;
SELECT name ,
address.city FROM employee;
 
 
四、建表方式
1.直接建立表
2.指定表空间建立表
CREATE TABLE mydb.employee(
name STRING,
subordinates
ARRAY)
row format delimited
fields terminated by '\001'
collection items
terminated by '\002'
LINES terminated by
'\n'
stored as textfile;
3.复制表结构建立新表(LIKE)
CREATE TABLE IF NOT
EXISTS copy_employee LIKE employee; 
4.复制指定表字段结构及数据并建立表(AS SELECT)
CREATE TABLE
copy_part_employee AS SELECT name,subordinates from employee;
 
 
五、加载数据
1.从本地加载数据到表中:load data local inpath
'/root/employees.txt' into table employee;
从HDFS中加载数据到表中:load
data inpath '/test/employees.txt' OVERWRITE into table employee;
2.从原有的表employee中追加数据到表copy_employee:
insert INTO table copy_employee select * from employee
从原有的表employee中加载数据到表copy_employee,并替换掉原来的数据
insert OVERWRITE table copy_employee select * from employee;
3.创建表的时候通过select加载数据:
create table cr_employee as SELECT * from employee;
创建表的时候通过select 指定建立的字段并加载指定字段的数据
create table cr_employee1 as SELECT name from employee;
4.直接把与表结构相符的数据文件复制到表指定的存储位置
dfs -put /root/employees.txt /user/hive/warehouse/employee;
 
六、表操作
1.表重命名(RENAME TO):ALTER TABLE employee RENAME TO rm_emp;
2.修改列信息(CHANGE COLUMN对某个字段进行重命名,并修改其位置、类型或者注释):
ALTER TABLE employee
CHANGE COLUMN
name rename STRING COMMENT
'The people name';
3.增加列(ADD COLUMNS在表的最后添加字段)
ALTER TABLE employee
ADD COLUMNS(
addcol1 STRING
COMMENT  'Application name',
addclo2 INT COMMENT
'The current session id');
4.删除列或者替换列(REPLACE COLUMNS替换原来所有的字段)
ALTER TABLE employee
REPLACE COLUMNS(
rename  STRING 
COMMENT  'name to rename',
resalary  FLOAT COMMENT 
'salary to resalary',
resub  ARRAY COMMENT  'subordinates to resub');
 
八、分区和分桶、视图
1. 分区:
  所谓分区(Partition) 对应于数据库的 Partition 列的密集索引。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。
  有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。
  分区表指的是在创建表时指定的partition的分区空间。一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。
  分区是以字段的形式在表结构中存在,通过describetable命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示(伪列)
2. 分桶
  桶是更为细粒度的数据范围划分。
  Hive采用对 列值哈希 除以 桶的个数 求余 的方式决定该条记录存放在哪个桶当中
  优点:获得更高的查询处理效率;使取样(sampling)更高效。
3. 视图
  和关系数据库中的视图一个概念,可以向用户集中展现一些数据,屏蔽一些数据,提高数据库的安全性。
 
九、Hive中order by、sort
by、distribute by、cluster by的区别
order by对输入做全局排序,只有一个reducer(多个reducer无法进行全局),输入规模较大时,需要较长的计算时间。与数据库的区别在于必须指定limit,因为数据量大时也只在一台服务器上,会出现无法输出结果的情况,进行limit,就只有n*map number条记录,一个reduce也可以处理
sort by在数据进入reducer前排序,sort by只保证同一reduce中的数据可以按指定字段排序
distribute by按照指定的字段对数据进行划分到不同的输出reduce/文件中
cluster by具有distribute by和sort by的功能,但是排序只能是倒排
 
十、Hive在建表时,可以通过'STORED AS FILE_FORMAT'
指定存储文件格式。有以下几种:

TextFile:存储空间较大,压缩之后的文件不能分割与合并,查询效率低;可直接存储,加载速度最快;这种是默认的格式。
SequenceFile:hadoop API提供的一种二进制文件支持,存储空间最大,可分割与合并,查询效率高,需要text文件转换来加载
RcFile:是一种行列存储相结合的存储方式。



    1)将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block;
    2)块数据列式存储,有利于数据压缩和快速的列存取。查询效率最高、存储空间最小、但加载最慢。
 
 
十一、Sqoop = Sql to Hadoop

Sqoop的作用:允许用户将数据从结构化存储器抽取到Hadoop 中,用于如MapReduce、Hive的进一步的处理。Sqoop可以将这些结果导回数据存储器,供其他客户端使用。
Sqoop import命令参数的含义



    sqoop import 
    --connect
jdbc:mysql://localhost/hadoopguide    #jdbc连接字符串
    --table widgets     #读取的表名
    -m 1 map    #任务的个数
    --target-dir
/widgets   #hdfs目标路径
  3.  Sqoop导出命令的含义
     sqoop export --connect
jdbc:mysql://localhost/hadoopguide -m 1 --table sales_by_zip --export-dir
/user/hive/warehouse/zip_profits --input-fields-terminated-by '\0001'
    --connect mysql连接字符串
    -m mapreduce的个数
    --table 表明
    --export-dir 导出路径
    --input-fields-terminated-by 输入字段的分割字符
     

本文由职坐标整理发布,学习更多的大数据技术相关知识,请关注职坐标大技术云计算大技术技术频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved