推荐系统-Hive基础

news/2024/5/4 21:30:27/文章来源:https://blog.csdn.net/root1228544694/article/details/107769765

Hive基本操作

  • 基本概念
    • 功能说明
    • 架构
    • hive和hadoop
    • 数据模型
    • 安装部署
      • 安装
      • 启动
  • 基本操作
    • hive的内部表和外部表
    • 分区表
      • 动态分区
  • Hive函数
    • Hive内置运算符和内置函数
    • Hive自定义函数
  • 综合案例

基本概念

功能说明

在这里插入图片描述

  • 操作接口采用类SQL法,提供快速开发的能力
  • 避免了去写MapReduce,减少开发人员的学习成本
  • 功能扩展很方便

架构

在这里插入图片描述
在这里插入图片描述

hive和hadoop

  • Hive利用HDFS存储数据,利用MapReduce查询分析数据
  • 注:Hive是数据仓库工具,没有集群的概念。只需要在hadoop集群Master节点上装Hive。

数据模型

在创建表时指定数据中的分隔符,Hive就可以映射成功,解析数据

  • Hive中包含以下数据模型:
    • db:在hdfs中表现为hive.metastore.warehouse.dir目录下的一个文件夹
    • table:在hdfs中表现所属db目录下一个文件夹
    • external table:数据存放位置可以在HDFS任意指定路径
    • partition:在hdfs中表现为table目录下的子目录
    • bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件

安装部署

安装

#Hive安装前需要安装好JDK和Hadoop并配置好环境变量。
#下载Hive的安装包 http://archive.cloudera.com/cdh5/cdh/5/ 并解压tar -zxvf hive安装包  -C ~/bigdata/#进入到解压后的hive目录中,找到conf目录,修改配置文件
cp hive-env.sh.template hive-env.sh
vi hive-env.sh#在hive-env.sh中指定hadoop的路径
HADOOP_HOME=/root/bigdata/hadoop配置环境变量
# 编辑文件
vi ~/.bash_profile
# 进行环境变量配置
export HIVE_HOME=/root/bigdata/hive
export PATH=$HIVE_HOME/bin:$PATH
# 更新配置
source ~/.bash_profile

启动

  • 启动Hive之前先要开启hive的元数据服务
    在这里插入图片描述

基本操作

注意:
hive创建数据库时不需要指定charset
hive中创建表时需要指定表字段数据之间的分隔符

创建数据库
CREATE DATABASE test;显示所有数据库
SHOW DATABASES;创建表
CREATE TABLE student(classNo string, stuNo string, score int)
row format delimited fields terminated by ',';将数据load到表中
load data local inpath '/root/tmp/student.txt' overwrite into table student;查询表中的数据跟SQL类似
hive>select * from student;分组查询group by和统计count
hive>select classNo,count(score) from student where score>=60 group by classNo;

对于复杂的hql查询,会被翻译成mapreduce任务执行

hive的内部表和外部表

在这里插入图片描述

创建一个外部表student2
CREATE EXTERNAL TABLE student2 (classNo string, stuNo string, score int)
row format delimited fields terminated by ','
location '/root/tmp/student';装载数据
load data local inpath '/root/tmp/student.txt' overwrite into table student2;显示表信息
desc formatted table_name;删除表查看结果
drop table student2;再次创建外部表student2
不插入数据直接查询查看结果
select * from student2;

分区表

  • hive中分区表实际就是对应hdfs文件系统上独立的文件夹,该文件夹内的文件是该分区所有数据文件
  • 表现:在hdfs中表现为table目录下的一个子目录。
  • 作用:使用分区字段查询时,不会进行全表扫描,查询效率高。
创建分区表
create table employee (name string,salary bigint) partitioned by (date1 string)
row format delimited fields terminated by ','
lines terminated by '\n' stored as textfile;查看表的分区
show partitions employee;添加分区
alter table employee add if not exists partition(date1='2018-12-01');加载数据到分区
load data local inpath '/root/tmp/employee.txt' into table employee partition(date1='2018-12-01');
如果重复加载同名文件,不会报错,会自动创建一个*_copy_1.txt外部分区表即使有分区的目录结构, 也必须要通过hql添加分区, 才能看到相应的数据
hadoop fs -mkdir /user/hive/warehouse/test.db/employee/date1=2018-12-04
hadoop fs -copyFromLocal /root/tmp/employee.txt /user/hive/warehouse/test.db/employee/date1=2018-12-04/employee.txt此时查看表中数据发现数据并没有变化, 需要通过hql添加分区
alter table employee add if not exists partition(date1='2018-12-04');

分区字段不是数据文件中的列数据
分区字段的值仅仅是一个目录名
查看数据时,hive会自动添加分区列
支持多级分区也就是多级子目录

动态分区

在写入数据时自动创建分区(包括目录结构)
创建表
create table employee2 (name string,salary bigint) partitioned by (date1 string)
row format delimited fields terminated by ','
lines terminated by '\n' stored as textfile;导入数据
insert into table employee2 partition(date1) select name, salary, date1 from employee;使用动态分区需要设置参数
set hive.exec.dynamic.partition.mode=nonstrict;

