收藏 分享(赏)

HIVE安装使用说明.doc

上传人:精品资料 文档编号:11080496 上传时间:2020-02-06 格式:DOC 页数:16 大小:356.50KB
下载 相关 举报
HIVE安装使用说明.doc_第1页
第1页 / 共16页
HIVE安装使用说明.doc_第2页
第2页 / 共16页
HIVE安装使用说明.doc_第3页
第3页 / 共16页
HIVE安装使用说明.doc_第4页
第4页 / 共16页
HIVE安装使用说明.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、 1 / 16HIVE 安装使用说明一、 Hive 简介1.1. Hive 是什么Hadoop 作为分布式运算的基础架构设施,统计分析需要采用MapReduce 编写程序后,放到 Hadoop 集群中进行统计分析计算,使用起来较为不便,Hive 产品采用类似 SQL 的语句快速实现简单的MapReduce 统计,很大程度降低了 Hadoop 的学习使用成本。Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供基础的 SQL 查询功能,可以将SQL 语句转换为 MapReduce 任务运行,而不必开发专门的MapReduce 应用,十分适合数据仓库

2、的统计分析。1.2. 部署架构2 / 16Hive 中的 Driver 为核心驱动部分,包括 SQL 语句的解释、编译为MapReduce 任务,并进行优化、执行。Hive 用户访问包括 4 种运行和访问方式,一是 CLI 客户端;二是HiveServer2 和 Beeline 方式;三是 HCatalog/WebHCat 方式;四是HWI 方式。其中 CLI、Beeline 均为控制台命令行操作模式,区别在于 CLI 只能操作本地 Hive 服务,而 Beeline 可以通过 JDBC 连接远程服务。HiveServer2 为采用 Thrift 提供的远程调用接口,并提供标准的JDBC 连接

3、访问方式。HCatalog 是 Hadoop 的元数据和数据表的管理系统,WebHCat 则提供一条 Restful 的 HCatalog 远程访问接口,HCatalog 的使用目前资料很少,尚未充分了解。HWI 是 Hive Web Interface 的简称,可以理解为 CLI 的 WEB 访问方式,因当前安装介质中未找到 HWI 对应的 WAR 文件,未能进行使用学习。Hive 在运行过程中,还需要提供 MetaStore 提供对元数据(包括表结构、表与数据文件的关系等)的保存,Hive 提供三种形式的MetaStore:一是内嵌 Derby 方式,该方式一般用演示环境的搭建;二是采用第

4、三方数据库进行保存,例如常用的 MySQL 等;三是远程接口方式,及由 Hive 自身提供远程服务,供其他 Hive 应用使用。在本安装示例中采用的第二种方式进行安装部署。备注:在本文后续的安装和说明中,所有示例均以3 / 16HiverServer2、Beeline 方式进行。另:因 Hive 在查询时性能较差,后期拟计划采用 SPARK 或Presto 进行替代,因此本安装手册不对 Hive 的集群方案进行描述。1.3. 环境说明本安装示例在 Ubuntu 14.04.3 的虚拟器中进行安装,并提前安装配置 Hadoop。机器名 IP 地址 安装软件 启用服务hdfs1 10.68.19.

5、184HiveHadoophdfs2 10.68.19.182 Hadoophdfs3 10.68.19.183MySQLHadoop二、 MySQL 安装配置2.1. MySQL 安装登录到 hdfs3 中,安装 MySQL 服务器。$ sudo apt-get install mysql-server修改 my.cfg 的配置文件$ sudo vi /etc/mysql/my.cfg修改内容如下:bind-address = 10.68.19.183:wq重新启动 mysql 服务$ sudo service mysql restart4 / 162.2. 创建 Hive 需要的数据库和用

6、户$ mysql -uroot -p依次输入以下命令:# 创建 hive 用户insert into mysql.user(Host,User,Password) values(“localhost“,“hive“,password(“hive“);# 创建数据库create database hive;# 授权grant all on hive.* to hive% identified by hive;grant all on hive.* to hivelocalhost identified by hive;flush privileges;# 退出exit三、 Hive 安装3.1.

