Hadoop(七)Hive基础

Hive是基于Hadoop的数据仓库工具,提供了在Hadoop分布式存储上对大数据集使用SQL进行查询、修改、管理数据的功能。

Hive提供标准SQL功能,包括SQL:2003,SQL:2011和SQL:2016分析功能。Hive的SQL也可以通过用户自定义的函数(UDF),用户自定义聚合(UDAF)和用户自定义的表函数(UDTF)使用用户代码进行扩展。

Hive不要求数据存储为某种特定的格式,Hive自带连接器可以构建“,”或者“\t”分隔的CSV,TSV文本文件,Apache Parquet,Apache ORC和其他格式,用户可以为其他格式扩展Hive连接器。

一,概念

Hive

Hive是基于Hadoop数据仓库工具,来处理结构化数据。Hadoop为Hive提供了大规模扩展和容错功能。

Hive不是

  • 用来处理联机事务(OLTP)
  • 不是关系数据库
  • 不是实时查询和行级更新语言

基于Hadoop,Hive提供了以下功能。

  • 通过SQL轻松访问数据的工具,从而实现数据仓库,如(extract/transform/load)ETL,报告,数据分析等。
  • 将结构强加于各种数据结构的一种机制。
  • 直接访问存储在Apache HDFS中的文件,或者在其他存储系统的文件,如:Hbase
  • 通过Apache Tez,Apache Spark或者MapReduce执行查询
  • 使用HPL-SQL
  • 通过Hive LLAP,Apache Yarn和Apache Slider进行亚秒级查询

Hive最好用于传统的数据仓库。

按照粒度单位,Hive数据分为

  • Databases,命名空间,用于避免表,视图,分区,列等命名冲突。还用于用户或用户组权限。
  • Tables,具有相同模式的同类数据单元,例如page_views表,每一行包含以下列:
    1. timestmap,INT类型,对应于查看页面的Unix时间戳
    2. userId,BIGINT类型,对应于查看页面的用户
    3. page_url,String类型,页面的资源路径
    4. referer_url,String类型,用户到达当前页面的页面位置
    5. ip,String类型,发出请求的用户IP
  • Partitions,每一张Table可以有一个或者多个Partition key,Partition key决定了数据是怎们存储的。Partitions,一是作为存储单元,另一个是通过Partition,用户可以识别满足标准的行。例如String类型的date_partition和String类型的county_partition。每一个Partition key唯一键定义了Table的一个partition,例如从2009-12-23开始所有的US数据是page_views表的一个partition。因此,如果仅仅对2009-12-23以后的US数据进行分析,则只在表的相关分区上运行查询,从而可以加快数据分析速度。注意,仅仅因为partition名称为2009-12-23,并不是他包含该日期的全部或者只包含该日期的数据。为了方便理解,partition使用日期命名。partition和数据的关系取决用用户,分区时虚拟的,不是数据的一部分,而是加载时派生的。
  • Buckets,每个分区的数据又可以分为Bucket。如page_views表可以根据userId分,userid是表的一个列,或者

结构

Hive组件包括HCatalog和WebHCat。

  • HCatalog是Hadoop的表和存储管理层,可以让用户使用不同的数据处理工具(Pig和MapReduce),可以更轻松的读写表格数据。
  • WebHCat,提供了一个用来执行Hadoop MapReduce或者YARN,Pig,Hive任务的服务,你也可以执行Hive元数据操作通过Rest风格Http接口。

Hive的结构如下图

 

单元名称

操作

用户接口/界面

Hive是一个数据仓库基础工具软件,可以创建用户和HDFS之间互动。用户界面,Hive支持是Hive的Web UI,Hive命令行,HiveHD洞察(在Windows服务器)。

元存储

Hive选择各自的数据库服务器,用以储存表,数据库,列模式或元数据表,它们的数据类型和HDFS映射。

HiveQL处理引擎

HiveQL类似于SQL的查询上Metastore模式信息。这是传统的方式进行MapReduce程序的替代品之一。相反,使用Java编写的MapReduce程序,可以编写为MapReduce工作,并处理它的查询。

执行引擎

HiveQL处理引擎和MapReduce的结合部分是由Hive执行引擎。执行引擎处理查询并产生结果和MapReduce的结果一样。它采用MapReduce方法。

HDFS 或 HBASE

Hadoop的分布式文件系统或者HBASE数据存储技术是用于将数据存储到文件系统。

二,安装

2.1,选择版本

根据自己hadoop的版本选择正确的hive版本

在官网https://hive.apache.org/downloads.html页面查看hive版本,以及对应的hadoop版本。

hive2已经不再支持基于Map-Reduce的计算,所以选择1.x版本使用MapReduce进行计算。

