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&amp;useUnicode=true&amp;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生效

posted @   sunshin1  阅读(51)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示