您现在的位置是:首页 >学无止境 >一文了解数据仓库Hive网站首页学无止境

一文了解数据仓库Hive

更容易记住我 2026-05-21 00:01:05
简介一文了解数据仓库Hive

一. 介绍

  • Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于Hadoop文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用类SQL语言对这些数据进行自动化管理和处理。我们可以把Hive中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在HDFS 中的。Hive经过对语句进行解析和转换,最终生成一系列基于Hadoop 的MapReduce任务,通过执行这些任务完成数据处理。
  • 注意:hive以来Hadoop,需要先安装hadoop

二、Hive 组件介绍

  • 服务端组件
    • Driver组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架
    • Metastore组件是元数据服务组件,它存储Hive的元数据,Hive的元数据存储在关系数据库里,支持的关系数据库有derby和mysql。元数据对于Hive 十分重要,因此Hive支持把Metastore服务独立出来,安装到远程的服务器集群里,从而解耦Hive服务和Metastore服务,保证Hive运行的健壮性
    • Thrift Server是Facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,能让不同的编程语言调用Hive的接口
  • 客户端组件
    • CLI即command lineinterface,命令行接口
    • JDBC/ODBC 是Thrift的客户端
    • Web GUI是Hive客户端提供的一种通过网页的方式访问Hive的服务。这个接口对应Hive的hwi组件,使用前要启动hwi服务

三、Hive内置服务

  • CLI:这是Hive的命令行界面,用的比较多。这是默认的服务,直接可以在命令行里面使用
  • hiveserver2:这个可以让Hive以提供Trift服务的服务器形式来运行,可以允许许多不同语言编写的客户端进行通信。可以通过设置HIVE_PORT环境变量来设置服务器所监听的端口号,在默认的情况下,端口为 10000
  • hwi:它是Hive的Web接口,是hive cli的一个web替换方案
  • jar:与Hadoop jar等价的Hive接口,这是运行类路径中同时包含Hadoop和Hive类的Java应用程序的简便方式
  • Metastore:用于连接元数据库(如mysql)。在默认情况下,Metastore和Hive服务运行在同一个进程中,端口号为9083。使用这个服务,可以让Metastore作为一个单独的进程运行,我们可以通过METASTORE_PORT来指定监听的端口号

四、Metastore部署

  • 内嵌模式:使用内部Derby数据库存储
  • 本地模式:使用本机mysql存储
    • 修改hive-site.xml文件,配置元数据的链接信息
  • 外部模式:使用其他服务器mysql存储
    • 修改hive-site.xml文件,配置元数据的链接信息

五、部署安装

  • 安装mysql
  • 下载hive安装包 https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
  • 安装 /opt/hive
  • 进入hive的配置目录 cd /opt/hive
  • 配置环境变量
export  HIVE_HOME=/opt/hive/hive
export  PATH=$PATH:$HIVE_HOME/bin
  • 创建hdfs数据存储路径并修改权限
hdfs dfs -mkdir -p /hive/warehouse
hdfs dfs -chmod g+w /tmp #修改文件权限
hdfs dfs -chmod g+w /hive/warehouse #修改文件权限
  • 修改hive-site.xml文件
<configuration>
  <!-- 指定HDFS中的hive仓库地址 -->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/hive/warehouse</value>
  </property>
  <!-- 该属性为空表示嵌入模式或本地模式,否则为远程模式 -->
  <property>
    <name>hive.metastore.uris</name>
   <!--  <value>thrift://localhost:9083</value> -->
	<value></value>
  </property>
  <!-- 指定mysql的连接 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hivemeta?createDatabaseIfNotExist=true</value>
  </property>
  <!-- 指定驱动类 -->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jc.jdbc.Driver</value>
  </property>
  <!-- 指定连接hive用户名 -->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
  </property>
  <!-- 指定连接hive密码 -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
  </property>
  <!-- hive查询时输出列名 -->
<property>
	<name>hive.cli.print.header</name>
	<value>true</value>
</property>
<!-- 显示当前数据库名 -->
<property>
	<name>hive.cli.print.current.db</name>
	<value>false</value>
</property>
</configuration>
  • 修改hive-env.sh文件
xport HADOOP_HOME = /opt/hadoop
export HIVE_CONF_DIR= /opt/hive/config
export HCAT_HOME = /opt/hive/HCatalog
  • 修改hive-log4j.properties指定日志输出路径
    • hive.root.logger=info,DRFA
    • property.hive.log.dir=/opt/hive/hive_logs
  • 下载mysql链接驱动jar包:https://repo1.maven.org/maven2/mysql/mysql-connector-java/ 放到hive的lib包下
  • 初始化元数据:schematool -initSchema -dbType mysql
  • 开启元数据:nohup hive --service metastore &
  • 启动hiveserver2 nohup hive --service hiveserver2 2>&1 &
  • 注意!如果 hiveserver2 不启动,jdbc将无法正常连接

六、基本使用

  • 使用Hive Cli: hive
  • 使用Beeline: beeline
    • beeline依赖hiveserver2提供的thirft服务,默认端口为10000

七、问题集合

  • order by某个字段的时候,需要使用别名 :select name as useName from User ordeer by useName ;
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。