我创建了一个 Cloudera 集群并从 Oracle DB 导入了一些示例测试文件。但过了一段时间我不得不更改节点的主机名。我按照 cloudera 网站中提到的指南进行操作,一切正常。但是当我尝试访问我之前创建的表(使用 hive 和 impala)时,出现以下错误: 获取结果时遇到以下错误:
java.io.IOException: java.lang.IllegalArgumentException: java.net.UnknownHostException: [旧主机名]
然后,我在同一数据库下创建了另一个表(使用 Hue>Metastore 表),并且可以毫无问题地访问在新主机名下创建的这些新表。
有人可以解释一下如何在不恢复主机名的情况下访问我的旧表。我可以访问 Metastore 数据库并将表指针更改为新主机名吗?
最佳答案
没关系,我找到了答案。
您可以通过执行来确认 hive/impala 正在寻找错误的位置
describe formatted [tablename];
O/P
14 Location: hdfs://[oldhostname]:8020/user/hive/warehouse/sample_07 NULL
然后您可以使用以下命令更改“位置”属性:
ALTER TABLE sample_07 SET LOCATION "hdfs://[newhostname]:8020/user/hive/warehouse/sample_07";
ps-sample_07 是我关注的表
有时这不起作用!!
上述解决方法适用于默认情况下可用的示例表,但我有另一个表,我从外部数据库 sqooped 到客户元存储数据库,这再次给我带来了与上面类似的错误。
解决方案:
转到已安装 hive 的主机。 暂时将 hive 服务器的旧主机名添加到/etc/hosts(如果没有外部 DNS,新旧主机名应存在于同一主机文件中)
在 hive shell(或 Web 界面)执行“ALTER TABLE ....”
从/etc/hosts 中删除 oldhostname 条目
关于hadoop - Cloudera/Hive - 主机名更改后无法访问表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26990839/