欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Eclipse中运行Sqoop诡异问题解决

程序员文章站 2022-04-29 13:51:13
...

本博客属原创文章,转载请注明出处:http://guoyunsky.iteye.com/blog/1392535

 欢迎加入Hadoop超级群: 180941958   

       

      今天下午碰到了一个诡异的Sqoop问题,一开始认为是奇迹,后来在牛人的协助下才终于找出原因.这里记录下.

      我这里通过Sqoop从Mysql中导数据到HDFS,再从HDFS中读取这些数据.我们知道Sqoop会通过SQL语句先获取表结构,然后生成相应的Java类.后来我更改了SQL语句,如之前SELECT AGE,NAME FROM USER;AGE是数值型,NAME是VARCHAR型.后来更改了表结构或者临时SQL转换将AGE换成了VARCHAR.

       正常情况下,由于AGE类型已经更改,那么对应Java类也会随着更改.但在Eclipse环境中发生以下不可思议:

       Sqoop可以正常获取数据,生成相应的Java class,并且写入到HDFS中.但是在Eclipse中从HDFS中读取这些数据,却报错.报错主要是AGE是STRING,无法转换成Number.如此看来是沿用了老的Java Class,也就是更改SQL以前Sqoop生成的Java Class.

       有些不可思议,Sqoop明明会根据SQL重新生成对应的Java Class.看它生成的Java Class,所对应的AGE类型也确实正确.但是什么原因呢?

       在牛人的帮助下才知道原因.由于Eclipse中从HDFS中读取刚导入的数据,需要将它生成的Java Class加载进来.而之前生成的Java Class已经被编译成class放在workspace/yourProject/bin目录下.对于Eclipse来说,首先是加载自己的Class,虽然这里Sqoop生成的Java Class才是正宗.所以Eclipse一直用以前的Java Class去解析数据,导致类型不匹配.

       如果是使用Sqoop命令,或者不在Eclipse环境里执行或许就不会发生这种问题.

       折腾了一下午,也明白了这么一回事.

       

 更多技术文章、感悟、分享、勾搭,请用微信扫描:

Eclipse中运行Sqoop诡异问题解决
            
    
    博客分类: HadoopSqoop