Hive函数

Hive内置运算符和内置函数

Hive有四种类型的运算符:
关系运算符
算术运算符
逻辑运算符
复杂运算
Hive内置函数
简单函数: 日期函数、字符串函数、类型转换
统计函数:sum、avg、distinct
集合函数:size、array_contains
show functions:显示所有函数
desc function 函数名;
desc function extended 函数名;

Hive自定义函数

UDF:用户自定义函数(user-defined function),相当于mapper,对每一条输入数据,映射为一条输出数据
UDAF:用户自定义聚合函数 (user-defined aggregation function),相当于reducer,做聚合操作,把一组输入数据映射为一条(或多条)输出数据。

在hdfs中创建/user/hive/lib目录
hadoop fs -mkdir /user/hive/lib把hive目录下lib/hive-contrib-2.3.4.jar放到hdfs中
hadoop fs -put hive-contrib-2.3.4.jar /user/hive/lib/把集群中jar包的位置添加到hive中
hive> add jar hdfs:///user/hive/lib/hive-contrib-2.3.4.jar;在hive中创建临时UDF
hive> create temporary function row_sequence as 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence';
在之前的案例中使用临时自定义函数(函数功能:添加自增长的行号)
select row_sequence(), * from employee;创建非临时自定义函数
create function row_sequence as 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence'
using jar 'hdfs:///user/hive/lib/hive-contrib-2.3.4.jar';

Python UDF

#准备案例环境
#创建表
create table users(fname STRING,lname STRING);#向表中插入数据
insert into table users values('George','washington');
insert into table users values('George','bush');
insert into table users values('Bill','clinton');
insert into table users values('Bill','gates');#编写map风格脚本
import sys
for line in sys.stdin:line = line.strip()fname , lname = line.split('\t')l_name = lname.upper()print '\t'.join([fname, str(l_name)])#通过hdfs向hive中add file
#加载文件到hdfs
hadoop fs -put udf.py /user/hive/lib/#hive从hdfs中加载python脚本
add file hdfs:///user/hive/lib/udf.py;# Transform
select TRANSFORM(fname, lname) using 'python udf.py' as (fname, l_name) from users;

综合案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_4420.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通信原理 | 基本概念:信源、信道、噪声、信宿等

一、通信的基本概念 1. 信源 通信中产生和发送信息的一端叫做信源 2. 信宿 通信中接收信息的一端叫做信宿 3. 信道 信号在信源和信宿之间传输的通道叫做信道(主要分为有线信道和无线信道) 4. 噪声 信息在传输过程中可能受到外界干扰,把这种干扰成为噪声 5.…

关于Flask高级_RequestParser中的add_argument方法参数详解

Flask高级_RequestParser中的add_argument方法参数详解 一.参数介绍 default:默认值,如果这个参数没有值,那么将使用这个参数 指定的默认值。 required:是否必须。默认为False,如果设置为True,那么这 个参…

msf后渗透之文件交互指令、上传下载文件、屏幕截图、键盘记录、创建账户、音频录像和提权(上)

目录 1、文件交互指令 2、上传下载文件(windows) 3、屏幕截图(windows) 4、键盘记录(windows) 1、先启动记录keyscan_start 2、显示键盘输入内容keyscan_dump 3、结束监控keyscan_stop 5、创建账户(windows) 1、先看下目标…

C语言-手写Map(数组+链表+红黑树)(全功能)

要求 需要准备数组集合(List) 数据结构需要准备单向链表(Linked) 数据结构需要准备红黑树(Rbtree)数据结构需要准备红黑树和链表适配策略(文章内部提供,可以自行参考) 建议先去阅读我博客这篇文章C语言-手写Map(数组链表)(全功能) 有助于理解 hashmap使用红黑树的原因是&…

Java实现的一个编译器源代码(Win11)

本文的源代码摘自编译器龙书《Compilers : principles, techniques, and tools》第二版的附录A“一个完整的前端”(A Complete Front End)。 上述书中的编译器是在Unix系统中,主体代码与书中相同,只是对字符串处理不同&#xff1…

C++ Qt / VS2019 +opencv + onnxruntime 部署语义分割模型【经验】

本机环境: OS:WIN11 CUDA: 11.1 CUDNN:8.0.5 显卡:RTX3080 16G opencv:3.3.0 onnxruntime:1.8.1 目前C 调用onnxruntime的示例主要为图像分类网络,与语义分割网络在后处理部分有很大不同。 pytorch模型转为onnx格式 1.1 安装onnx, 参考官网…

Tcp通信

