Hive基础

部署运行你感兴趣的模型镜像

1.Hive简介

Hive:由 Facebook 开源用于解决海量结构化日志的数据统计工具。

        Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并 提供 SQL 查询功能。

其实Hive就是将我们的类似SQL(HQL)语句转换成MapReduce程序的工具。

  • Cli 用户接口(JDBC等)
  • Metastore元数据:存储表名,表存在的数据库,表的拥有者等表的信息。、
  • 使用HDFS存储,使用MapReduce计算
  • Driver分为四步:解析器将SQL语句转化成抽象语法树AST。通过编译器将AST生成逻辑执行计划。优化器对计划极性优化。执行器将计划转化成物理计划。对于Hive而言就是MR/Spark

2.Hive与数据库的区别

        Hive是为数据仓库设计的,是用于处理历史数据,而不是实时的业务数据。

        Hive由于针对数仓,数仓的读多写少。因此,存储的数据都是已经确定的。

        Hive查询数据慢,因为没有索引。其次,由于Hive基于MR,所以我们的数据量在足够大的情况下,Hive的并行计算才能体现出优势。

        Hive搭配Mysql,Hive是不会在Mysql里存储原始数据的。会在Mysql里存储这些原始数据的路径或者一些信息(即元数据)。这些原始数据是会存储在HDFS中的。

  3.Hive安装

(安装Mysql,准备好mysql-connector-java-5.1.37-bin,并且将Mysql里的权限给足)

选择mysql而不用默认的derby是因为mysql是支持多用户访问的。

从Apache上下载最新的apache-hive-3.1.2-bin.tar.gz

传到合适的目录,解压。

配置Hive环境变量

export HIVE_HOME=/export/servers/hive
export PATH=$PATH:$HIVE_HOME/bin

解决日志jar包冲突

将hive/lib目录下的log4j-slf4j-impl-2.10.0.jar 重命名为log4j-slf4j-impl-2.10.0.bak

将mysql-connector-java-5.1.37-bin复制到Hive的lib目录下。

配置Metastore到Mysql(配置hive-site.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc 连接的 URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://Hadoop-3:3306/metastore?useSSL=false</value>
</property>

<!-- jdbc 连接的 Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>

<!-- jdbc 连接的 username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>

<!-- jdbc 连接的 password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>自己的mysql密码</value>
</property>

<!-- Hive 元数据存储版本的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>

<!--元数据存储授权-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>

<!-- Hive 默认在 HDFS 的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>

初始化如果失败,出现:Error: FUNCTION 'NUCLEUS_ASCII' already exists. (state=X0Y68,code=30000)

Hive报错:Error: FUNCTION 'NUCLEUS_ASCII' already exists. (state=X0Y68,code=30000)_Magician的博客-优快云博客

启动Hive

在启动Hive之前,我们需要先初始化元数据库

在对Mysql进行初步处理,创建Metastore,给予足够的用户权限!即可初始化。(遇到问题可查,解决bug的过程也是对这些环境与知识,更好的了解)

补充配置hive-site.xml


<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://Hadoop3:9083</value>
</property>
</configuration>

初始化元数据

schematool -dbType mysql -initSchema

 启动Hive的方式:

hive --service metastore;
hive

使用hiveserver2启动并依赖JDBC连接

在配置中加上(如果不用JDBC就取消)

<!-- 指定 hiveserver2 连接的 host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>Hadoop3</value>
</property>

<!-- 指定 hiveserver2 连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
hive --service metastore;
hive --service hiveserver2;
/beeline -u jdbc:hive2://Hadoop3:10000 -n root

Hive的使用

多数命令与Sql一致。适度复习一遍sql即可。语法基本一致。只不过Hive的特殊性,其本身就是一个将类sql语言转换成MR程序的一个组件。所以在数据量小时,其处理的速度慢。

在学习的路上,遇到了很多的困难,但是只要坚持下去,一点点去改进,找bug,查看日志,找到解决的方案,这对于提升自己的工程素养也是很有意义的。

您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

### 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]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值