hive配置
#添加环境变量
sudo vim /etc/profile.d/my_env.sh
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
#刷新
source /etc/profile.d/my_env.sh
#删除或将lib目录下的log4j-slf4j-impl-2.10.0.jar改名,其与hadoop下的同名包冲突
mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak
#我将hive的元数据信息保存到mysql中,故将mysql的jdbc驱动拷贝到lib目录下
cp /opt/software/mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/
#在conf目录下配置hive-site.xml
vim hive-site.xml
<!--告诉hive将元数据存储在哪(hadoop102上的mysql),存储在哪一个数据库(metastore),字符集的设置-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
</property>
<!--指定mysql驱动为jdbc-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--mysql的用户名和密码-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
</property>
<!--hive数据存储的位置(hdfs上的一个目录)-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!--是否对 Metastore DB的模式进行校验,false时不进行模式验证,Hive可以与Metastore DB进行连接,并且可以读取和写入元数据而不需要确保Metastore DB的模式与Hive的预期模式一致-->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!--hiveserver2的端口和地址-->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop102</value>
</property>
<!--用于控制是否对 Metastore DB 的事件通知 API 进行授权,false:任何人都可以无限制地访问,true:只有经过身份验证和授权的用户或应用程序才能访问 Metastore DB 的事件通知 API-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!--当我们启动一个hive客户端中,打印出头信息和当前数据库名称,帮助我们更直观的查看信息-->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
#初始化元数据
#登录mysql
mysql -uroot -p000000
#创建元数据库
create database metastore;
quit;
#初始化元数据库(建一些元数据的结构表...)
schematool -initSchema -dbType mysql -verbose
#修改元数据库字符集,hive的元数据库默认为latin,防止中文乱码,修改为utf8
mysql -uroot -p000000
use metastore;
#字段注释
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
#表注释
alter table TABLE_PARAMS modify column PARAM_VALUE mediumtext character set utf8;
quit;
#大功告成,启动hive,启动前要已运行hdfs
bin/hive
#显示hivesessionid,并以>为客户端开头显示,默认在default库
show databases;
结果出现default库,则表示成功
如果你在使用DataGrip连接hive后,建立了一些json表(增量表),点击表名发现其不能和全量表一样正常显示表内字段(列),可以进行如下修改
cd /opt/module/hive/conf
vim hive-site.xml
<property>
<name>metastore.storage.schema.reader.impl</name>
<value>org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader</value>
</property>
上述语句指定了Hive表的序列化器和反序列化器SERDE(serialization 和 deserialization的合并缩写),用于解析 JSON 格式的文件。上述 SERDE 是由第三方提供的,在hive-site.xml中添加如下配置即可解决
重启hiveserver2生效
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现