Hive的常用配置及错误处理

2018-09-29  本文已影响0人  yepeng05

常用配置记录

安装指定版本的MySQL

在Hive与MySQL的集成过程中,如果想通过yum源来安装MySQL,在某些时候我们希望能够安装指定版本的MySQL,比如 MySQL 5.7

# vim  /etc/yum.repos.d/mysql-community.repo
# 参考地址 https://dev.mysql.com/downloads/repo/yum/
# Enable to use MySQL 5.7
# 对应如果 CentOS 7就将baseurl中6改为7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

然后执行

yum install mysql-community-server

Hive建表时comment使用中文

  1. 首先确保在hive-site.xml中配置 jdbc url 时添加了 characterEncoding=utf-8 选项
  2. 其次的明白的是 comment 出现的位置
1. 表字段层面上的comment,涉及的表为 COLUMNS_V2 表下的 COMMENT 字段(可以将字段长度适当调大)
2. 表层面上的comment,涉及的表为 TABLE_PARAMS 表下的 PARAM_VALUE 字段
3. 分区层面上的comment,涉及的表为 PARTITION_KEYS 表下的 PKEY_COMMENT 字段

对于上述涉及的表的字段,可以通过IDE(比如Navicat)将这些字段的字符集由默认的latin1 改为 utf8,当然这些操作也可以通过SQL语句来执行

alter table COLUMNS_V2 modify column COMMENT varchar(4000) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;

显示当前数据库及表字段

# hive-site.xml 添加以下参数
<property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
</property>

<property> 
    <name>hive.cli.print.header</name>
    <value>true</value>
</property>

常见错误处理

Hive启动时找不到jar包的错误警告

Hive在spark2.0.0启动时无法访问spark-assembly-.jar,这是由于Spark升级到 Spark 2 以后,原有lib目录下的大JAR包被分散成多个小JAR包,原来的spark-assembly-.jar已经不存在,所以hive没有办法找到这个JAR包
解决方案如下

vim $HIVE_HOME/bin/hive
sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar` 改为 sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`

使用客户端连接MySQL是报错

连接MySQL时,提示Table ‘performance_schema.session_variables’ doesn’t exist

# 第一步
mysql_upgrade -u root -p --force
# 重启服务
systemctl restart mysqld.service

配置Hive Shell显示当前数据库

配置本地图形客户端连接Hive

配置Python操作Hive(类数据库方式)

https://github.com/dropbox/PyHive
安装pyhive

pip install pyhive[hive]

DB-API方式的用法

# 同步的方式操作Hive
from pyhive import hive
cursor = presto.connect('localhost').cursor()
cursor.execute('SELECT * FROM my_awesome_data LIMIT 10')
print cursor.fetchone()
print cursor.fetchall()

当然借助于pyspark操作Hive也是可以的

from pyspark.sql import HiveContext
from pyspark import SparkConf, SparkContext

sc = SparkContext()
hiveContext = HiveContext(sc)

sql = "select * from table limit 3"
data = hiveContext.sql(sql_all)
data.show()

sc.stop()

hive jdbc 请参考
https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC

上一篇下一篇

猜你喜欢

热点阅读