2.2,下载解压

[root@ecs-7bc6-0001 hive]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
[root@ecs-7bc6-0001 hive]# tar -zxvf apache-hive-1.2.2-bin.tar.gz

重命名一下

[root@ecs-7bc6-0001 hive]# mv apache-hive-1.2.2-bin hive-1.2.2

2.3,添加环境变量

export HIVE_HOME=/home/work/docker/hive/hive-1.2.2
export PATH=$PATH:$HIVE_HOME/bin

使环境变量生效

source /etc/profile

2.4,运行

2.4.1,准备

必须添加hadoop在环境变量中

2.4.2,修改配置

进入hive安装目录的conf目录下,将配置模板复制一份,命名为hive-site.xml

[root@master2 conf]# cp hive-default.xml.template hive-site.xml

修改配置,主要分为三个方面,

1),metastore对应的数据库配置,包括URL,用户名,密码,JDBC驱动

2),数据存储目录

3),相关日志文件目录

根据自己的情况,修改相应的配置,比如mysql在172.16.0.5:3306,hdfs在172.16.0.2:9000

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://172.16.0.5:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
 <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>Username to use against metastore database</description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>mysql</value>
    <description>password to use against metastore database</description>
  </property>
 <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>hdfs://172.16.0.2:9000/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>
 <property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/tmp/operation_log/operation_logs</value>
    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
  </property>
 <property>
    <name>hive.querylog.location</name>
    <value>/tmp/querylog/</value>
    <description>Location of Hive run time structured log file</description>
  </property>
<property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description>
  </property>
  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>/tmp/hive</value>
    <description>Local scratch space for Hive jobs</description>
  </property>
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/tmp/${hive.session.id}_resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
  </property>

2.4.3,初始化metastore

连入mysql,创建hive数据库,初始化hive的metastor数据库如下

[root@master2 hive-1.2.2]# schematool -dbType mysql -initSchema
Metastore connection URL:	 jdbc:mysql://172.16.0.5:3306/hive?createDatabaseIfNotExist=true&useSSL=false
Metastore Connection Driver :	 com.mysql.jdbc.Driver
Metastore connection User:	 root
Starting metastore schema initialization to 1.2.0
Initialization script hive-schema-1.2.0.mysql.sql
Initialization script completed
schemaTool completed

2.4.4,运行

执行hive

[root@master2 hive-1.2.2]# hive
Logging initialized using configuration in jar:file:/usr/hive-1.2.2/lib/hive-common-1.2.2.jar!/hive-log4j.properties
hive> 
    > 

创建库

hive> show databases;
OK
default
Time taken: 0.012 seconds, Fetched: 1 row(s)
hive> create database hive1;
OK
Time taken: 0.103 seconds

创建表

hive> use hive1;
OK
Time taken: 0.015 seconds
hive> create table test1(key string, value string);
OK
Time taken: 0.172 seconds
插入数据
hive> insert into test1 values ('weihao','27'),('yangtian','26');

查询

hive> select * from test1;
OK
weihao	27
yangtian	26
Time taken: 0.042 seconds, Fetched: 2 row(s)

load hdfs数据

创建文件test2

[root@master2 work]# cat test2
1001	weihao	18111111111
1002	zhangsan	18888888888
1003	lisi	17777777777
1004	wangwu	15555555555

上传hdfs

[root@master2 work]# hdfs dfs -copyFromLocal test2 /test2

创建表并加载数据

hive> create table test2(user_id bigint, username string, phone string) row format DELIMITED FIELDS TERMINATED BY '\t';
OK
Time taken: 0.335 seconds
hive> load data inpath 'hdfs://172.16.0.2:9000/test2' overwrite into table hive1.test2;
Loading data to table hive1.test2
Table hive1.test2 stats: [numFiles=1, numRows=0, totalSize=96, rawDataSize=0]
OK
Time taken: 0.443 seconds
hive> select * from hive1.test2;
OK
1001	weihao	18111111111
1002	zhangsan	18888888888
1003	lisi	17777777777
1004	wangwu	15555555555
Time taken: 0.286 seconds, Fetched: 4 row(s)

load本地数据,

load data命令后添加local表示从本地文件系统加载数据,load data可以添加overwrite命令标识是否覆盖源表。

hive> load data local inpath "/data/work/text" overwrite into table hive1.test1;
Loading data to table hive1.test1
Table hive1.test1 stats: [numFiles=1, totalSize=58]
OK
Time taken: 0.167 seconds
hive> select * from test1;
OK
zhangsan	26
lisi	13
wangwu	45
zhaoliu	25
lanal	45
fdsa	34
Time taken: 0.039 seconds, Fetched: 6 row(s)

(完)(^_^)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值