Chinaunix首页 | 论坛 | 博客
  • 博客访问: 834523
  • 博文数量: 167
  • 博客积分: 7173
  • 博客等级: 少将
  • 技术积分: 1671
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-04 23:07
文章分类

全部博文(167)

文章存档

2018年(1)

2017年(11)

2012年(2)

2011年(27)

2010年(88)

2009年(38)

分类: 云计算

2011-08-17 18:53:40

在上一篇hadoop 快速安装的基础上,进行搭建hive。

Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,
可以用来进行数据提取转化加载(ETL),这是一种可以存储、
查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的
类SQL 查询语言,称为 QL,它允许熟悉 SQL 的用户查询数据。同时,
这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和
reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。


具体介绍请看:


具体架构是:


主要分为以下几个部分:

  • 用户接口,包括 CLI,Client,WUI。
  • 元数据存储,通常是存储在关系数据库如 mysql, derby 中。
  • 解释器、编译器、优化器、执行器。
  • Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算。
  1. 用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是 CLI,Cli 启动的时候,会同时启动一个 Hive 副本。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。 WUI 是通过浏览器访问 Hive。
  2. Hive 将元数据存储在数据库中,如 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  3. 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
  4. Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapRedcue 任务)。
Hive原数据存储格式
Hive 将元数据存储在 RDBMS 中,有三种模式可以连接到数据库:
1.Single User Mode: 此模式连接到一个 In-memory 的数据库 Derby,一般用于 Unit Test

2.Multi User Mode:通过网络连接到一个数据库中,是最经常使用到的模式。




3.Remote Server Mode:用于非 Java 客户端访问元数据库,在服务器端启动一个 MetaStoreServer,客户端利用 Thrift 协议通过 MetaStoreServer 访问元数据库




在原数据的存储中,本文章使用第二种模式。



使用的包有:

1.hive-0.6.0.tar.gz  2.mysql-5.5.9-linux2.6-x86_64.tar.gz 3.mysql-connector-java-5.1.11-bin.jar


配置步骤:

1.cd /data && tar -zxvf hive-0.6.0.tar.gz && mv mysql-connector-java-5.1.11-bin.jar hive-0.6.0/lib

2. chown -R hadoop:hadoop hive-0.6.0

3. cd /data/hive-0.6.0/conf && vi  hive-site.xml



mapred.job.tracker
hadoop-237-13.pconline.ctc:9001 // /etc/hosts文件中已制定这个hostname 对应的ip
xxxx



javax.jdo.option.ConnectionURL
jdbc:mysql://localhost:3306/hiveMetaData?createDatabaseIfNotExist=true
JDBC connect string for a JDBC metastore


 //以下是配置mysql jdbc的数据源,按需填写

javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for a JDBC metastore



  javax.jdo.option.ConnectionUserName
  hadoophive
  username to use against metastore database



  javax.jdo.option.ConnectionPassword
  123456
  password to use against metastore database


4.vi hive-log4j.properties

   在这里我只配置:hive.log.dir=/data/hive-0.6.0/log //目录需存在

   可以不进行配置,默认为/tmp/${system user}

5. useradd  mysql

6. cd /data && tar -zxvf  mysql-5.5.9-linux2.6-x86_64.tar.gz && ln -s /data/mysql-5.5.9-linux2.6-x86_64 /usr/local/mysql

7. chown -R mysql:mysql /usr/local/mysql /data/mysql-5.5.9-linux2.6-x86_64

8. 配置/etc/my.cnf

9.cd /data/mysql-5.5.9-linux2.6-x86_64/ && MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0scripts/mysql_install_db --user=mysql

10. /etc/init.d/mtysql.server start

11.bin/mysql -u root //按需修改root密码 这里省略

12. mysql>CREATE USER 'hadoophive'@'%' IDENTIFIED BY '123456'

13. mysql>GRANT ALL PRIVILEGES ON *.* TO 'hadoophive'@'%'

到这里你可以启动hive,如果启动后能登陆出现hive>,那安装算告一段落了

14.cd /data/hive-0.6.0/bin && ./hive --service hiveserver 10000 > /data/hive-0.6.0/logs/stdout_${_time}.log 2> /data/hive-0.6.0/logs/stderr_${_time}.log &

15.cd /data/hive-0.6.0/bin && ./hive

结果如下:

[hadoop@hadoop-237-13 bin]$ ./hive

Hive history file=/tmp/hadoop/hive_job_log_hadoop_201108171926_25725236.txt
hive> 




额外测试:

一。创建表

1.hive>create table test(id INT,name STRING);

2.show tables;

出现你的表就代表操作成功。

二。使用外部数据

$HADOOP_HOME/bin/hadoop fs -mkdir /img

$HADOOP_HOME/bin/hadoop fs -put access.log /img

hive>CREATE EXTERNAL TABLE IMG_ANA(clientIp STRING,tmp1 STRING,tmp2 STRING,time STRING,finename STRING,status STRING,size INT,reffer STRING,useragent STRING,tmp3 STRING,machineip STRING,mastatus STRING,tmp4 INT,tmp5 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY "|" STORED AS TEXTFILE LOCATION '/img/acchive';


具体参数语法请查看

Create Table CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path]

CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常。

EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数 据会被一起删除,而外部表只删除元数据,不删除数据。

LIKE 允许用户复制现有的表结构,但是不复制数据。

用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。

如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 。

有分区的表可以在创建的时候使用 PARTITIONED BY 语句。一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下。而且,表和分区都可以对某个列进行 CLUSTERED BY 操作,将若干个列放入一个桶(bucket)中。也可以利用SORT BY 对数据进行排序。这样可以为特定应用提高性能。

表名和列名不区分大小写,SerDe 和属性名区分大小写。表和列的注释是字符串。

$HADOOP_HOME/bin/hadoop fs -ls /img 能看出/img/acchive证明创建成功

再做一次数据导入$HADOOP_HOME/bin/hadoop fs -put access.log /img/acchive

hive>select * from iIMG_ANA limit 10;返回数据则为成功啦。


hive搭建很简单,要看看如何使用起来才行


阅读(1457) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

wenling543212013-08-29 11:58:51

为什么现在都下载不到hive-0.6.0版本的?