本帖最后由 pig2 于 2015-3-8 23:38 编辑
问题导读:
执行select * from table出现
Failed with exception java.io.IOException:java.net.ConnectException:
错误,可能的原因是什么?
配置说明:
- Hadoop1.2.1中fs.default.name=hdfs://localhost:9000
- Hadoop2.2.0中fs.default.name=hdfs://localhost:8020
复制代码
所以Hive在Hadoop1.2.1中存放数据的绝对路径为:
- hdfs://localhost:9000/home/wyp/cloud/hive/warehouse/cite
复制代码
其中、home/wyp/cloud/hive/warehouse/是配置文件设置的,如下:
- <property>
- <name>hive.metastore.warehouse.dir</name>
- <value>/home/wyp/cloud/hive/warehouse</value>
- <description>location of default database for the warehouse</description>
- </property>
复制代码
cite是表的名称。
如果在Hadoop1.2.1平台导入的数据,而在Hadoop2.2.0平台上面查询数据(注意,需要在Hadoop2.2.0平台上同样的位置上存在数据,这样才能查询到结构)将会出现下面的错误:
- hive> select * from cite;
- OK
- Failed with exception java.io.IOException:java.net.ConnectException:
- Call From wyp/192.168.142.138 to localhost:9000 failed on connection
- exception: java.net.ConnectException: Connection refused;
- For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
- Time taken: 4.519 seconds
复制代码
从查询的结果看出,返回的是OK,但是显示数据出现了java.net.ConnectException异常,这就是上面所说的问题,因为你数据的路径为
hdfs://localhost:9000/home/wyp/cloud/hive/warehouse/cite
但是你在Hadoop2.2.0平台上查询,从最上面的配置我们可以看出,Hadoop2.2.0平台的hdfs的连接端口为8020,当然不能连上localhost:9000,我们需要连上8020端口。 解决方法: (1)、修改Hadoop2.2.0的fs.default.name=hdfs://localhost:9000,然后重起Hadoop服务。
(2)、进入Mysql数据库,找到SDS表格:
Hive 连接HDFS
从上面的查询结果我们可以看出,SD_ID为1对应的表格数据存放在hdfs://localhost:9000/home/wyp/cloud/hive/warehouse/cite路径,我需要修改端口号9000为8020。如下:
Hive 连接HDFS
然后再查询数据:
- hive> select * from cite;
- OK
- 1 21
- 2 5
- 6 5
- 3 6
- Time taken: 0.509 seconds, Fetched: 4 row(s)
复制代码
终于见到熟悉的数据了!推荐使用方法一。
|