Hive的安装和使用

本文介绍了Hive的安装配置,包括管理员模式和JDBC服务模式,并详细讲述了Hive的使用,如数据类型、创建表、导入数据、分区表、自定义函数(UDF、UDAF、UDTF)及综合案例,同时提到了Hive与HBase的结合应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive的安装和使用

概述

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

hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。

安装

  • HDFS和MR就绪
  • 需要安装Mysql服务
[root@HadoopNode00 ~]# yum install -y mysql-server
[root@HadoopNode00 ~]# mysqladmin -u root password 'root'
[root@HadoopNode00 ~]# mysql -u root -p1234
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use mysql

mysql> delete from user where password = '';

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> create  database hive;
Query OK, 1 row affected (0.00 sec)

安装配置Hive

[root@HadoopNode00 ~]# mkdir /home/hive # 创建hive文件夹
[root@HadoopNode00 hive]# cd /home/hive/ # 进入到HIve目录
[root@HadoopNode00 hive]# tar -zxvf apache-hive-1.2.1-bin.tar.gz  # 解压
[root@HadoopNode00 ~]# vi /home/hive/apache-hive-1.2.1-bin/conf/hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.126.10:3306/hive</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>1234</value>
  </property>
</configuration>

拷贝相关依赖

  • 将mysql 的依赖拷贝到/home/hive/apache-hive-1.2.1-bin/lib/
  • 将hive目录下的lib目录下的jline-2.12.jar拷贝到/home/hadoop/hadoop-2.6.0/share/hadoop/yarn/lib/下,并且删除jline0.9.94低版本的数据

配置环境变量

[root@HadoopNode00 ~]# vi .bashrc
export HIVE_HOME=/home/hive/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin
[root@HadoopNode00 ~]# source .bashrc

安装配置Hive

管理员模式
[root@HadoopNode00 ~]# hive
hive> create table t_user (id string,name string);
OK
Time taken: 0.291 seconds
hive> insert into  t_user values ('1','zs');

[root@HadoopNode00 ~]# hive -e 'use lqq; select * from t_user;'

Logging initialized using configuration in jar:file:/home/hive/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties
OK
Time taken: 0.722 seconds
OK
1       zs
Time taken: 0.527 seconds, Fetched: 1 row(s)
JDBC服务模式
[root@HadoopNode00 ~]# hiveserver2 # 必须保证hiveserver2处于运行状态  前台启动模式

[root@HadoopNode00 ~]# hiveserver2 & # 必须保证hiveserver2处于运行状态 后台启动模式

[root@HadoopNode00 ~]# beeline -u jdbc:hive2://HadoopNode00:10000 -n root

[root@HadoopNode00 ~]#  beeline -u jdbc:hive2://$HOSTNAME:10000 -n root  # 获取主机名 $HOSTNAME

使用

Hive 数据类型

数据类型(primitive ,array,map,struct)
primitive (原始类型)
	整数:TINYINT SMALLINT INT BIGINT
	布尔:BOOLEAN
	小数:FLOAT DOUBLE
	字符:STRING CHAR VARCHAR
	二进制:BINARY
	时间类型:TIMESTAMP DATE
array(数组):ARRAY<data_type>

map(key-value类型):MAP<KEY-VALUE>

struct(结构体类型):STRUCT<clo_name:data_type>

创建表

create table  t_user(
id int,
name string ,
birthday date,
salary double,
hobbbies array<string>,
card map<string,string>,
address struct<country:string,city:string>
);
0: jdbc:hive2://HadoopNode00:10000> desc formatted t_user;    #表的描述信息 

默认分隔符

分隔符 描述
\n 分割行,每一行就是一行记录
\A 用于分割字段 \001
\B 用于分割array 或者是struct中的元素 或者用于map结构中的k-v对分隔符 \002
\C 用于map中的k-v的分隔符 \003

将数据导入到Hive表中

  • 准备数据
    在这里插入图片描述
#  外部导入
[root@HadoopNode00 ~]# hadoop fs -put t_user /user/hive/warehouse/lqq.db/t_user    

#  内部命令行导入(从本地文件系统导入)
0: jdbc:hive2://HadoopNode00:10000> load data local inpath '/root/t_user' overwrite into table t_user;

#  内部命令行导入(从HDFS导入)
0: jdbc:hive2://HadoopNode00:10000> load data inpath '/t_user' overwrite into table t_user;

local 代表本地 文件 overwrite覆盖

