Hive-01之数仓、架构、数据类型、DDL、内外部表
一、主题
- hive的核心概念
- hive与数据库的区别
- hive的架构原理
- hive的安装部署
- hive的交互式方式
- hive的数据类型
- hive的DDL语法操作
二、要点
1.数据仓库的基本概念
1.数据仓库的基本概念
英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持目的而创建。
数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。
2.数据仓库的主要特征
数据仓库是面向主题的(Subject-Oriented)、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策。
3. 数据仓库与数据库区别
数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别。
操作型处理,叫联机事务处理 OLTP(On-Line Transaction Processing,),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。
分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析,支持管理决策。
首先要明白,数据仓库的出现,并不是要取代数据库。
数据库是面向事务的设计,数据仓库是面向主题设计的。
数据库一般存储业务数据,数据仓库存储的一般是历史数据。
数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
以银行业务为例。数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,这里,可以简单地理解为用数据库记账。数据仓库是分析系统的数据平台,它从事务系统获取数据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立ATM了。
显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。事务系统是实时的,这就要求时效性,客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。而分析系统是事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但是,只要能够提供有效的分析数据就达到目的了。
数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。
4.数据仓库分层架构
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。
源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
数据仓库层(DW):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。
⭐️4-1. 为什么要对数据仓库分层?
-
用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据;不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大。
-
通过大量的冗余数据来更好的应对源业务系统的变更;
-
**通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完成,相当于把一个复杂的工作拆成了多个简单的工作,**把一个大的黑盒变成了一个白盒,每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。
2. Hive是什么
1 hive的概念
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一个MapReduce的客户端
2 Hive与数据库的区别
- Hive 具有 SQL 数据库的外表,但应用场景完全不同。
- == Hive 只适合用来做海量离线数据统计分析,也就是数据仓库 ==。
3 Hive的优缺点
-
优点
-
操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
-
避免了去写MapReduce,减少开发人员的学习成本。
-
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
-
-
缺点
- Hive 不支持记录级别的增删改操作
- Hive 的查询延迟很严重
- hadoop jar xxxx.jar xxx.class /input /output
- 进行任务的划分,然后进行计算资源的申请
- map 0% reduce 0%
- map 10% reduce 0%
- hadoop jar xxxx.jar xxx.class /input /output
- Hive 不支持事务
⭐️4 Hive架构原理
- 1、用户接口:Client
- CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
-
2、元数据:Metastore
-
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
- 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
-
-
3、Hadoop集群
- 使用HDFS进行存储,使用MapReduce进行计算。
-
4、Driver:驱动器
- 解析器(SQL Parser)
- 将SQL字符串转换成抽象语法树AST
- 对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误
- 编译器(Physical Plan):将AST编译生成逻辑执行计划
- 优化器(Query Optimizer):对逻辑执行计划进行优化
- 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说默认就是mapreduce任务
- 解析器(SQL Parser)
3. Hive的安装部署
注意hive就是一个构建数据仓库的工具,只需要在一台服务器上安装就可以了,不需要在多台服务器上安装。
-
1、提前先安装好mysql服务和hadoop集群
- 详细见https://www.cnblogs.com/brianzhu/p/8575243.html
-
2、下载hive的安装包
- http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.14.2.tar.gz
-
3、规划安装目录
- /kkb/install
-
4、上传安装包到node03服务器中的/kkb/soft路径下
-
5、解压安装包到指定的规划目录
-
cd /kkb/soft/ tar -zxf hive-1.1.0-cdh5.14.2.tar.gz -C /kkb/install/
-
-
6、修改配置文件
-
进入到Hive的安装目录下的conf文件夹中
-
cd /kkb/install/hive-1.1.0-cdh5.14.2/conf/
-
mv hive-env.sh.template hive-env.sh
-
vim hive-env.sh
-
-
#配置HADOOP_HOME路径export HADOOP_HOME=/kkb/install/hadoop-2.6.0-cdh5.14.2/#配置HIVE_CONF_DIR路径export HIVE_CONF_DIR=/kkb/install/hive-1.1.0-cdh5.14.2/conf
* vim hive-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://node03:3306/hive?createDatabaseIfNotExist=true&characterEncoding=latin1&useSSL=false</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>123456</value></property><property><name>hive.cli.print.current.db</name><value>true</value></property><property><name>hive.cli.print.header</name><value>true</value></property><property><name>hive.server2.thrift.bind.host</name><value>node03.kaikeba.com</value></property></configuration>
* 修改hive的日志配置文件路径,便于我们排查hive出现的错误问题,node03执行以下命令,定义hive的日志文件存放路径
mkdir -p /kkb/install/hive-1.1.0-cdh5.14.2/logs/cd /kkb/install/hive-1.1.0-cdh5.14.2/conf/mv hive-log4j.properties.template hive-log4j.propertiesvim hive-log4j.properties#更改以下内容,设置我们的日志文件存放的路径hive.log.dir=/kkb/install/hive-1.1.0-cdh5.14.2/logs/
* ps: ==需要将mysql的驱动包上传到hive的lib目录下==* 例如 mysql-connector-java-5.1.38.jar
4. hive的交互方式
- 先启动hadoop集群和mysql服务
1 Hive交互shell
cd /kkb/install/hive-1.1.0-cdh5.14.2
bin/hive
2 Hive JDBC服务
-
启动hiveserver2服务
-
前台启动
cd /kkb/install/hive-1.1.0-cdh5.14.2 bin/hive --service hiveserver2
-
后台启动
cd /kkb/install/hive-1.1.0-cdh5.14.2nohup bin/hive --service hiveserver2 &
-
-
beeline连接hiveserver2
重新开启一个会话窗口,然后使用beeline连接hive
cd /kkb/install/hive-1.1.0-cdh5.14.2bin/beelinebeeline> !connect jdbc:hive2://node03:10000
3 Hive的命令
- hive -e sql语句
- 使用 –e 参数来直接执行hql的语句
cd /kkb/install/hive-1.1.0-cdh5.14.2/
bin/hive -e "show databases"
-
hive -f sql文件
-
使用 –f 参数执行包含hql语句的文件
-
node03执行以下命令准备hive执行脚本
-
cd /kkb/install/ vim hive.sql文件内容如下 create database if not exists myhive;通过以下命令来执行我们的hive脚本 cd /kkb/install/hive-1.1.0-cdh5.14.2/ bin/hive -f /kkb/install/hive.sql
-
⭐️5、Hive的数据类型
1 基本数据类型
类型名称 | 描述 | 举例 |
---|---|---|
boolean | true/false | true |
tinyint | 1字节的有符号整数 | 1 |
smallint | 2字节的有符号整数 | 1 |
int | 4字节的有符号整数 | 1 |
bigint | 8字节的有符号整数 | 1 |
float | 4字节单精度浮点数 | 1.0 |
double | 8字节单精度浮点数 | 1.0 |
string | 字符串(不设长度) | “abc” |
varchar | 字符串(1-65355长度,超长截断) | “abc” |
timestamp | 时间戳 | 1563157873 |
date | 日期 | 20190715 |
数据类型转换
- 隐式类型转换
- 手动类型转换 cast(字段 as 目标类型) 如:cast(age as int)
2 复合数据类型
类型名称 | 描述 | 举例 |
---|---|---|
array | 一组有序的字段,字段类型必须相同 array(元素1,元素2) | Array(1,2,3) |
map | 一组无序的键值对 map(k1,v1,k2,v2) | Map(‘a’,1,‘b’,2) |
struct | 一组命名的字段,字段类型可以不同 struct(元素1,元素2) | Struct(‘a’,1,2,0) |
-
array字段的元素访问方式:
-
下标获取元素,下标从0开始
-
获取第一个元素
- array[0]
-
-
-
map字段的元素访问方式
-
通过键获取值
-
获取a这个key对应的value
- map[‘a’]
-
-
-
struct字段的元素获取方式
- 定义一个字段c的类型为struct{a int;b string}
- 获取a和b的值
- 使用c.a 和c.b 获取其中的元素值
- 这里可以把这种类型看成是一个对象
- 使用c.a 和c.b 获取其中的元素值
- 获取a和b的值
- 定义一个字段c的类型为struct{a int;b string}
create table complex(col1 array<int>,col2 map<string,int>,col3 struct<a:string,b:int,c:double>
)
3 复合类型使用说明和实战
参考文档
3-1、参数说明
创建表的时候可以指定每行数据的格式,如果使用的是复合数据类型,还需要指定复合数据类型中的元素分割符
ROW FORMAT DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char][MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]其中这里
FIELDS TERMINATED BY char 指定每一行记录中字段的分割符
COLLECTION ITEMS TERMINATED BY char 指定复合类型中多元素的分割符
MAP KEYS TERMINATED BY char 指定map集合类型中每一个key/value之间的分隔符
LINES TERMINATED BY char 指定每行记录的换行符,一般有默认 就是\n
3-2、Array类型
-
array中的数据为相同类型,例如,假如array A中元素[‘a’,‘b’,‘c’],则A[1]的值为’b’
-
准备数据文件
- t_array.txt (字段空格分割)
1 zhangsan beijing,shanghai2 lisi shanghai,tianjin
- 建表语法
create table t_array(id string,name string,locations array<string>) row format delimited fields terminated by ' ' collection items terminated by ',';
- 加载数据
load data local inpath '/home/hadoop/t_array.txt' into table t_array;
-
查询数据
select id,name,locations[0],locations[1] from t_array;
3-3、Map类型
-
map类型中存储key/value类型的数据,后期可以通过[“指定key名称”]访问
-
准备数据文件
-
t_map.txt (字段空格分割)
1 name:zhangsan#age:30 2 name:lisi#age:40
-
-
建表语法
create table t_map(id string,info map<string,string>) row format delimited fields terminated by ' ' collection items terminated by '#' map keys terminated by ':';
- 加载数据
load data local inpath '/home/hadoop/t_map.txt' into table t_map;
- 查询数据
select id,info['name'],info['age'] from t_map;
3-4、Struct类型
-
可以存储不同类型的数据
- 例如c的类型为struct{a INT; b INT},我们可以通过c.a来访问域a
-
准备数据文件
-
t_struct.txt (字段空格分割)
1 zhangsan:30:beijing 2 lisi:40:shanghai
-
-
建表语法
create table t_struct( id string, info struct<name:string, age:int,address:String> ) row format delimited fields terminated by ' ' collection items terminated by ':' ;
-
加载数据
load data local inpath '/home/hadoop/t_struct.txt' into table t_struct;
-
查询数据
select id,info.name,info.age,info.address from t_struct;
6、Hive的DDL操作
1 hive的数据库DDL操作
1、创建数据库
hive > create database db_hive;
# 或者
hive > create database if not exists db_hive;
- 数据库在HDFS上的默认存储路径是==/user/hive/warehouse/*.db==
2、显示所有数据库
hive> show databases;
3、查询数据库
hive> show databases like 'db_hive*';
4、查看数据库详情
hive> desc database db_hive;
5、显示数据库详细信息
hive> desc database extended db_hive;
6、切换当前数据库
hive > use db_hive;
7、删除数据库
#删除为空的数据库
hive> drop database db_hive;#如果删除的数据库不存在,最好采用if exists 判断数据库是否存在
hive> drop database if exists db_hive;#如果数据库中有表存在,这里需要使用cascade强制删除数据库
hive> drop database if exists db_hive cascade;
2 hive的表DDL操作
1 、建表语法介绍
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 分区
[CLUSTERED BY (col_name, col_name, ...) 分桶
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format] row format delimited fields terminated by “分隔符”
[STORED AS file_format]
[LOCATION hdfs_path]
官网地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
2 、字段解释说明
-
create table
- 创建一个指定名字的表
-
EXTERNAL
- 创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),指定表的数据保存在哪里
-
COMMENT
- 为表和列添加注释
-
PARTITIONED BY
- 创建分区表
-
CLUSTERED BY
- 创建分桶表
-
SORTED BY
- 按照字段排序(一般不常用)
-
ROW FORMAT
-
指定每一行中字段的分隔符
- row format delimited fields terminated by ‘\t’
-
- STORED AS
- 指定存储文件类型
- 常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)
- 如果文件数据是纯文本,可以使用STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE
- 指定存储文件类型
-
LOCATION
- 指定表在HDFS上的存储位置。
3、 创建内部表
- 1、直接建表
- 使用标准的建表语句
use myhive;
create table stu(id int,name string);可以通过insert into 向hive表当中插入数据,但是不建议工作当中这么做
insert into stu(id,name) values(1,"zhangsan");
select * from stu;
- 2、查询建表法
- 通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据
create table if not exists myhive.stu1 as select id, name from stu;
- 3、like建表法
- 根据已经存在的表结构创建表
create table if not exists myhive.stu2 like stu;
- 4、查询表的类型
hive > desc formatted myhive.stu;
创建内部表并指定字段之间的分隔符,指定文件的存储格式,以及数据存放的位置
create table if not exists myhive.stu3(id int ,name string)
row format delimited fields terminated by '\t' stored as textfile location '/user/stu2';
4、 创建外部表
外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉
create external table myhive.teacher (t_id string,t_name string) row format delimited fields terminated by '\t';
- 创建外部表的时候需要加上**external** 关键字
- location字段可以指定,也可以不指定
- 指定就是数据存放的具体目录
- 不指定就是使用默认目录 /user/hive/warehouse
向外部表当中加载数据:
我们前面已经看到过通过insert的方式向内部表当中插入数据,外部表也可以通过insert的方式进行插入数据,只不过insert的方式,我们一般都不推荐,实际工作当中我们都是使用load的方式来加载数据到内部表或者外部表
load数据可以从本地文件系统加载或者也可以从hdfs上面的数据进行加载
-
从本地文件系统加载数据到teacher表当中去,将我们附件当汇总的数据资料都上传到node03服务器的/kkb/install/hivedatas路径下面去
mkdir -p /kkb/install/hivedatas #将数据都上传到/kkb/install/hivedatas路径下,然后在hive客户端下执行以下操作 load data local inpath '/kkb/install/hivedatas/teacher.csv' into table myhive.teacher;
-
从hdfs上面加载文件到teacher表里面去(将teacher.csv文件上传到hdfs的/kkb/hdfsload/hivedatas路径下)
cd /kkb/install/hivedatas hdfs dfs -mkdir -p /kkb/hdfsload/hivedatas hdfs dfs -put teacher.csv /kkb/hdfsload/hivedatas # 在hive的客户端当中执行 load data inpath '/kkb/hdfsload/hivedatas' overwrite into table myhive.teacher;
5、 内部表与外部表的互相转换
- 1、内部表转换为外部表
#将stu内部表改为外部表
alter table stu set tblproperties('EXTERNAL'='TRUE');
- 2、外部表转换为内部表
#把emp外部表改为内部表
alter table teacher set tblproperties('EXTERNAL'='FALSE');
⭐️6、 内部表与外部表的区别
-
1、建表语法的区别
- 外部表在创建的时候需要加上external关键字
-
2、删除表之后的区别
- 内部表删除后,表的元数据和真实数据都被删除了
-
外部表删除后,仅仅只是把该表的元数据删除了,真实数据还在,后期还是可以恢复出来
⭐️7、内部表与外部表的使用时机
内部表由于删除表的时候会同步删除HDFS的数据文件,所以确定如果一个表仅仅是你独占使用,其他人不适用的时候就可以创建内部表,如果一个表的文件数据,其他人也要使用,那么就创建外部表
一般外部表都是用在数据仓库的ODS层
内部表都是用在数据仓库的DW层
⭐️8、hive的分区表
如果hive当中所有的数据都存入到一个文件夹下面,那么在使用MR计算程序的时候,读取一整个目录下面的所有文件来进行计算,就会变得特别慢,因为数据量太大了,实际工作当中一般都是计算前一天的数据,所以我们只需要将前一天的数据挑出来放到一个文件夹下面即可,专门去计算前一天的数据。这样就可以使用hive当中的分区表,通过分文件夹的形式,将每一天的数据都分成为一个文件夹,然后我们计算数据的时候,通过指定前一天的文件夹即可只计算前一天的数据。
在大数据中,最常用的一种思想就是分治思想,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了
在文件系统上建立文件夹,把表的数据放在不同文件夹下面,加快查询速度。
创建分区表语法
hive (myhive)> create table score(s_id string,c_id string, s_score int) partitioned by (month string) row format delimited fields terminated by '\t';
创建一个表带多个分区
hive (myhive)> create table score2 (s_id string,c_id string, s_score int) partitioned by (year string,month string,day string) row format delimited fields terminated by '\t';
加载数据到分区表当中去
hive (myhive)>load data local inpath '/kkb/install/hivedatas/score.csv' into table score partition (month='201806');
加载数据到多分区表当中去
hive (myhive)> load data local inpath '/kkb/install/hivedatas/score.csv' into table score2 partition(year='2018',month='06',day='01');
查看分区
hive (myhive)> show partitions score;
添加一个分区
hive (myhive)> alter table score add partition(month='201805');
同时添加多个分区
hive (myhive)> alter table score add partition(month='201804') partition(month = '201803');
注意:添加分区之后就可以在hdfs文件系统当中看到表下面多了一个文件夹
删除分区
hive (myhive)> alter table score drop partition(month = '201806');
外部分区表综合练习:
需求描述:现在有一个文件score.csv文件,里面有三个字段,分别是s_id string, c_id string,s_score int,字段都是使用 \t进行分割,存放在集群的这个目录下/scoredatas/day=20180607,这个文件每天都会生成,存放到对应的日期文件夹下面去,文件别人也需要公用,不能移动。需求,创建hive对应的表,并将数据加载到表中,进行数据统计分析,且删除表之后,数据不能删除
需求实现:
数据准备:
node03执行以下命令,将数据上传到hdfs上面去
将我们的score.csv上传到node03服务器的/kkb/install/hivedatas目录下,然后将score.csv文件上传到/kkb/install/hivedatas目录下去
cd /kkb/install/hivedatas/
hdfs dfs -mkdir -p /scoredatas/day=20180607
hdfs dfs -put score.csv /scoredatas/day=20180607/
创建外部分区表,并指定文件数据存放目录
hive (myhive)> create external table score4(s_id string, c_id string,s_score int) partitioned by (day string) row format delimited fields terminated by '\t' location '/scoredatas';
进行表的修复,说白了就是建立我们表与我们数据文件之间的一个关系映射
hive (myhive)> msck repair table score4;
修复成功之后即可看到数据已经全部加载到表当中去了
三、拓展
-
hive cli命令窗口查看本地文件系统
- 与操作本地文件系统类似,这里需要使用 ! (感叹号),并且最后需要加上 ;(分号)
- 例如
- !ls /;
-
hive cli命令窗口查看HDFS文件系统
- 与查看HDFS文件系统类似
- dfs -ls / ;
- 与查看HDFS文件系统类似
-
hive的底层执行引擎有3种
- mapreduce(默认)
- tez(支持DAG作业的计算框架)mr1–>mr2 -->mr3
- spark(基于内存的分布式计算框架)
四、总结
相关文章:
Hive-01之数仓、架构、数据类型、DDL、内外部表
一、主题 hive的核心概念hive与数据库的区别hive的架构原理hive的安装部署hive的交互式方式hive的数据类型hive的DDL语法操作 二、要点 1.数据仓库的基本概念 1.数据仓库的基本概念 英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的…...
NIO是什么?它与传统的IO有什么区别?
NIO(Non-blocking I/O)是Java 1.4版本引入的一种新的I/O模型,旨在解决传统IO模型的局限性,提高网络通信和文件操作的效率。本文将详细解释NIO的概念、与传统IO的区别,并通过示例代码展示其实际应用。 一、NIO的概念 …...
模块七_面向对象
模块七_面向对象 模块六回顾:1.概述:拥有功能性代码的代码块将来干开发一个功能就应该对应一个方法2.方法的通用定义格式:修饰符 返回值类型 方法名(参数){方法体return 结果}a.修饰符:public staticb.返回值类型:方法最终返回的结果的数据类型c.方法名:给方法取的名字,见名知…...
初识uniApp
详细思考一下uniApp这个跨平台开发框架。首先,我对uniApp还不是很了解,所以需要从基本概念开始,逐步深入。 什么是uniApp? 我记得uniApp是基于Vue.js的,可能是一个用来开发多个平台的应用的框架。用户可能想了解它是什…...
蓝桥 发现环
0发现环 - 蓝桥云课 找到环 不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。 为了恢复正常传输&am…...
Compose 手势处理,增进交互体验
Compose 手势处理,增进交互体验 概述常用手势处理Modifierclickable()combinedClickable()draggable()swipeable()transformable()scrollable()nestedScrollNestedScrollConnectionNestedScrollDispatcher 定制手势处理使用 PointerInput ModifierPointerInputScope…...
【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...
FastAdmin 与其他后台框架的对比分析
FastAdmin 与其他后台框架的对比分析 引言 在现代Web开发中,后台管理系统是支持各种应用程序的核心部分。随着需求的多样化,许多后台框架应运而生。本文将对FastAdmin与其他常见后台框架(如Django Admin、Laravel Nova、AdminLTE࿰…...
自学微信小程序的第六天
DAY6 1、使用录音API首先需要通过wx.getRecorderManager()方法获取到一个RecorderManager实例,该实例是一个全局唯一的录音管理器,用于实现录音功能。 表32:RecorderManager实例的常用方法 方法名称 说明 start() 开始录音 pause() 暂停录音 resume() 继续录音 stop() 停止…...
KTV点歌系统
收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...
(上)基于机器学习的图像识别——遥感图像分类(LeNet-5;AlexNet;VGGNet;GoogLeNet;ResNet)
遥感图像识别: 专业词汇: kernel:卷积 目录 遥感图像分类 1.1 LeNet-5 视频来源: 任务:使用什么网络实现遥感图像的分类 LeNet-5结构: 遥感图像分类 1.2 AlexNet(冠军) 视频…...
深入探索 STM32 微控制器:从基础到实践
一、引言 在当今的嵌入式系统领域,STM32 系列微控制器凭借其高性能、低功耗、丰富的外设以及广泛的应用场景,成为了众多开发者的首选。无论是在工业控制、智能家居、医疗设备,还是在消费电子等领域,STM32 都展现出了强大的生命力…...
windows下玩转vllm:在wsl下安装vllm
文章目录 前言安装wsl启动wsl的默认分发使用python部署vllm创建并激活虚拟环境直接说结论试错过程安装vllm简单测试一下,看看行不行附录,安装wsl安装ubuntu分发步骤 3: 设置用户和密码步骤 4: 更新系统步骤 5: 使用 WSL前言 当前,部署通义千问2.5-vl已经是一件箭在弦上,不…...
SGLang部署大模型
SGLang部署大模型 环境信息基础组件安装创建python虚拟环境安装python模块下载模型部署模型 显存需求较高, 本地4G显存0.5B都无法部署 支持多机多卡部署 支持GPU、CPU混合运行 支持运行格式pt,safetensors,npcache,dummy,gguf,bitsandbytes,layered 环境信息 机器01…...
Ubuntu 防火墙iptables和 ufw
文章目录 iptables 和 ufw 的区别Ubuntu 上使用 ufw 配置 iptables 和 ufw 的区别 iptables 和 ufw 是 Linux 系统中用于管理防火墙的工具,但它们的设计目标和使用方式有所不同。 iptables:功能强大,适合高级用户和复杂场景,但配…...
NAT 代理服务 内网穿透
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 NAT 技术背景二:🔥 NAT IP 转换过程三:🔥 NAPT四:🔥 代理服务器🦋 正向…...
C++20 Lambda表达式新特性:包扩展与初始化捕获的强强联合
文章目录 一、Lambda表达式的历史回顾二、C20 Lambda表达式的两大新特性(一)初始化捕获(Init-Capture)(二)包扩展(Pack Expansion) 三、结合使用初始化捕获与包扩展(一&a…...
ES scroll=1m:表示快照的有效时间为1分钟。怎么理解
在Elasticsearch中,scroll1m 表示你创建的 scroll 上下文 的有效时间为 1分钟。这个参数控制了你可以在多长时间内继续使用这个 scroll_id 来获取更多的数据。 什么是 Scroll 上下文? 当你使用 scroll API 时,Elasticsearch 会为你的查询创…...
【IoU变体对比:WIOU、SIOU、EIOU、GIOU、CIOU】
IoU变体对比:WIOU、SIOU、EIOU、GIOU、CIOU 1. 基本概念与公式(1) GIOU (Generalized Intersection over Union)(2) CIOU (Complete Intersection over Union)(3) EIOU (Efficient Intersection over Union)(4) SIOU (Shape-Enhanced Intersection over Union)(5) W…...
【MySQL】数据库-图书管理系统(CC++实现)
一.预期功能 该图书管理系统设计提供基本的设计模版,涉及数据库的增删查改等操作,包含登录功能,图书管理功能,图书借阅功能,用户管理功能等基础功能,详细功能查看以下菜单表,共包含三个菜单&am…...
【leetcode hot 100 560】和为K的子数组
解法一:用左右指针寻找字串,如果和>k,则减少一个数(left);如果和<k,则加上一个数(right)。 class Solution {public int subarraySum(int[] nums, int k) {int nu…...
【漫话机器学习系列】110.线性可分(Linearly Separable)
线性可分与线性不可分的概念详解 1. 引言 在机器学习和模式识别领域,分类问题是一个重要的研究方向。在分类任务中,我们通常需要将不同类别的数据点分开,而如何进行分割是一个关键问题。线性可分(Linearly Separable)…...
单细胞分析(19)—— 单细胞转录组基因集评分方法
下面是每种基因集评分方法的原理介绍代码示例,适用于R语言和Python两种主流生信分析环境。可以直接应用于单细胞转录组(scRNA-seq)数据分析中。 🔬 单细胞转录组基因集评分方法(附代码示例) 在单细胞RNA测…...
【数据挖掘】Pandas
Pandas 是 Python 进行 数据挖掘 和 数据分析 的核心库之一,提供了强大的 数据清洗、预处理、转换、分析 和 可视化 功能。它通常与 NumPy、Matplotlib、Seaborn、Scikit-Learn 等库结合使用,帮助构建高效的数据挖掘流程。 📌 1. 读取数据 P…...
Spring Boot 中 @Transactional 注解全面解析
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...
【网络】数据链路层(以太网帧格式、MTU、ARP)、NAT、内网穿透
文章目录 1. 数据链路层2. 以太网帧格式3. MTU3.1 认识MTU3.2 MTU 对于 TCP 协议的影响 4. 局域网通信原理5. ARP协议5.1 基本概念5.2 原理5.3 ARP 数据报的格式 6. NAT技术7. 内网穿透8. 内网打洞9. 代理服务器9.1 正向代理9.2 反向代理9.3 NAT VS 代理服务器 10.网络总结 1. …...
ASPNET Core笔试题 【面试宝典】
文章目录 一、如何在ASP.NET Core中激活Session功能?二、什么是中间件?三、ApplicationBuilder的Use和Run方法有什么区别?四、如何使TagHelper在元素这一层上失效?五、什么是ASP.NET Core?六、ASP.NET Core中AOP的支持…...
Harmony os next~鸿蒙原子化服务开发实战:天气卡片开发全解析
鸿蒙原子化服务开发实战:天气卡片开发全解析 一、原子化服务与HarmonyOS卡片概述 (1)原子化服务特性 HarmonyOS原子化服务具有独立入口(桌面图标/智慧搜索)、免安装、跨设备流转三大核心特性。服务卡片作为其可视化载…...
【pytest框架源码分析三】pluggy源码分析之hook注册调用流程
pluggy的hook调用,最重要的就是使用了__call__魔法函数,这个函数能够在我们调用实例时,自动调用这个函数,无需自己手动调用。 前面介绍了各个类的方法,这里简述下pluggy的调用流程(主要介绍主流程ÿ…...
Linux消息队列
msgget函数(类似于shmget) 是 Linux 系统中用于 创建或获取消息队列(System V Message Queue) 的系统调用。 #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>int msgget(key_t key, int m…...
ChatGPT 提示词框架
作为一个资深安卓开发工程师,我们在日常开发中经常会用到 ChatGPT 来提升开发效率,比如代码优化、bug 排查、生成单元测试等。 但要想真正发挥 ChatGPT 的潜力,我们需要掌握一些提示词(Prompt)的编写技巧,并…...
对于动态线程池框架 Hippo4j 的思考
从 java 线程池探讨动态线程池框架的可行性以及扩展性 ThreadPoolExecutor 对外给用户暴露了很多 get、set 方法,get 方法可以让我直接获得一些线程池的运行时信息,比如线程池过去已经完成任务的总数量,线程池目前活跃线程数量等等ÿ…...
问deepseek: HYPRE BoomerAMG 有哪些参数可以进行性能调优
Hypre BoomerAMG 是一个高性能的多重网格预条件子,常用于求解大规模稀疏线性系统。为了优化其性能,可以调整以下关键参数: 1. AMG 参数 Coarsening (强连接阈值) strong_threshold: 控制强连接的阈值,通常在 0.25 到 0.6 之间&a…...
seacms v9 实现的MySQL注入
目录 过滤关键词information_schema 怎么办 一、环境搭建 二、环境分析 三、源代码分析 1、过滤程序 2、注入点 四、获取数据库名 五、获取数据库表名 六、获取表的列名 七、获取数据信息 过滤关键词information_schema 怎么办 1.、利用sys数据库(MySQL 5.…...
基于C#的CANoe CLR Adapter开发指南
一、引言 CANoe 是一款广泛应用于汽车电子开发和测试的工具,它支持多种编程接口,方便开发者进行自定义扩展。CANoe CLR Adapter 允许我们使用 C# 语言与 CANoe 进行交互,充分利用 C# 的强大功能和丰富的类库。本文将详细介绍如何基于 C# 进行…...
Vue 系列之:基础知识
什么是 MVVM MVVM(Model-View-ViewModel)一种软件设计模式,旨在将应用程序的数据模型(Model)与视图层(View)分离,并通过 ViewModel 来实现它们之间的通信。降低了代码的耦合度。 M…...
知识库功能测试难点
图表交互功能测试难点 知识库图表类型多,每种图表交互功能不同。像柱状图,可能有点击柱子查看详细数据、鼠标悬停显示数据提示等交互;折线图除了这些,还可能支持缩放查看不同时间段数据。多种交互操作在不同图表间存在差异&#x…...
一文掌握 Scrapy 框架的详细使用,包括实战案例
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Scrapy 简介2. Scrapy 的核心组件3. 安装 Scrapy4. 创建 Scrapy 项目4.1 创建项目4.2 创建 Spider5. 编写 Spider5.1 定义 Item5.2 编写 Spider 逻辑6. 运行 Scrapy 爬虫6.1 运行爬虫6.2 保存爬取数据7. Scrapy 的高…...
奔图Pantum M7165DN黑白激光打印一体机报数据清除中…维修
故障描述: 一台奔图Pantum M7165DN黑白激光打印一体机开机自检正常,自检过后就不能工作了,按键面板无任何反应一直提示数据清除中…,如果快速操作的话也能按出菜单、功能啥的,不过一会又死机了,故障请看下图: 故障检修: 经分析可能是主板数据出现了问题,看看能不能快速…...
微服务架构与传统的单体架构有什么区别?微服务架构(Spring Cloud + Maven)强在哪?
微服务架构与传统的单体架构(Spring Boot Maven 项目)在设计和实现上有显著差异,主要体现在系统拆分方式、部署模式、技术栈选择、维护成本等方面。以下是具体对比: 1. 架构设计 维度单体架构微服务架构系统拆分所有功能模块集…...
二、QT和驱动模块实现智能家居----2、编译支持QT的系统
因为我们的Linux内核文件不支持QT系统(当然如果你的支持,完全跳过这篇文章),所以我们要从网上下载很多软件包,这里直接用百问网的软件包,非常方便。 一:Ubuntu 配置 1 设置交叉编译工具链 以…...
游戏引擎学习第128天
开始 然而,我们仍然有一些工作要做,渲染部分并没有完全完成。虽然现在已经能够运行游戏,而且帧率已经可以接受,但仍然有一些东西需要进一步完善。正在使用调试构建编译版本,虽然调试版本的性能不如优化版本࿰…...
【量化策略】套利交易策略
【量化策略】套利交易策略 🚀量化软件开通 🚀量化实战教程 技术背景与应用场景 在金融市场中,套利交易策略是一种利用市场价格差异来获取无风险利润的交易方式。这种策略通常涉及同时买入和卖出不同市场上的相同或相似金融产品࿰…...
laravel11设置中文语言包
安装中文语言包 Laravel 11 默认没有内置完整中文语言包,推荐使用第三方维护的完整翻译: # 通过 Composer 安装语言包 composer require laravel-lang/common --dev# 发布中文语言文件到项目 php artisan lang:add zh_CN这会自动将中文语言文件生成到 l…...
Javaweb数据库多表查询 内连接 外连接 子查询
内连接 外连接 左外连接,左边是全部表 表名,即使没有匹配右边的数据,也要查询出来 子查询 案例 1.没有说所有的部门,所有的员工,用内连接(隐式内连接)...
欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、马氏距离理解学习
目录 一、欧氏距离(Euclidean Distance)公式:原理: 二、曼哈顿距离(Manhattan Distance)公式:原理: 三、切比雪夫距离(Chebyshev Distance)公式:原…...
【地图视界-Leaflet4】绘制自定义图形
引言 在前面的文章中,我们学会了如何在 Leaflet 中添加标记、弹窗以及切换不同的底图和叠加图层。但是在很多实际应用中,我们需要在地图上绘制多边形、圆形、矩形、折线等几何图形,用于标记区域、路径规划、范围分析等。 本篇文章将介绍如何…...
华为hcia——Datacom实验指南——STP工作基本原理及STP/RSTP基本功能配置
什么时候需要用到STP 在二层交换网络中,为了避免环路产生。 什么是STP STP生成树协议,是用来在冗余链路上消除二层环路。在众多交换机中,需要设置出一个根桥,其余的交换机称为非根桥,根桥是整个交换网络的核心&…...
游戏引擎学习第127天
仓库:https://gitee.com/mrxiao_com/2d_game_3 为本周设定阶段 我们目前的渲染器已经实现了令人惊讶的优化,经过过去两周的优化工作后,渲染器在1920x1080分辨率下稳定地运行在60帧每秒。这个结果是意料之外的,因为我们没有预计会达到这样的…...
PostgreSQL 创建表格
PostgreSQL 创建表格 在数据库管理中,表格(Table)是数据存储的基础。PostgreSQL作为一款强大的开源对象关系型数据库管理系统(ORDBMS),创建表格是其最基本的功能之一。本文将详细讲解如何在PostgreSQL中创…...