您现在的位置是:首页 >学无止境 >一文了解数据仓库Hive网站首页学无止境
一文了解数据仓库Hive
简介一文了解数据仓库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 ;
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
U8W/U8W-Mini使用与常见问题解决
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结