我在运行配置单元选择查询时遇到问题。我已经在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,那么配置单元查询可以正常工作,但不能使用192.168.0.114
为什么hive总是指向localhost:9000,我们不能把它改为指向我喜欢的位置(192.168.0.114:9000)吗?我如何修复hive-select查询,以显示上面配置的hadoop-conf文件的结果?希望你的朋友们明白我的问题!
我发现了导致此错误的问题
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
默认情况下,配置单元根据名称节点(即)的配置创建表
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您的namenode未连接到。当前您的namenode已连接到hdfs://hostname:9000这就是它给你的原因
Call From oodles-Latitude-3540/127.0.1.1 to localhost:9000 failed on connection exception
在我的情况下,我更改了配置单元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的值。(主机名是我的ip,我在/etc/hosts中的hosts文件中提到过,如下所示)
127.0.0.1 localhost
127.0.1.1 oodles-Latitude-3540
192.168.0.113 hostname
我的核心站点.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>
我的映射站点.xml文件
<configuration>
<property
<name>mapred.job.tracker</name>
<value>hostname:8021</value>
</property>
</configuration>
现在,如果您的表位置与名称节点相同,即
fs.default.name = hdfs://hostname:9000
那么它不会给你任何错误。
您可以通过执行此查询-->来检查表的位置
show create table <table name>
任何查询。请随意提问!
因为它可以与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主机名