JDBC 访问 Hive 实现数据查询

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class App {
   
    public static void main(String[] args) throws Exception {
   
        /*
         *加载驱动
         * */
        Class.forName("org.apache.hive.jdbc.HiveDriver");
        Connection connection = DriverManager.getConnection("jdbc:hive2://HadoopNode00:10000/lqq", "root", null);
        /*
         * 创建stm
         * */
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(
<think>嗯,用户想了解如何在Flutter中安装使用Hive数据库。首先,我需要回忆一下Hive的相关知识,确保信息准确。记得Hive是一个轻量级的NoSQL数据库,适合在移动端使用,特别是因为它不需要native依赖,而且性能不错。 首先,安装部分。用户需要在pubspec.yaml文件中添加依赖项。根据引用[2],应该包括hivehive_flutter,还有dev_dependencies里的hive_generatorbuild_runner。需要确认版本号是否正确,但通常用户可以使用最新版本,所以可以提示他们查看最新版本号,或者直接用^符号让pub自动选择兼容版本。 然后,初始化Hive。引用[1]提到Hive.initFlutter(),这应该是初始化Flutter项目的步骤,通常在main函数里执行。可能需要先确保WidgetsFlutterBinding初始化,所以顺序应该是先调用WidgetsFlutterBinding.ensureInitialized(),然后再初始化Hive。 接下来是创建数据模型。Hive需要注册适配器,所以用户需要定义模型类并用Hive注解标记。比如@HiveType(typeId: 0)@HiveField()。然后运行build_runner生成适配器代码,这部分需要提醒用户使用flutter pub run build_runner build命令,或者使用--watch参数自动监测变化。 之后是打开Box,进行数据操作。打开Box可能需要异步处理,所以示例代码应该用async/await。增删改查的操作相对简单,但需要展示基本的CRUD操作,比如add、get、put、delete等。 还要注意引用[1]提到的Box的listenable()方法,这可能用于监听数据变化,结合Flutter的StreamBuilder来更新UI。不过用户的问题主要是安装使用,这部分可能属于进阶内容,可以稍微提及,但不需要深入。 用户可能需要常见问题解答,比如版本冲突、适配器未注册的错误,或者生成代码时的问题。需要提醒他们检查依赖版本是否兼容,确保适配器已经正确注册,并正确运行生成命令。 现在需要整理步骤,确保结构清晰,按照安装、初始化、模型创建、操作数据的顺序来写。示例代码要正确,特别是Hive.initFlutter()的位置,还有打开Box的方法。另外,引用标记要正确对应到用户提供的引用内容,比如引用[1]引用[2]分别对应初始化添加依赖的部分。 可能还需要检查是否有遗漏的步骤,比如是否需要在main函数里异步初始化,因为Hive的初始化可能是异步的。需要确保示例代码正确处理了这一点,比如在main函数前加async,然后在里面await Hive.initFlutter()。 最后,生成相关问题,要围绕Hive安装使用展开,比如性能优化、数据迁移、与其他数据库对比等。这些问题应该帮助用户进一步深入学习Hive的相关知识。</think>### Flutter Hive 安装使用教程 #### 一、安装依赖 1. **添加依赖项** 在 `pubspec.yaml` 文件的 `dependencies` `dev_dependencies` 中添加以下内容[^2]: ```yaml dependencies: hive: ^[版本号] # 例如 2.2.3 hive_flutter: ^[版本号] dev_dependencies: hive_generator: ^[版本号] build_runner: ^[版本号] ``` 运行 `flutter pub get` 安装依赖。 2. **初始化 Hive** 在 `main.dart` 的 `main` 函数中初始化 Hive[^1]: ```dart void main() async { WidgetsFlutterBinding.ensureInitialized(); await Hive.initFlutter(); // 初始化 Hive runApp(MyApp()); } ``` --- #### 二、创建数据模型 1. **定义数据类** 使用 `@HiveType` `@HiveField` 注解标记模型类: ```dart import 'package:hive/hive.dart'; @HiveType(typeId: 0) class User { @HiveField(0) String name; @HiveField(1) int age; User(this.name, this.age); } ``` 2. **生成适配器** 运行命令生成适配器代码: ```bash flutter pub run build_runner build ``` --- #### 三、使用 Hive 存储数据 1. **打开 Box(数据库表)** ```dart await Hive.openBox('userBox'); // 打开名为 "userBox" 的存储容器 final userBox = Hive.box('userBox'); ``` 2. **增删改查操作** ```dart // 写入数据 userBox.add(User('Alice', 25)); // 读取数据 final user = userBox.getAt(0) as User; print(user.name); // 输出: Alice // 更新数据 userBox.putAt(0, User('Bob', 30)); // 删除数据 userBox.deleteAt(0); ``` --- #### 四、高级功能 1. **监听数据变化** 使用 `listenable()` 监听 Box 变化: ```dart ValueListenableBuilder( valueListenable: Hive.box('userBox').listenable(), builder: (context, box, _) { return Text('数据已更新: ${box.length}'); }, ) ``` --- #### 常见问题 - **版本冲突**:确保所有 Hive 相关包版本一致。 - **适配器未注册**:在初始化后调用 `Hive.registerAdapter(UserAdapter())`。 - **生成代码失败**:检查注解语法,或运行 `flutter pub run build_runner build --delete-conflicting-outputs`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值