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使用中文
- 首先确保在hive-site.xml中配置 jdbc url 时添加了 characterEncoding=utf-8 选项
- 其次的明白的是 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