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生效

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值