hive编程,Hive os

Hive教程1、Hive个人资料1.1、什么是Hive? Hive基于Hadoop文件系统上的数据仓库体系结构。 数据仓库管理提供了许多功能,包括数据提取、转换和加载ETL )工具、数据存储管理以及大型数据集的查询和分析功能。 Hive还定义了类SQL的语言。 – Hive QL. Hive QL允许用户执行与SQL类似的操作,将结构化数据文件映射到数据库表并提供简单的SQL查询功能。 它还允许开发人员轻松使用Mapper和Reducer操作,将SQL语句转换为MapReduce任务并执行。 这对MapReduce框架是有力的支持。

1.2、Hive架构Hive是Hadoop的重要子项目,通过下图可以大致了解Hadoop中Hive的位置和关系。

上图显示了Hadoop EcoSystem中每层的系统。 Hive本身的体系结构如下。

从图中可以看出,Hive的基本结构如下。

用户界面如CLI、JDBC/ODBC和WebUI元数据存储)通常是关系数据库,如MySQL、Derby解释器、编译器、优化程序和执行器Hadoop 使用MapReduce计算1.3、Hive与关系数据库的区别Hive在许多方面与传统关系数据库相似,但基础对HDFS和MapReduce的依赖,其体系结构与传统关系数据库不同

可以列举几个简单的区别。 Hive和关系数据库存储文件的系统不同。 Hive使用Hadoop分布式HDFSHadoop文件系统),而关系数据库是服务器的本地文件系统。 Hive使用的计算模型是MapReduce,关系数据库是自己设计的计算模型; 关系数据库都是为实时查询的业务而设计的,而Hive是为大量数据进行数据挖掘而设计的,实时性差。 由于实时性的差异,Hive的APP场景和关系数据库有很大的不同,Hive可以很容易地扩展自己的存储和计算能力。 它继承了Hadoop,但关系数据库在这方面差很多。 1.4、将Hive应用场景Hive与传统的关系数据库进行比较后,可以很容易地了解到实际上Hive适用于哪个场景。

Hive构建在基于静态批处理的Hadoop之上。 Hadoop通常延迟较大,提交和调度作业需要大量开销。 因此,Hive不适合在大型数据集上实现低延迟、快速的查询。

Hive不适用于需要低延迟的APP应用程序,如在线事务处理OLTP )。 Hive查询操作流程严格遵循Hadoop MapReduce的作业执行模型,Hive通过解释器将用户的HiveQL语句转换为MapReduce作业并提交给Hadoop集群,Hadoop是作业执行流程Hive不是为在线事务设计的,不提供实时查询和行级数据更新操作。

Hive的最佳使用情形是大型数据集的批处理作业,如网络日志分析。

1.5、Hive的数据存储Hive的存储是建立在Hadoop文件系统之上的。 Hive本身没有专用的数据存储格式,也不能对数据编制索引,因此用户可以非常自由地组织Hive中的表。 创建表时,只需告诉Hive数据中的列分隔符就可以分析数据。

Hive有四种类型的数据模型:表、外部表、分区和存储区。

Hive中的表和数据库中的表在概念上没有本质区别,Hive中的每个表都有相应的存储目录。 外部表指向已存在于HDFS中的数据,也可以创建分区。 Hive中的每个分区都对应于数据库中相应分区列的索引,但分区的组织方式与传统的关系数据库不同。 桶在指定列进行散列计算时,根据散列值截取数据,使每个桶对应一个文件。

1.6、Hive的元数据存储Hive的元数据可能面临不断的更新、修改、读取操作,明显不适合在Hadoop文件系统中存储。 目前,Hive将元数据保存在RDBMS中。 例如,保存在MySQL、Derby中。 上面介绍的Hive架构图也可以看出这一点。 二、Hive环境介绍与Hadoop相似,Hive也有三种运行模式。 1 .嵌入模式

将元数据存储在本地嵌入的Derby数据库中是使用Hive的最简单方法。 但是,这种方法的缺点也很明显,因为嵌入式Derby数据库一次只能访问一个数据文件。 这意味着不支持多会话连接。

2 .本地模式

此模式将元数据存储在本地独立数据库通常为MySQL )中,并支持多会话和多用户连接。

3 .远程模式

此模式适用于Hive客户端较多的情况。 将MySQL数据转换为

库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。

2.1、安装准备

1、下载安装 hive
首先打开终端切换到 hadoop 用户下:

su -l hadoop #密码为hadoop

Hive 是基于 Hadoop 文件系统之上的数据仓库。因此,安装 Hive 之前必须确保 Hadoop 已经成功安装。本次我们使用 Hive 1.2.1 版本。Hive 1.2.1 可以在 Hadoop V2.7.x 以上环境中工作。

下载 apache-hive-1.2.1-xqdxrz.tar.gz 后,对其进行解压: tar zxvf apache-hive-1.2.1-xqdxrz.tar.gz
下载地址:hive-1.2.1

