0

0

基于Hadoop数据仓库Hive1.2部署及使用

php中文网

php中文网

发布时间:2016-06-07 14:56:03

|

1785人浏览过

|

来源于php中文网

原创

以下基于上篇Hadoop2.6集群部署: http://lizhenliang.blog.51cto.com/7876557/1661354 接下来安装Hadoop数据仓库Hive,上节了解HBase简单使用,听起来HBase与Hive有些类似,概念也有点模糊,那我们先了解下他们之间有什么区别: HBase是一种分布式、面向列

以下基于上篇hadoop2.6集群部署:http://lizhenliang.blog.51cto.com/7876557/1661354

接下来安装Hadoop数据仓库Hive,上节了解HBase简单使用,听起来HBase与Hive有些类似,概念也有点模糊,那我们先了解下他们之间有什么区别:

  HBase是一种分布式、面向列的NoSQL数据库,基于HDFS存储,以表的形式存储数据,表由行和列组成,列划分到列族中。HBase不提供类SQL查询语言,要想像SQL这样查询数据,可以使用Phonix,让SQL查询转换成hbase的扫描和对应的操作,也可以使用现在说讲Hive仓库工具,让HBase作为Hive存储

  Hive是运行在Hadoop之上的数据仓库,将结构化的数据文件映射为一张数据库表,提供简单类SQL查询语言,称为HQL,并将SQL语句转换成MapReduce任务运算。有利于利用SQL语言查询、分析数据,适于处理不频繁变动的数据。Hive底层可以是HBase或者HDFS存储的文件。

  两者都是基于Hadoop上不同的技术,相互结合使用,可处理企业中不同类型的业务,利用Hive处理非结构化离线分析统计,利用HBase处理在线查询。

Hive三种元数据存储方式:

1>.本地derby存储,只允许一个用户连接Hive,适用于测试环境

2>.本地/远程MySQL存储,支持多用户连接Hive,适用于生产环境

三、Hive安装与配置(以下将元数据存储到远程MySQL配置)

1.在MySQL创建Hive元数据存放库和连接用户

mysql> create database hive;
mysql> grant all on *.* to'hive'@'%' identified by 'hive';
mysql> flush privileges;

2.安装与配置Hive(在HMaster0安装)

# tar zxvf apache-hive-1.2.0-bin.tar.gz
# mv apache-hive-1.2.0-bin /opt
# vi hive-site.xml
<configuration>
    <!--以下是MySQL连接信息-->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.18.210:3306/hive?createDatabaseIfNotExist=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive_user</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive_pass</value>
    </property>
</configuration>

3.配置系统变量

# vi /etc/profile
HIVE_HOME=/opt/apache-hive-1.2.0-bin
PATH=$PATH:$HIVE_HOME/bin
export HIVE_HOME PATH
# source /etc/profile

4.启动Hive

# hive --service metastore &   #启动远程模式,否则你只能在本地登录

5.检查是否正常启动

查看进程是否启动:

[root@HMaster0 ~]# jps
2615 DFSZKFailoverController
30027 ResourceManager
29656 NameNode
25451 Jps
10270 HMaster
14975 RunJar     #会启动一个RunJar进程

执行hive命令会进入命令界面:

[root@HMaster0 ~]# hive
Logging initialized usingconfiguration in file:/opt/apache-hive-1.2.0-bin/conf/hive-log4j.properties
hive> show databases;
OK
default
Time taken: 0.986 seconds,Fetched: 1 row(s)

查看数据库,默认有一个default库,现在就可以用你熟悉的SQL语言了。

6.客户端连接Hive(必须有Hadoop环境)

# tar zxvf apache-hive-1.2.0-bin.tar.gz
# mv apache-hive-1.2.0-bin /opt
# vi hive-site.xml
<configuration>
<!--通过thrift方式连接hive-->
   <property>
       <name>hive.metastore.uris</name>
        <value>thrift://192.168.18.215:9083</value>
   </property>
</configuration>

配置好连接信息,连接命令行:

# /opt/apache-hive-1.2.0-bin/bin/hive

7.Hive常用SQL命令

 7.1 先创建一个测试库

 hive> create database test;

 7.2 创建tb1表,并指定字段分隔符为tab键(否则会插入NULL)

 hive> create table tb1(id int,name string)row format delimited fields terminated by '\t'

 如果想再创建一个表,而且表结构和tb1一样,可以这样:

 hive> create table tb3 like tb1;

 查看下表结构:

 hive> describe tb3;
 OK
 id                     int            
 name                   string                  
 Time taken: 0.091 seconds, Fetched: 2 row(s)

 7.3 从本地文件中导入数据到Hive表

 先创建数据文件,键值要以tab键空格:

 # cat kv.txt 
 1       zhangsan
 2       lisi
 3       wangwu

 再导入数据:

 hive> load data local inpath'/root/kv.txt' overwrite into table tb1;

 7.4 从HDFS中导入数据到Hive表

 # hadoop fs -cat /kv.txt   #查看hdfs中要导入的数据
 1       zhangsan
 2       lisi
 3       wangwu
 hive> load data inpath '/kv.txt'overwrite into table tb1;

 7.5 查询是否导入成功

 hive> select * from tb1;
 OK
 1       zhangsan
 2       lisi
 3       wangwu
 Time taken: 0.209 seconds,Fetched: 3 row(s)

 

 博客地址:http://lizhenliang.blog.51cto.com

 

 上面是基本表的简单操作,为了提高处理性能,Hive引入了分区机制,那我们就了解分区表概念:

 1>.分区表是在创建表时指定的分区空间

 2>.一个表可以有一个或多个分区,意思把数据划分成块

 3>.分区以字段的形式在表结构中,不存放实际数据内容

 分区表优点:将表中数据根据条件分配到不同的分区中,缩小查询范围,提高检索速度和处理性能。

 单分区表:

 7.6 创建单分区表tb2(HDFS表目录下只有一级目录):

