2

我创建了一个 Cloudera 集群并从 oracle DB 导入了一些示例测试文件。但过了一会儿,我不得不更改节点的主机名。我按照 cloudera 网站中提到的指南进行操作,一切正常。但是当我尝试访问我之前创建的表(同时使用 hive 和 impala)时,我收到以下错误:获取结果遇到以下错误:

java.io.IOException:java.lang.IllegalArgumentException:java.net.UnknownHostException:[旧主机名]

然后我在同一个数据库下创建了另一个表(使用 Hue>Metastore 表),我可以毫无问题地访问在新主机名下创建的这些新表。

有人可以解释我如何在不恢复主机名的情况下访问我的旧表。我可以访问 Metastore db 并将表指针更改为新主机名吗?

4

2 回答 2

2

没关系,我找到了答案。

您可以通过执行确认 hive/impala 正在寻找错误的位置

describe formatted [tablename];    

输出/输出

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 是我关心的表

有时这不起作用!

上面的解决方法适用于默认情况下可用的示例表,但我有另一个表,我从外部数据库到自定义元存储数据库,这又给了我一个类似于上面的错误。

解决方案 :

转到安装 hive 的主机。将 hive 服务器的旧主机名临时添加到 /etc/hosts(如果您没有外部 DNS,新旧主机名应该存在于同一个主机文件中)

在 hive shell(或 Web 界面)上执行 'ALTER TABLE ....'

从 /etc/hosts 中删除 oldhostname 条目

于 2014-11-18T10:02:03.813 回答
1

试试这个

hive --service metatool -updateLocation <newfsDefaultFSValue> <old_fsDefaultFSValue>

可以参考https://www-01.ibm.com/support/knowledgecenter/SSPT3X_3.0.0/com.ibm.swg.im.infosphere.biginsights.trb.doc/doc/trb_inst_hive_hostnames.html

于 2015-12-31T20:24:50.973 回答