Hive基础(1)

Hive基础(1)

Hive的HQL(2)

1. Hive并不是分布式的,它独立于机器之外,类似于Hadoop的客户端。

2. 元数据和数据的区别,前者如表名、列名、字段名等。

3. Hive的三种安装方式

  • 内嵌模式,元数据服务和Hive服务运行在同一个JVM中,同时使用内嵌的Derby数据库作为元数据存储,该模式只能支持同时最多一个用户打开Hive会话。
  • 本地模式,元数据服务和Hive服务运行在同一个JVM中,采用了外置的MySQL作为元数据存储,该种方式支持多个用户同时访问Hive。
  • 远程模式,元数据服务和Hive服务运行在不同的进程内,这样做的好处是,数据库层可以完全地置于防火墙之后,客户端则不需要数据库验证。
  • 推荐,生产环境中,使用本地模式、远程模式。

4. Hive不支持行级别的更新、插入或者删除操作,并且不支持事物。Hive不能做OLTP的“联机”部分,所以对Hive更适合离线计算,对于实时性要求很高的可以选择HBase或者Impala。

5. Hive和关系型数据库的区别

compareHiveRMDBS
查询语言HQLSQL
数据存储位置HDFSRaw Device或者Local FS
数据格式用户定义系统决定
数据更新不支持支持
索引
执行MapReduceExecutor
执行延迟
可扩展性
数据规模

6. Hive的数据类型与存储格式

  • 数据类型
    • 基本数据类型:整型、浮点型、布尔型等
    • 复杂数据类型(集合):STRUCT、MAP、ARRAY
  • 存储格式
    • TEXTFILE(default)
    • 不压缩、磁盘开销大、数据解析开销大
    • SEQUENCEFILE
    • 使用方便、可分割、可压缩、按行切分
    • RCFILE
    • 行列存储相结合,首先,将数据按行分块,保证同一条记录在一个块上,避免读一条记录需要读取多个块。其次,块上的数据按照列式存储,有利于数据压缩和快速地进行行列存取,也就是“先按水平划分再按垂直划分”
    • 自定义
    • 用户可通过实现InputFormat和OutputFormat来自定义输入输出格式。
### Hive 基础操作指令与使用教程 Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为数据库表,并提供类 SQL 查询功能(称为 HQL)。通过 Hive,用户可以轻松地进行数据查询、分析和处理,而无需深入了解 MapReduce 编程。 #### 启动与连接 Hive 1. **启动 HiveServer2** 在使用 `beeline` 连接之前,需要确保 HiveServer2 已经成功启动。由于 HiveServer2 启动可能需要两三分钟时间,因此在执行 `beeline` 命令时可能会遇到连接失败的问题,必须等待其完全启动后才能成功连接[^1]。 2. **使用 Beeline 连接 HiveServer2** ```bash beeline -u jdbc:hive2://localhost:10000 -n username ``` 其中,`username` 是登录用户名。如果 HiveServer2 尚未启动,则会提示连接异常。 3. **进入 Hive CLI 模式** 如果不需要通过 JDBC 方式连接,可以直接使用以下命令进入 Hive 交互式命令行界面: ```bash hive ``` 4. **查看帮助信息** 执行以下命令可查看 Hive 的基本使用方法: ```bash hive -help ``` 该命令会列出所有可用的选项和参数,例如 `-e` 用于执行指定的 SQL 语句,`-f` 用于执行 SQL 脚本文件等[^1]。 #### 常用基础操作命令 1. **创建数据库** ```sql CREATE DATABASE IF NOT EXISTS example_db; USE example_db; ``` 2. **创建表** Hive 支持多种存储格式,如文本文件(TEXTFILE)、SequenceFile、ORC、Parquet 等。以下是一个创建文本格式表的示例: ```sql CREATE TABLE IF NOT EXISTS employees ( id INT, name STRING, salary FLOAT, department STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` 3. **加载数据** 可以从本地文件系统或 HDFS 加载数据到 Hive 表中: ```sql LOAD DATA LOCAL INPATH '/path/to/local/file.csv' INTO TABLE employees; -- 或者从 HDFS 加载 LOAD DATA INPATH '/user/hive/input/file.csv' INTO TABLE employees; ``` 4. **查询数据** Hive 支持标准的 SQL 查询语法,包括聚合、连接、子查询等: ```sql SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department; ``` 5. **导出数据** 使用 `-e` 参数可以直接执行 SQL 并将结果输出到文件: ```bash hive -e "SELECT * FROM employees" > output.txt ``` 或者使用 `-f` 参数运行 SQL 脚本并导出结果: ```bash hive -f script.sql > output.txt ``` 6. **退出 Hive** 在 Hive CLI 中输入以下命令即可退出: ```sql quit; ``` #### Hive 计算引擎设置 默认情况下,Hive 使用 MapReduce 作为底层计算引擎,但 MapReduce 性能较低,容易导致查询延迟。为了提升性能,可以将计算引擎切换为 Spark 或 Tez: ```sql SET hive.execution.engine=spark; ``` 切换后,Hive 查询任务将由 Spark 引擎处理,从而显著提高执行效率[^2]。 #### 数据分区与分桶优化 为了提高查询性能,Hive 提供了分区(Partition)和分桶(Bucketing)机制: - **分区**:适用于按某一列(如日期、地区)划分数据的情况,可以大幅减少扫描的数据量。 ```sql CREATE TABLE sales ( product STRING, amount FLOAT ) PARTITIONED BY (country STRING); ``` - **分桶**:适用于对某一列进行哈希分桶,便于高效采样和连接操作。 ```sql CREATE TABLE users ( id INT, name STRING ) CLUSTERED BY (id) INTO 4 BUCKETS; ``` #### 自定义函数(UDF/UDAF) Hive 支持用户自定义函数来扩展其内置功能。常见的类型包括: - **UDF(User Defined Function)**:用于单行输入生成单行输出,例如字符串转换、数学运算等。 - **UDAF(User Defined Aggregation Function)**:用于多行输入生成单行输出,如求和、平均值等。 用户可以通过 Java 编写 UDF/UDAF 并注册到 Hive 中使用[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值