2、配置系统环境变量

修改/etc/profile 文件和.bashrc文件sudo vim /etc/profile # Hive environmentexport HIVE_HOME=/opt/apache-hive-1.2.1-xqdxrzexport PATH=$PATH:$HIVE_HOME/xqdxrz

3、hadoop 集群启动

先进入的/opt/hadoop-2.7.3/sxqdxrz 目录下,再启动 hdfs$ cd /opt/hadoop-2.7.3/sxqdxrz$ hdfs namenode -format #namenode初始化$ ./start-all.sh # 启动hadoop 验证 hdfs 是否启动成功
1、输入jps查看相关进程是否存在
2、输入hadoop dfs -fs /确定能否链接成功
2.2、本地模式

  现在我们替换默认的 Derby 数据库为 MySQL 数据库。

2.2.1、下载安装 MySQL

mysql安装教程:地址

创建 hive 数据库:

mysql -u root -p #没有密码直接回车即可create database hive; #创建hive数据库grant all on hive.* to ‘hive’@’localhost’ identified by ‘hive’; #创建用户hive

虽然 MySQL 已经默认安装,但我们还需要下载一个 MySQL 的 JDBC 驱动包。这里使用的是 mysql-connector-java-5.1.32-xqdxrz.jar,助攻文件需要复制到 $HIVE_HOME/lib 目录下面。

这里我们提供了 mysql-connector-java-5.1.32.jar 的下载链接,需要的同学可以自行下载:

wget https://labfile.oss.aliyuncs.com/courses/38/mysql-connector-java-5.1.32.rar 2.2.2、修改 hive-site.xml 配置文件

最后,依然是修改 $HIVE_HOME/conf 下的 hive-site.xml 文件,把默认的 Derby 修改为 MySQL :

<?xml version=”1.0″?><?xml-stylesheet type=”text/xsl” rel=”external nofollow” href=”configuration.xsl”?><configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> <!– 这里自己搓自己的mysql的ip地址 –> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> <!– 这里搓自己的mysql账号和密码 –> </property></configuration> 2.2.3、启动 Hive

初始化 hive 元数据库:

schematool -dbType mysql -initSchema

启动 Hive 的方式如下:

cd /opt/apache-hive-1.2.1-xqdxrz/xqdxrzhive

2.3、内嵌模式 2.3.1、修改hive-site.xml

先切换到对应的目录下操作:

cd /opt/apache-hive-1.2.1-xqdxrz/conf/ls

$ sudo cp hive-default.xml.template hive-site.xml

hive-site.xml 的主要配置有以下,不需要修改:

hive.metastore.warehouse.dir 该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。

hive.exec.scratchdir 该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。

同时我们还要修改 Hive 目录下 /conf/hive-env.sh 文件(请根据自己的实际路径修改),该文件默认也不存在,同样是拷贝它的模版来修改

cat hive-env.sh

2.3.2、创建必要目录

前面我们看到 hive-site.xml 文件中有两个重要的路径,切换到 hadoop 用户下查看 HDFS (需要先启动 Hadoop)是否有这些路径:

$ hadoop dfs -ls /

没有发现上面提到的路径,因此我们需要自己新建这些目录,并且给它们赋予用户写(W)权限。

$ hadoop dfs -mkdir /user$ hadoop dfs -mkdir /user/hive$ hadoop dfs -mkdir /user/hive/warehouse$ hadoop dfs -mkdir /tmp$ hadoop dfs -mkdir /tmp/hive$ hadoop dfs -chmod 777 /user/hive/warehouse$ hadoop dfs -chmod 777 /tmp/hive

检查是否新建成功 hadoop dfs -ls / 以及 hadoop dfs -ls /user/hive/ :

2.3.3、修改 io.tmpdir 路径

同时,要修改 hive-site.xml 中所有包含 ${system:java.io.tmpdir} 字段的 value ,可以自己新建一个目录来替换它,例如 /home/hadoop/hive/iotmp 。(以下是一个修改示例,其他的同理)

# 将<value>${system:java.io.tmpdir}/${system:user.name}</value># 改成<value>/home/hadoop/hive/iotmp</value>

并且需要在/home/hadoop/下建立相应的目录

$ mkdir /home/hadoop/hive

如果不修改这个目录,你很可能会出现如下错误:

vim 下 / 表示搜索,后面跟你的关键词,比如搜索 hello,则为 /hello , 再回车即可), 同样注意修改写权限

2.3.4、运行 Hive

前面我们已经提到过,内嵌模式使用默认配置和 Derby 数据库,所以无需其它特别修改直接运行 hive(确保 Hadoop 已经先启动)。完整步骤如下:

cd ..cd xqdxrz/schematool -dbType derby -initSchema # 初始化hive的元数据库hive #启动hive 三、Hive基本操作 hive基本操作

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注