大数据之hive实践一(基础)

    科技2024-06-13  77

    预知识

    数据仓库

    数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成 的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant )的数据集合,用于支持管理决策。

    Hive与Hadoop生态系统中其他组件的关系

    1.Hive基本概念

    1.1 什么是 Hive

    Hive:由 Facebok 开源用于解决海量结构化日志的数据统计。 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。 本质是:将 HQL 转化成 MapReduce 程序 1)Hive 处理的数据存储在 HDFS 2)Hive 分析数据底层的实现是 MapReduce 3)执行程序运行在 Yarn 上

    1.2 Hive 的优缺点

    1.21 优点

    操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)。避免了去写 MapReduce,减少开发人员的学习成本。Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高。Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

    1.2.2缺点

    1.Hive 的 HQL 表达能力有限 (1)迭代式算法无法表达 (2)数据挖掘方面不擅长

    2.Hive 的效率比较低 (1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化 (2)Hive 调优比较困难,粒度较粗

    1.3 Hive 架构原理

    1.4 Hive 和数据库比较

    存储位置hdfs本地文件系统中引擎mp自己的

    由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询 特点:Hive处理的数据规模更大,所以延迟性高,且存储在hdfs上

    2.安装及启动

    2.1环境

    ubuntu 16.04 hadoop 2.2.1 hive 2.1.0(可通过JPS命令,找到RunJar对应的id,执行lsof -g 17860 | grep hive-service查到) mysql 5.7

    2.2Hadop 集群配置

    cd /usr/local/hadoop (1)必须启动 hdfs 和 yarn [atguigu@hadop102 hadop-2.72]$ sbin/start-dfs.sh [atguigu@hadop103 hadop-2.72]$ sbin/start-yarn.sh (2)在 HDFS 上创建/tmp 和/usr/local/hive/warehouse 两个目录并修改他们的同组权限可写 [atguigu@hadop102 hadop-2.72]$ bin/hadop fs -mkdir /tmp [atguigu@hadop102 hadop-2.72]$ bin/hadop fs -mkdir -p /usr/local/hive/warehouse [atguigu@hadop102 hadop-2.72]$ bin/hadop fs -chmod g+w /tmp [atguigu@hadop102 hadop-2.72]$ bin/hadop fs -chmod g+w /user/hive/warehouse 或者在配置文件中关闭权限检查 在 hadop 的 hdfs-site.xml 中 dfs.permisions.enable false 3.Hive 基本操作 (1)启动 hive [atguigu@hadop102 hive]$ bin/hive (2)查看数据库 hive> show datbase; (3)打开默认数据库 hive> use default; (4)显示 default 数据库中的表 hive> show tables; (5)创建一张表 hive> create table student(id int, name string); (6)显示数据库中有几张表 hive> show tables; (7)查看表的结构 hive> desc student; (8)向表中插入数据 hive> insert into student values(10,“s”); (9)查询表中数据 hive> selct * from student; (10)退出 hive hive> quit;

    2.3 将本地文件导入 Hive 案例

    需求 将本地/opt/module/datas/tudent.txt 这个目录下的数据导入到 hive 的 student(idnt,ame string)表中。 1.数据准备 在/opt/module/dats 这个目录下准备数据 (1)在/opt/module/目录下创建 datss mkdir datas (2)在/opt/module/datss/目录下创建 student.x 文件并添加数据

    touch student.txt vi student.xt

    101 zhangshan 102 lishi 103 zhaoliu

    注意以 tab 键间隔。 2.Hive 实际操作 (1)启动 hive

    hive>bin/hive

    (2)显示数据库

    hive> show datbase;

    (3)使用 default 数据库

    hive> use default;

    (4)显示 default 数据库中的表

    hive> show tables;

    (5)删除已创建的 student 表

    hive> drop table student;

    (6)创建 student 表, 并声明文件分隔符’\t hive> create table student(id int, name string) ROW FORMAT DELIMTED FIELDS TERMINATED BY ‘\t’; (7)加载/opt/module/dats/tudent.txt 文件到 student 数据库表中。 双引号也可以

    hive> load data local inpath '/usr/local/datas/student.txt' into table student;

    (8)Hive 查询结果

    hive> select * from student;

    OK 101 zhangshan 102 lishi 103 zhaoliu Time taken: 0.26 seconds, Fetched: 3 row(s)

    2.4 MySql 安装

    切换管理员账户,数据密码(hive默认存储derby数据库,不能同时启动两个以上)

    sudo service mysql start service mysql status mysql -uroot -p密码 use mysql; selct user, Host, from user;

    修改 user 表,把 Host 表内容修改为%

    update user set host='% wher host='localhost';

    删除 root 用户的其他 host

    mysql>delte from user where Host='127.0.1';

    刷新

    mysql>flush privilegs;

    退出

    mysql>quit;

    2.5 Hive 元数据配置到 MySql

    驱动拷贝 配置 Metasore 到 MySql hive/conf 目录下创建一个 hive-site.xml. 根据官方文档配置参数,拷贝数据到 hive-site.xml 文件中 https://cwik.apche.org/confluence/display/Hive/AdminManual+MetasoreAdmin

    2.6 Hive 常用交互命令

    bin/hive -help 1.“-e”不进入 hive 的交互窗口执行 sql 语句

    bin/hive -e "select id from student;"

    2.“-f”执行脚本中 sql 语句 (1)在/usr/local/data 目录下创建 hivef.sql 文件

    touch hivef.sql

    文件中写入正确的 sql 语句

    selcet * from student;

    (2)执行文件中的 sql 语句

    bin/hive -f /usr/local/data/hivef.sql

    (3)执行文件中的 sql 语句并将结果写入文件中

    bin/hive -f /usr/local/datahivef.sql > /opt/module/dats/hive_result.txt

    第 3 章 Hive 数据类型

    3.1 基本数据类型

    于 Hive 的 String 类型相当于数据库的 varchar 类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上可以存储 2GB 的字符数。

    3.2集合数据类型

    Hive 有三种复杂数据类型 ARRAY、MAP 和 STRUCT。ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似,而 STRUCT 与 C 语言中的 Struct 类似,它封装了一个命名字段集合, 复杂数据类型允许任意层次的嵌套。

    实操: 某一表的数据结构如图: 1.基于上述数据结构,在 Hive 里创建对应的表,并导入数据。

    2.创建表 row format delimted fields terminated by ', '- 列分隔符 collection items terminated by ‘_’ -MAP STRUCT 和 ARAY 的分隔符(数据分割 符号) map keys terminated by ‘:’ -MAP 中的 key 与 value 的分隔符 lines terminated by ‘\n’; - 行分隔符 3.加载数据 4.访问数据 array

    map

    struct

    3. 3类型转化

    隐式转换类似java,强行转换用cast

    1.隐式类型转换规则如下 (1)任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换 成 INT,INT 可以转换成 BIGNT。 (2)所有整数类型、FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。 (3)TINYINT、SMALINT、INT 都可以转换为 FLOAT。(除了bigint) (4)BOLEAN 类型不可以转换为任何其它的类型。

    2.可以使用 CAST 操作显示进行数据类型转换 例如 CAST('1 ’ AS INT)将把字符串’1 转换成整数 1;如果强制类型转换失败,如执行 CAST('X AS INT),表达式返回空值 NULL。 参考尚硅谷的HIVE教程,林子雨《大数据技术原理与应用》课件

    Processed: 0.021, SQL: 8