7、 下载 Hive从官网(http:/hive.apache.org/downloads.html)上下载最新的稳定版本地址,并上传到服务器上。本安装示例采用的版本为 apache-hive-1.2.1-bin.tar.gz。3.2. 解压并配置环境变量解压安装文件到/opt 目录$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt修改环境变量$ sudo vi /etc/profile修改如下内容export HIVE_HOME=/opt/hive-1.2.1export PATH=“$JAVA_HOME/bin:$HADOOP_HOME/bin:$

8、HIVE_HOME/bin:$PATH“:wq5 / 16启用配置$ source /etc/profile3.3. 修改配置文件$ cd $HIVE_HOME$ cp conf/hive-default.xml.template conf/hive-site.xml$ vi conf/hive-site.xml修改以下内容的值javax.jdo.option.ConnectionURLjdbc:mysql:/10.68.19.183:3306/hiveJDBC connect string for a JDBC metastorejavax.jdo.option.ConnectionDriv

9、erNamecom.mysql.jdbc.DriverDriver class name for a JDBC metastorejavax.jdo.option.ConnectionPasswordhivepassword to use against metastore databasejavax.jdo.option.ConnectionUserNamehiveUsername to use against metastore databasehive.exec.local.scratchdir/data/hive/scratachLocal scratch space for Hive

10、 jobshive.downloaded.resources.dir/data/hive/downloadTemporary local directory for added resources in the remote file system.6 / 16hive.querylog.location/data/hive/querylogLocation of Hive run time structured log filehive.server2.logging.operation.log.location/data/hive/operation_logsTop level direc

11、tory where operation logs are stored if logging functionality is enabled.3.4. 创建需要的目录$ mkdir /data/hive$ mkdir /data/hive/scratach$ mkdir /data/hive/download$ mkdir /data/hive/querylog$ mkdir /data/hive/operation_logs3.5. 上传 MySQL 驱动将 mysql-connector-java-5.1.36.jar 上传到$HIVE_HOME/lib 目录下。3.6. 启动$ hi

12、veserver23.7. 基本操作验证$ beeline!connect jdbc:hive2:/hdfs1:10000输入当前用户名,密码为空或者直接输入$ ./bin/beeline u jdbc:hive2:/hdfs1:100007 / 16# 查看当前数据库show databases;# 查看所有表show tables;# 创建表create table users(user_id int, fname string,lname string );# 插入数据INSERT INTO users (user_id, fname, lname) VALUES (1, john, s

13、mith);INSERT INTO users (user_id, fname, lname) VALUES (2, john, doe);INSERT INTO users (user_id, fname, lname) VALUES (3, john, smith);# 查询数据select * from users limit 2;select count(1) from users;3.8. 数据导入示例示例场景说明:先将输入导入到 tmp_sell_day_corp_cig,再将数据写入 sell_day_corp_cig 中。创建表create table tmp_sell_day