hive> create table tb2(idint,name string) partitioned by (dt string) row format delimited fieldsterminated by '\t';

 注:dt可以理解为分区名称。

 7.7 从文件中把数据导入到Hive分区表,并定义分区信息

 hive> load data local inpath '/root/kv.txt' into table tb2 partition (dt='2015-06-26');
 hive> load data local inpath '/root/kv.txt' into table tb2 partition (dt='2015-06-27');

 7.8 查看表数据

 hive> select * from tb2;
 OK
 1       zhangsan  2015-06-26
 2       lisi     2015-06-26
 3       wangwu   2015-06-26
 1       zhangsan  2015-06-27
 2       lisi   2015-06-27
 3       wangwu   2015-06-27
 Time taken: 0.223 seconds,Fetched: 6 row(s)

 7.9 查看HDFS仓库中表目录变化

 # hadoop fs -ls -R /user/hive/warehouse/test.db/tb2
 drwxr-xr-x   - root supergroup          0 2015-06-26 04:12/user/hive/warehouse/test.db/tb2/dt=2015-06-26
 -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:12 /user/hive/warehouse/test.db/tb2/dt=2015-06-26/kv.txt
 drwxr-xr-x   - root supergroup          0 2015-06-26 04:15/user/hive/warehouse/test.db/tb2/dt=2015-06-27
 -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:15/user/hive/warehouse/test.db/tb2/dt=2015-06-27/kv.txt

 可以看到tb2表导入的数据根据日期将数据划分到不同目录下。

 多分区表:

 7.10 创建多分区表tb3(HDFS表目录下有一级目录,一级目录下再有子级目录)

 hive> create table tb3(idint,name string) partitioned by (dt string,location string) row formatdelimited fields terminated by '\t';

 7.11 从文件中把数据导入到Hive分区表,并定义分区信息

 hive> load data local inpath '/root/kv.txt' into table tb3 partition (dt='2015-06- 26',location='beijing');
 hive> load data local inpath '/root/kv.txt' into table tb3 partition (dt='2015-06-27',location='shanghai');

 7.12 查看表数据

 hive> select * from tb3;
 OK
 1       zhangsan  2015-06-26      beijing
 2       lisi     2015-06-26      beijing
 3       wangwu    2015-06-26      beijing
 1       zhangsan  2015-06-26      shanghai
 2       lisi     2015-06-26      shanghai
 3       wangwu    2015-06-26      shanghai
 Time taken: 0.208 seconds,Fetched: 6 row(s)

 7.13 查看HDFS仓库中表目录变化

<span style="color:rgb(0,0,0);"> # hadoop fs -ls -R /user/hive/warehouse/test.db/tb3<br> drwxr-xr-x   - root supergroup          0 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26<br> drwxr-xr-x   - root supergroup          0 2015-06-26 04:35 /user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing<br> -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing/kv.txt<br> drwxr-xr-x   - root supergroup          0 2015-06-26 04:45 /user/hive/warehouse/test.db/tb3/dt=2015-06-27<br> drwxr-xr-x   - root supergroup          0 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai<br> -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai/kv.txt<br></span>

 可以看到表中一级dt分区目录下又分成了location分区。

 7.14 查看表分区信息

 hive> show partitions tb2;

 7.15 根据分区查询数据

 hive> select name from tb3 where dt='2015-06-27';

 7.16 重命名分区

 hive> alter table tb3 partition (dt='2015-06-27',location='shanghai') rename to partition(dt='20150627',location='shanghai');

 7.17 删除分区

 hive> alter table tb3 droppartition (dt='2015-06-26',location='shanghai');

 7.18 模糊搜索表

 hive> show tables 'tb*';

 7.19 给表新添加一列

 hive> alter table tb1 addcolumns (commnet string);

 7.20 重命名表

 hive> alter table tb1 rename to new_tb1;

 7.21 删除表

 hive> drop table new_tb1;

8.启动过程中遇到错误

报错1:

[ERROR]Terminal initialization failed; falling back to unsupported

java.lang.IncompatibleClassChangeError:Found class jline.Terminal, but interface was expected

解决方法,将hive/lib下jline包拷贝到hadoop/yarn/lib下:

# cp /opt/apache-hive-1.2.0-bin/lib/jline-2.12.jar /opt/hadoop-2.6.0/share/hadoop/yarn/lib/
# rm /opt/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar

报错2:

javax.jdo.JDOFatalInternalException:Error creating transactional connection factory

解决方法,在百度下载java连接MySQL包放到hive/lib下:

# cp mysql-connector-java-5.1.10-bin.jar /opt/apache-hive-1.2.0-bin/lib


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

4

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

8

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

32

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

25

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

77

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

60

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

48

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

26

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

20

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 6.5万人学习

Rust 教程
Rust 教程

共28课时 | 6.5万人学习

Django 教程
Django 教程

共28课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号