(1)这个报错的原因很简单,就是连接不上hdfs的localhost 9000(NN),那么需要分析问题出在哪了,
spark-sql,我这个是操做hive的,所以我们看看hive的配置文件有问题吗,一看该有的都没有,没问题,是不是没拷贝到spark conf下面呢,,看了拷贝了的。
(2)那么spark 基本没啥问题了,再想那还用的上hdfs呢?Hive的数据就是存储在hdfs之上,所以我们需要看看hdfs能用吗,
一看都能用没有问题,我们再看看core-site.xml文件里面有问题吗,这个时候我们在看看slaves,这个是datanobe的节点ip,进去一看是localhost,伪分布式,改成ip就好啊,以为是这出了问题,改过之后,再一次测试,还是有问题!
(3)上面证明了和hdfs没问题,在想想和hive还有关系的不就是mysql吗?
因为我们的元数据(就是表的各类信息)在这mysql中,于是我们想想,它那能用到hdfs localhost 9000呢?
这个时候就得回到hive的编译安装部署了,编译的时候呢,hive存储数据的配置信息呢(也就是HDFS的ip+端口号),配置信息属于元数据是存在mysql之上的!去mysql里面找一找,找个一张叫dbs的表,里面就是hdfs的配置信息,但是存的ip是localhost!而我的hdfs现在的是ip号!
(4)原来我是用localhost编译的,后来改成了IP,但是元数据存的内容就是你当初编译的,所以出了问题。
将这个表的数据修改成IP就可以了! 这算个坑。
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.137.251:3306/g3?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>