惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
M
MIT News - Artificial intelligence
D
Docker
S
SegmentFault 最新的问题
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
C
Check Point Blog
GbyAI
GbyAI
美团技术团队
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog

热爱生活与梦想

迁移LeanCloud的Waline评论数据到TiDB/Neon 25年江浙地区暑假自驾游之感慨 使用阿里云灵码继续完成构建 SSL 证书管理器 亲手给儿子做的棒棒糖摩天轮六一礼物 使用腾讯云 CodeBuddy 构建 SSL 证书管理器 修复代码块默认高度相关缺陷 HugoNexT4.7.2 新功能和升级提示 改善代码块折叠和选中功能 支持Github风格的警告样式 新增音乐短代码功能支持 给文章添加摘要和过期提示功能 回顾24年的过去总结 修复Mathjax行内显示公式的问题 给Hugo文章增加阅读更多跳转的锚点定位功能 Win10隐匿的VPN设置和L2TP连接常见错误 Go语言中“糟糕”的日期时间格式化设计 DaoCloud道客提供的免费Docker镜像代理服务 感谢万能淘宝让自己吃到喜欢的美食 WSL运行时遇到未知异常错误无法使用 隐藏的换行符导致Base64加密解密失败 MySQL自带客户端直接免密登录操作 Linux系统中删除目录软链接的注意项 Java程序调用外网API时CA问题 如何不关机重启WSL2恢复虚拟服务 在Windows上安装Podman容器平台做虚拟化 记一次无法弹出移动硬盘的记录 为友情链接添加自动检测脚本 重新激活Github的2FA认证 Linux中使用tar压缩命令排除文件 继续小米手环的健康生活之旅
HiveServer2因JDBC版本引起的问题
凡梦星尘 · 2017-10-18 · via 热爱生活与梦想

之前一直都是用HDP来搭建和管理Hadoop环境,在安装完成调试时也未曾出现过棘手的问题,但这次在Centos6x系统上布署好后却是遇到奇怪的问题:

表面上看来Hive服务是正常运行的,进程运行正常,页面UI也正常,日志也没错误输出。简单的建表的语句都能执行,可偏偏在导入本地/HDFS数据时,便就抛出异常啦。错误的堆栈信息如下:

1
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1 

另外一个问题在使用Ambari提供的HiveView UI进行HDFS数据导入提示文件不存在,错误信息如下:

1
org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException Line 1:17 Invalid path ''/tmp/xxx/xxxxx.csv'': No files matching path hdfs:/...

简单描述下所使用的环境:

Hive - 1.2.1000

MySQL - 5.6.17

MySQL JDBC - 5.1.17

问题一

从报错的信息可以明显知道是语法错误的问题,不过麻烦的是它没有打印出有问题的SQL语句,通过google找到了遇到相同问题文章,其中指出这是MySQL JDBC驱动5.1.17版本以下的BUG,只需要更新JDBC驱动的版本即可。那么似乎问题变得简单啦,找到新的JDBC驱动文件,执行如下操作:

  • 拷贝驱动文件
1
2
3
4
5
6
  # 拷贝到Amabri Server的资源目录
  mv mysql-connector-java-5.1.44.jar /var/lib/ambari-server/resources/mysql-connector-java-5.1.44.jar
  ln -s -f /var/lib/ambari-server/resources/mysql-connector-java-5.1.44.jar /var/lib/ambari-server/resources/mysql-connector-java.jar
  # 拷贝到share目录
  mv mysql-connector-java-5.1.44.jar /usr/share/java/mysql-connector-java-5.1.44.jar
  ln -s -f /usr/share/java/mysql-connector-java-5.1.44.jar /usr/share/java/mysql-connector-java.jar
  • 重新设置Ambari驱动引用
1
  ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
  • 删除Ambari Agent上面的旧的驱动,并重启
1
2
3
4
  # 注意做好备份和删除的路径
  rm -rf /var/lib/ambari-agent/tmp/mysql-* 
  # 重启服务
  ambari-agent restart
  • 在Ambari UI上重启Hive组件服务

理论上有这些操作便可解决问题了,可在运行数据导入后仍是出现同样的问题,说明上面的文件更新操作没有成功,切换到Hive Master机器上找到lib目录下的驱动文件,解压后发现版本确实没有变化,那么只能手动强制替换了,把Hive Master,Slave机器上的驱动全替换成最新版本,然后再次重启Hive组件服务,接着就出现个新问题。

问题二

单纯的从上述的日志无法确定问题的本身,因为可以确切的确定文件是存在于HDFS之上的。所以还是切换到Hive服务日志上面,找到下面的一段日志:

1
2
3
4
ERROR [HiveServer2-Background-Pool: Thread-4456]: hdfs.KeyProviderCache (KeyProviderCache.java:createKeyProviderURI(87)) - Could not find uri with key [dfs.encryption.key.provider.uri] to create a keyProvider !!
ERROR [HiveServer2-Background-Pool: Thread-4456]: metadata.Hive (Hive.java:copyFiles(2853)) - Failed to move: org.apache.hadoop.security.AccessControlException: Permission denied. user=admin is not the owner of inode=xxxxx.csv
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkOwner(FSPermissionChecker.java:250)
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:227)

从这段日志明显的看出是用户权限的问题,不过这边有点不解,为何Ambari Hive View不直接使用超级用户进行操作,现在只能是强行的更改文件的所属者,命令如下:

1
hdfs dfs -chown hdfs:hadoop /tmp/XXX/XXX.CSV

至此所有问题都修复完成,重新执行导入操作,一切运行正常,数据成功导入。

参考引用: