前言
以大数据为中心的问题的解决方案包括放松的模式、以列族为中心的存储、分布式文件系统、复制,有时还包括最终一致性。这些解决方案的重点是管理大型的、空闲的、非规范化的数据量,其大小通常超过几 TB。
通常,当您使用这些大数据存储时,您具有分析和访问数据的特定的、预定义的方法。因此,即席查询和富查询表达式并不是高优先级,通常也不是当前可用解决方案的一部分。此外,这些大数据解决方案中有许多涉及到相当新的产品,而且仍在迅速发展。
这些产品还没有成熟到可以在广泛的用例中进行测试的程度,而且还远远没有完成特性。也就是说,他们擅长于他们被设计来做的事情: 管理大数据。
与新兴的大数据解决方案相比,RDBMS 世界拥有一系列健壮且成熟的数据管理和查询工具。其中最突出和最重要的是 SQL。这是查询数据的一种强大而方便的方法: 在一个集合中切片、分割、聚合和关联数据点。因此,听起来可能有些讽刺,NoSQL 中最大的缺失就是类似 SQL 的东西。
在需要拥有类似 SQL 的语法和语义以及更高级抽象的易用性之后,Hive 和 Pigg 出手相救。Apache Hive 是一个构建在 Hadoop 之上的数据仓库基础设施,Apache Pigg 是一种用于分析大量数据的高级语言。
HIVE BASICS 安装
如果您还没有安装 Hadoop,那么 Hive 利用了一个可以工作的 Hadoop 安装,所以请首先安装 Hadoop。
Hadoop 可以从 Hadoop.apache.org 下载。目前,Hive 在 Java 1.6和 Hadoop 0.20.2中运行良好,因此要确保为这些软件获得正确的版本。Hive 在 MacOSX 和任何 Linux 变体上都能正常工作。你也许可以在 Windows 上使用 Cygwin 运行 Hive,。
如果您在 Windows 上,并且无法访问 Mac OS X 或 Linux 环境,请考虑使用带有 VMware Player 的虚拟机来安装 Hive。
安装 Hive 很简单,只需执行以下步骤:
1.下载 Hive 的稳定版本。您可以使用
cur1-o http://mirror.candidhosting.com/pub/apache//hive/hive-0.6.0/ hive-0.6.0.tar.gz
在 Mac OS X 上下载 hive-0.6.0。在 Linux 及其变体上使用 wget 而不是 cur1。
2.在 Mac OS X 和 Linux 上,解压缩如下:
tar zxvf hive-0.6.0.tar.gz。
3.设置 HIVE_HOME 环境变量指向 HIVE 安装目录。
4.将 SHIVE_HOME/bin 添加到 PATH 环境变量,这样 Hive 可执行文件就可以从它们的 home 目录之外访问。
5.通过运行 bin/Start-all 启动 Hadoop 守护进程。在 $HADOOP_HOME 目录内的 sh。这应该启动 HDFS namenode、辅助 namenode 和 datanode,还应该启动 MapReduce 作业跟踪器和任务跟踪器。使用 jps 命令验证这五个进程是否正在运行。
6.在 HDFS 上创建/tmp 和/user/hive/warehouse 文件夹,如下所示:
bin/hadoop fs -mkdir /tmp
bin/hadoop fs -mkdir /user/hive/warehouse
/user/hive/warehouse就是 hive 元存储仓库目录。
7.对在 HDFS 中创建的/tmp 和/user/hive/warehouse 文件夹设置组的写权限。可以使用 chmod 命令修改权限,如下所示:
Bin/hadoop fs-chmod g + w/tmp
Bin/hadoop fs-chmod g + w/user/hive/Ware
使用 HIVE 进行查询
如果您完成了前面的所有步骤,就可以将 Hadoop 集群用于HIVE。通过在 $HIVE_HOME 目录中运行 bin/HIVE 启动 HIVE 命令行界面(CLI)。使用 Hive CLI 将给您一种似曾相识的感觉,因为其语义和语法与您在连接到 RDBMS 的命令行客户机上可能经历的非常相似。
首先列出现有的表格如下:
SHOW TABLES;
尚未创建任何表,因此您将看到一个空的 ok 和一个指标,显示查询运行的时间。与大多数数据库 CLI 一样,所有查询都会打印所花费的时间。它是查询是否有效运行的良好的第一个指示器。
接下来,创建一个这样的表:
CREATE TABLE books (isbn INT, title STRING);
这将创建一个图书表,其中包含两列: isbn 和 title。列数据类型分别为整数和字符串。要列出 books 表的架构,查询如下:
创建另一个名为 users 的表,如下所示:
CREATE TABLE users (id INT, name STRING) PARTITIONED BY (vcol STRING);
Users 表有三列: id、 name 和 vcol. 。运行 DESCRIBE 表查询可以确认这一点,如下所示:
列 vcol 是一个虚拟列。它是一个分区列,派生自存储数据的分区,而不是数据集本身。一个表可以划分为多个逻辑部分。每个逻辑部分都可以通过标识分区的虚拟列的特定值来标识。
现在运行 SHOW TABLES 命令,像这样列出表:
Books 表存储有关图书的数据。 b
ooks 表中的 isbn 和 title 列标识
描述一本书,但只有这两个属性是相当简约的。在 books 表中添加作者列和分类列似乎是个不错的主意。在 RDBMS 中,这种操作是使用 ALTERTABLE 命令完成的。毫不奇怪,Hive 也有类似的语法。您可以修改 books 表并添加以下列:
ALTER TABLE books ADD COLUMNS (author STRING, category STRING);
重新确认 books 表具有如下修改后的模式:
接下来,您可能希望修改 books 表的 author 列,以适应一本书由多个作者编写的情况。在这种情况下,字符串数组比单个字符串更好地表示数据。在进行此修改时,您可能还希望向列附加一条注释,建议该列保存多值数据。您可以按照以下方式完成所有这些工作:
ALTER TABLE books CHANGE author author ARRAY < STRING > COMMENT“ multi-value”;
对图书重新运行 DESCRIBE TABLE,在对 author 列进行修改之后,会产生以下输出:
ALTERTABLE 命令允许您使用
语法如下:
ALTER TABLE TABLE_name CHANGE [ COLUMN ]
old_COLUMN_name new_COLUMN_name COLUMN_type
[COMMENT column_comment]
[FIRST|AFTER column_name]
对于列更改,ALTERTABLE 的参数需要按照如下所示的确切顺序出现。方括号([1)中的参数是可选的,但是其他所有参数都需要按照正确的顺序包含,这样命令才能正常工作。作为一个副作用,这意味着当您不打算重命名相同的列名,而只打算更改其属性时,需要连续声明相同的列名两次。查看前面示例中的 author 列,看看它对命令的影响。Hive 支持原始和复杂的数据类型。复杂类型可以使用映射、数组或结构在 Hive 中建模。在刚才演示的示例中,该列被修改为保存值的 ARRAY。数组需要为其元素添加额外的类型定义。ARRAY 类型的元素不能包含两种不同类型的数据。对于 author 列,ARRAY 只包含 STRING 类型。
本文正在参加「金石计划 . 瓜分6万现金大奖」