一发一收 Client package tcpDemo;import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception {//1.创建Socke通信管道请求服务端的连接//p…

TCP连接管理机制(超级重要)

以下是这篇文章讲解的思维导图,整理完,我也脑瓜子嗡嗡的,怎么这么多,那是因为太重要了,防止面试官把你问死,那就必须去了解,加油啊~~~ 参考 : 小林coding 书籍 : TCP/IP 卷一 网站 : 计算机网络-41-60 | 阿秀的学习笔记 知乎文章 : 看到有人说,只看到过TCP状态位…

【单片机原理及应用】第一篇——单片机概述

个人主页 点击这里 专栏学习 点击这里 目录 内容概要 1.1单片机简介 1.2单片机的发展历史 1.3单片机的特点 1.4单片机的应用 1.工业检测与控制 2.仪器仪表 3.消费类电子产品 4.通讯 5.武器装备 6.各种终…

python从入门到实践:数据类型、文件处理

目录 一、数据类型 1.数字 整型与浮点型 其他数字类型 2.字符串 3.字节串 4.列表 5.元祖 6.集合 7.字典 8.可变类型与不可变类型 数字类型 字符串 列表 元祖 字典 9.数据类型总结 二、文件处理 1.文件的引入 2.文件的基本操作流程 2.1基本流程 2.2资源回…

【Java 基础】7、学习 Java 中的方法(方法的定义、可变参数、参数的传递问题、方法重载、方法签名)通过官方教程

💰 写了一段时间的 Java 程序,SpringBoot 🍃项目也做了好几个,但感觉自己对 Java 的了解还是特别少,所以决定从零🍼开始重新学习,下面是学习的笔记。【学习素材:韩顺平老师】 &#…

docker 安装 elasticsearch

一、安装docker Docker 的安装_傲傲娇的博客-CSDN博客 二、配置es挂载文件和目录 mkdir -p /opt/elasticsearch/{config,data,plugins} chmod 777 /opt/elasticsearch/data 在config目录下创建elasticsearch.yml配置文件 cluster.name: elasticsearch-cluster # 节点名称 n…

【MC教程】iPad启动Java版mc(无需越狱)(保姆级?) Jitterbug启动iOS我的世界Java版启动器 PojavLauncher

【MC教程】iPad启动Java版mc(无需越狱)(保姆级?) Jitterbug启动iOS我的世界Java版启动器 PojavLauncher 文章目录【MC教程】iPad启动Java版mc(无需越狱)(保姆级?) Jitterbug启动iOS我的世界Java版启动器 PojavLauncher前言iSign…

springmvc实现文件上传书本管理CRUD

今天小编给大家分享文件上传&#xff0c;和对书本管理进行新增、修改、删除、查询。 效果展示 首页 新增 修改 一、书本管理CRUD 1.开发前必做的配置 1.1 导入pom.xml文件依赖 实现CRUDspringmvc的jar包 <dependency><groupId>org.springframework</groupId…

3.实现redis哨兵,模拟master故障场景

3.实现redis哨兵,模拟master故障场景 实验拓扑图 3.1 哨兵的准备实现主从复制架构 哨兵的前提是已经实现了一个redis的主从复制的运行环境,从而实现一个一主两从基于哨兵的高可用redis架构。 注意: master 的配置文件中的masterauth 和slave的都必须相同 所有主从节点的redis…

小波神经网络的基本原理,小波神经网络功能分析

小波神经网络的优势是什么&#xff1f;谢谢 小波神经网络相比于前向的神经网络,它有明显的优点:首先小波神经网络的基元和整个结构是依据小波分析理论确定的,可以避免BP神经网络等结构设计上的盲目性;其次小波神经网络有更强的学习能力,精度更高。 总的而言&#xff0c;对同样…

数据结构初步(一)- 时间与空间复杂度

目录前言1. 数据结构与算法1.1 数据结构是啥1.2 算法是啥2. 算法效率2.1 如何衡量一个算法的效率2.2 算法的复杂度3. 时间复杂度3.1 概念3.2 大O的渐进表示法3.3 例子分析计算Func2的时间复杂度计算Func3的时间复杂度计算Func4的时间复杂度计算strchr的时间复杂度计算冒泡排序的…

端口号被占用解决办法(超详细)

文章目录问题描述java.net.BindException: Address already in use: JVM_BindWeb server failed to start. Port 8899 was already in use.解决方案问题描述 java.net.BindException: Address already in use: JVM_Bind Web server failed to start. Port 8899 was already in…

极几何,本质矩阵,基础矩阵,单应矩阵

什么是三角化&#xff1f; 三角化就是下图的红字部分&#xff1a; 什么是极几何&#xff1f; 极几何描述了同一场景或者物体在两个视点图像间的对应关系。 下图中的O1和O2分别是两个相机的光心&#xff0c;即摄像机坐标系的原点。由下图可知给定了一个三维空间下的P点&…

07-Linux基本权限

1. 权限基本概述 1.1 什么是权限&#xff1f; 权限: 操作系统对用户能够执行的功能所设立的限制, 主要用于约束用户能对系统所做的操作, 以及内容访问的范围, 或者说, 权限是指某个特定的用户具有特定的系统资源使用权力.1.2 为什么要有权限&#xff1f; 因为系统中不可能只…