14、_corp_cig(sell_d string,cig_code string,stat_code string,statyear smallint,halfyear smallint,quarter smallint,statmonth smallint,stattenday smallint,statdate smallint,cig_province string,cig_factory string,trademark_code string,8 / 16cig_inside string,cig_grade string,cig_famous string,cig_hundred s

15、tring,cig_kind string,cig_low string,cig_seizure string,sell_amount double,sell_total_money double,gross_profit double,demand_amount double)partitioned by (corp_code string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ,;create table sell_day_corp_cig(sell_d string,cig_code string,stat_code string,staty

16、ear smallint,halfyear smallint,quarter smallint,statmonth smallint,stattenday smallint,statdate smallint,cig_province string,cig_factory string,trademark_code string,cig_inside string,cig_grade string,cig_famous string,cig_hundred string,cig_kind string,cig_low string,cig_seizure string,sell_amount

17、double,sell_total_money double,gross_profit double,demand_amount double)partitioned by (corp_code string)clustered by(sell_d) sorted by(cig_code) INTO 16 BUCKETSSTORED AS orcfile;9 / 16导入数据到临时表LOAD DATA LOCAL INPATH /home/whcyit/data.txt OVERWRITE INTO TABLE tmp_sell_day_corp_cig partition(corp_code

18、=11420101);启用分桶,写入正式表set hive.enforce.bucketing = true;INSERT OVERWRITE TABLE sell_day_corp_cig partition(corp_code=11420101)select sell_d,cig_code,stat_code,statyear,halfyear,quarter,statmonth,stattenday,statdate,cig_province,cig_factory,trademark_code,cig_inside,cig_grade,cig_famous,cig_hundred,ci

19、g_kind,cig_low,cig_seizure,sell_amount,sell_total_money,gross_profit,demand_amount from tmp_sell_day_corp_cig WHERE corp_code=11420101;显示分区SHOW PARTITIONS sell_day_corp_cig;查询数据select count(1) from sell_day_corp_cig;select sum(a.sell_amount),sum(a.sell_total_money),a.cig_code,a.corp_code from sell_d

20、ay_corp_cig a group by a.cig_code,a.corp_code;建立索引create index idx_sell_day_corp_cig on table sell_day_corp_cig(cig_code)as pact.CompactIndexHandlerwith deferred rebuildIN TABLE idx_sell_day_corp_cig_table;alter index idx_sell_day_corp_cig on sell_day_corp_cig rebuild;四、 HIVE 集群配置在 Hive 上述的安装配置中 Met

21、aStore 和HiverServer2(ThriftServer )两个部分存储单点问题,对于10 / 16MetaStore 因采用数据库进行保存,需要使用数据库本身的方式实现高可用。对于 HiverServer2 的集群方式一般可以采用两种模式:一是采用 HAProxy(四层应用集群)进行流量分发,二是采用ZooKeeper 实现 Hive 集群配置。本安装仅说明采用 ZooKeeper 实现HiveServer2 的高可用方式。4.1. ZooKeeper 高可用的原理4.2. 修改 hive-site.xml 配置hive.zookeeper.quorumhdfs1:2181,hdf

22、s2:2181,hdfs3:2181hive.server2.support.dynamic.service.discoverytruehive.server2.zookeeper.namespacehiveserver211 / 164.3. 启动 HiveServer2$ $HIVE_HOME/bin/hiveserver24.3. 验证集群启用$ zkCli.sh$ ls /hiveserver24.4.集群的使用JDBC 或 ODBC 采用以下方式进行连接jdbc:hive2:/;serviceDiscoveryMode=zooKeeper; zooKeeperNamespace=其中

23、:ZooKeeper 地址和端口例如:String url = “jdbc:hive2:/hdfs1:2181, hdfs2:2181, hdfs3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2“;Connection con = DriverManager.getConnection(url, “whcyit“, “);备注:该连接方式不支持 beeline 客户端,当 JDBC 驱动能够正常运行识别。五、 Hive 基础概念5.1. Hive 与传统数据库的区别Hive 作为基于 Hadoop 的数据

24、仓库产品,虽然其采用类似数据库定义语言(DDL,create/drop/alter/truncate/show/describe) 、数据库操作语言(DML:load/insert/update/delete/import/export) 、SQL 语言实现了数据的统计分析功能,但其与传统关系型数据库有着很大12 / 16区别。但 Hive 同样在飞速发展中,越来越多的传统数据库特性在Hive 中得到了支持,例如:ACID 事务特性、索引、视图等。 不支持删除操作Hive 默认情况下不支持数据删除操作,如需要删除单条记录需要启动 hive 的测试模式,对于实际数据仓库类应用中应不存在类似应用。

25、对于大批量删除,只能采用重新导入数据的方式进行覆盖。 不支持存储过程Hive 没有提供存储过程的支持,对于复杂汇总依旧不能采用 SQL进行有效处理。第三方提供了 HPL/SQL 的支持(http:/www.hplsql.org/download)还需要进一步的学习。 不支持部分 SQL 特性不支持主外键、条件约束;不支持类似 SQL 中 in 的用法(子查询) ,可以采用 left semi join(半连接)进行替代;5.2. Hive 支持的数据模型Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:Table(表) ,External Table(外部表) ,Pa

26、rtition(分区) ,Bucket(桶) 。Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 app,它在 HDFS 中的路径为:/user/hive/warehouse/app 。13 / 16Partition(分区)对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。Buckets (桶)

27、对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。Table(内部表)的创建过程和数据加载过程(这两个过程可以在同一个语句中完成) ,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。External Table 只有一个过程,加载数据和创建表同时完成(CREATE EXTERN

28、AL TABLE LOCATION) ,实际数据是存储在 LOCATION 后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个 External Table 时,仅删除 hive 的元数据,不会删除 hdfs 上对应的文件。5.3. Hive 的数据存储格式Hive 支持以下存储格式: TextFile文本格式(默认) 。14 / 16 SequenceFileSequenceFile 是 Hadoop API 提供的一种二进制文件,它将数据以的形式序列化到文件中 RCFileRCFile 是 Hive 推出的一种专门面向列的数据格式。 它遵循“先按列划分,再垂直划分”的设计

29、理念。当查询过程中,针对它并不关心的列时,它会在 IO 上跳过这些列。 ORCFile全称为 Optimized Row Columnaer file,针对 RCFile 存储格式进行一些优化。 AvroAvro 是一种用于支持数据密集型的二进制文件格式。它的文件格式更为紧凑,若要读取大量数据时,Avro 能够提供更好的序列化和反序列化性能。5.4. Hive 支持的数据类型数值类:tinyint(1 字节) 、smallint(2 字节)、int(4 字节) 、bigint(8 字节) 、float(4 字节) 、double(8 字节) 、decimal时间类:timestamp 、dat

30、e字符类:string 、varchar、char其它类:boolean、binary备注:如需要使用 presto、Spark 等,建议采用数据类型尽量使用 string、int、float、double,不要使用 VARCHAR、DECIMAL 等,部15 / 16分第三方引擎无法提供支持。备注:通过目前初步的测试发现(3.8 中的示例查询) ,TextFile查询约需要 37s;RCFile 查询需要 20s 左右;而 ORCFile 仅仅需要 10s左右的时间。六、 Hive 常用操作本部分只是部分常用 Hive 的操作指令,详细内容请查看官网WIKI 上的内容(https:/cwik

31、i.apache.org/confluence/display/Hive/Home) 。6.1. 新建表CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS db_name.table_name(col_name data_type COMMENT col_comment, .)COMMENT table_commentPARTITIONED BY (col_name data_type COMMENT col_comment, .)CLUSTERED BY (col_name, col_name, .) SORTED BY (col_name ASC|D

32、ESC, .) INTO num_buckets BUCKETSROW FORMAT row_format STORED AS file_format| STORED BY storage.handler.class.name WITH SERDEPROPERTIES (.)LOCATION hdfs_path6.2. 复制表结构CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS db_name.table_nameLIKE existing_table_nameLOCATION hdfs_path;6.3. 删除表DROP TABLE IF EXIST

33、S table_name;6.4. 重命名表ALTER TABLE table_name RENAME TO new_table_name;16 / 166.5. 数据加载LOAD DATA LOCAL INPATH filepath OVERWRITE INTO TABLE tablename PARTITION (partcol1=val1, partcol2=val2 .)6.6. 数据导出EXPORT TABLE tablename PARTITION (part_column=“value“, .)TO export_target_path备注:路径为 HDFS 上的路径6.7. 数据导入IMPORT EXTERNAL TABLE new_or_original_tablename PARTITION (part_column=“value“, .)FROM source_pathLOCATION import_target_path备注:路径为 HDFS 上的路径

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报