HIVE安装使用

hive-0.10.0-bin.tar.gz,解压到hadoop目录下, 编辑 hive/bin/hive-config.sh文件配置如下

export HIVE_HOME=/home/ssy/hadoop/hive
export HADOOP_HOME=/home/ssy/hadoop
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64
执行bin/hive测试hive是否可用
hive> show tables;
hive> create table log(day int, bytes int, tag string, user string);
hive> describe table log;
hive> drop table log;

创建测试数据样本test.log

20121221  04567 user s00001
20121221  75531 user s00003
20121222  52369 user s00002
20121222  01297 user s00001
20121223  61223 user s00002
20121223  33121 user s00003
将数据导入到hive中
hive> create table log(day int, bytes int, tag string, user string) row format delimited fields terminated by ' ';
hive> load data local inpath '../test.log' into table log;
//清空以前的数据表数据
//load data local inpath '../test.log' overwrite into table log;

//需要指定间隔符为' ',不然加载后会出现null
//hive> select * from log;
//OK
//NULL    NULL    NULL    NULL
//NULL    NULL    NULL    NULL
//NULL    NULL    NULL    NULL
//NULL    NULL    NULL    NULL
//NULL    NULL    NULL    NULL
//NULL    NULL    NULL    NULL

hive> select * from logs;
OK
20121221        4567    user    s00001
20121221        75531   user    s00003
20121222        52369   user    s00002
20121222        1297    user    s00001
20121223        61223   user    s00002
20121223        33121   user    s00003
这样数据就存储到了hadoop集群中,不用我们手动进行fs文件操作。hive的元数据存储在本机metastore_db文件夹中,这样就可以像操作数据库一样对数据进行查询

查找最大值

hive> select day, max(bytes) from logs group by day;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Estimated from input data size: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapred.reduce.tasks=<number>
Starting Job = job_201305221738_0002, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid                                                                                                               =job_201305221738_0002
Kill Command = /root/hadoop/libexec/../bin/hadoop job  -kill job_201305221738_0002
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2013-05-22 18:45:04,552 Stage-1 map = 0%,  reduce = 0%
2013-05-22 18:45:07,586 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.96 sec
2013-05-22 18:45:08,596 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.96 sec
2013-05-22 18:45:09,608 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.96 sec
2013-05-22 18:45:10,620 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.96 sec
2013-05-22 18:45:11,628 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.96 sec
2013-05-22 18:45:12,640 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.96 sec
2013-05-22 18:45:13,648 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.96 sec
2013-05-22 18:45:14,665 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.96 sec
2013-05-22 18:45:15,673 Stage-1 map = 100%,  reduce = 33%, Cumulative CPU 0.96 sec
2013-05-22 18:45:16,686 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.3 sec
2013-05-22 18:45:17,698 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.3 sec
2013-05-22 18:45:18,713 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.3 sec
MapReduce Total cumulative CPU time: 3 seconds 300 msec
Ended Job = job_201305221738_0002
MapReduce Jobs Launched:
Job 0: Map: 1  Reduce: 1   Cumulative CPU: 3.3 sec   HDFS Read: 371 HDFS Write: 45 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 300 msec
OK
20121221        75531
20121222        52369
20121223        61223
Time taken: 21.278 seconds

计算总和

hive> select day, sum(bytes) from logs group by day;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Estimated from input data size: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapred.reduce.tasks=<number>
Starting Job = job_201305221738_0003, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid                                                                                                               =job_201305221738_0003
Kill Command = /root/hadoop/libexec/../bin/hadoop job  -kill job_201305221738_0003
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2013-05-22 18:46:03,892 Stage-1 map = 0%,  reduce = 0%
2013-05-22 18:46:06,911 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.93 sec
2013-05-22 18:46:07,919 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.93 sec
2013-05-22 18:46:08,928 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.93 sec
2013-05-22 18:46:09,935 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.93 sec
2013-05-22 18:46:10,943 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.93 sec
2013-05-22 18:46:11,952 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.93 sec
2013-05-22 18:46:12,960 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.93 sec
2013-05-22 18:46:13,967 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.93 sec
2013-05-22 18:46:14,974 Stage-1 map = 100%,  reduce = 33%, Cumulative CPU 0.93 sec
2013-05-22 18:46:15,983 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.38 sec
2013-05-22 18:46:16,990 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.38 sec
2013-05-22 18:46:18,004 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.38 sec
MapReduce Total cumulative CPU time: 3 seconds 380 msec
Ended Job = job_201305221738_0003
MapReduce Jobs Launched:
Job 0: Map: 1  Reduce: 1   Cumulative CPU: 3.38 sec   HDFS Read: 371 HDFS Write: 45 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 380 msec
OK
20121221        80098
20121222        53666
20121223        94344
Time taken: 20.743 seconds

一些简单的操作就可以不手动创建mapreduce任务,而用hive直接统计就行了,非常方便,如果要将结果保存为本地文件,可以执行如下命令

bin/hive -e "select day, sum(bytes) from logs group by day" >> res.csv

还有貌似这个版本hive只能同时支持一个终端进入hive操作,再有终端进入hive操作会提示如下错误。希望新的版本能解决这个问题

FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

See Also : Hadoop权威指南 第12章 Hive简介

<think>嗯,用户想了解如何在Flutter中安装使用Hive数据库。首先,我需要回忆一下Hive的相关知识,确保信息准确。记得Hive是一个轻量级的NoSQL数据库,适合在移动端使用,特别是因为它不需要native依赖,而且性能不错。 首先,安装部分。用户需要在pubspec.yaml文件中添加依赖项。根据引用[2],应该包括hivehive_flutter,还有dev_dependencies里的hive_generator和build_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、付费专栏及课程。

余额充值