当我运行配置单元选择查询时连接被拒绝

时间:2014-11-05 19:24:42

标签: hadoop hive

我在运行配置单元选择查询时遇到问题。 我在hive中创建了DB(mydb),只要我在mydb表上运行查询,它就会给我以下错误。

Failed with exception java.io.IOException:java.net.ConnectException: Call From oodles-   Latitude-3540/127.0.1.1 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

hadoop的core-site.xml文件的配置如下所示

<configuration>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/app/hadoop/tmp</value>
  <description>A base for other temporary directories.</description>
</property>
<property>
  <name>fs.default.name</name>
  <value>hdfs://192.168.0.114:9000</value>
  <description>The name of the default file system. A URI whose
  scheme and authority determine the FileSystem implementation.
  </description>
</property>
</configuration>

我的mapred-site.xml.template文件的配置是

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>192.168.0.114:8021</value>
        <description>The host and port that the MapReduce job tracker runsat.</description>
    </property>
</configuration>

如果我将文件中的主机名从192.168.0.114更改为localhost,则hive查询工作正常但不能使用192.168.0.114

为什么hive始终指向localhost:9000,我们无法将其更改为指向我的首选位置(192.168.0.114:9000)? 如何修复配置单元选择查询以显示上面配置的hadoop配置文件的结果? 希望各位朋友清楚地提出我的问题!

2 个答案:

答案 0 :(得分:4)

我发现导致此错误的问题

Failed with exception java.io.IOException:java.net.ConnectException: Call From oodles-   Latitude-3540/127.0.1.1 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

默认情况下,hive根据您的namenode配置创建表,即

hdfs://localhost:9000/user/hive/warehouse.

稍后如果更改namenode的配置,即将fs.default.name属性更改为

hdfs://hostname:9000 

在core-site.xml中也在hive-site.xml中并尝试通过执行select查询来访问表,这意味着您正在尝试在以前的位置搜索,即hdfs:// localhost:9000 / user / hive / warehouse to你的namenode没有连接。目前,您的namenode已连接到hdfs:// hostname:9000,这就是它为您提供的原因

Call From oodles-Latitude-3540/127.0.1.1 to localhost:9000 failed on connection exception

在我的情况下,我改变了 hive-site.xml 文件,就像这样

<configuration>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/new/user/hive/warehouse</value>
  <description>location of default database for the warehouse</description>
</property>
<property>
  <name>hadoop.embedded.local.mode</name>
  <value>false</value>
</property>
<property>
  <name>fs.default.name</name>
  <value>hdfs://hostname:9000</value>
</property>
<property>
  <name>mapred.job.tracker</name>
  <value>hostname:8021</value>
</property>
</configuration>

现在,当hive创建表时,它将从此处选择fs.default.name的值。 (主机名是我在主机文件中提到的 / etc / hosts ,如下所示)

127.0.0.1    localhost
127.0.1.1    oodles-Latitude-3540
192.168.0.113   hostname

我的 core-site.xml 文件

<configuration>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/app/hadoop/tmp</value>
  <description>A base for other temporary directories.</description>
</property>
<property>
  <name>fs.default.name</name>
  <value>hdfs://hostname:9000</value>
  <description>The name of the default file system. A URI whose
  scheme and authority determine the FileSystem implementation.
  </description>
</property>
</configuration>

我的 Mapred-site.xml 文件

<configuration>
<property
    <name>mapred.job.tracker</name>
    <value>hostname:8021</value>
</property>
</configuration>

现在,如果您的表位置与您的名称节点相同,即

fs.default.name = hdfs://hostname:9000

那么它不会给你任何错误。

您可以通过执行此查询来检查表格的位置 - &gt;

show create table <table name>

任何查询。随意询问!

答案 1 :(得分:0)

由于它与localhost一起工作正常。我建议在/ etc / hosts文件中添加你的IP地址。定义所有群集节点的DNS名称及其IP。

希望这有帮助。

- 更新 -

示例主机映射:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: 1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.7.192.56主机名