美文网首页
CDH5.7 hive+sqoop踩坑实践

CDH5.7 hive+sqoop踩坑实践

作者: 蚂蚁_8173 | 来源:发表于2019-06-27 12:03 被阅读0次

    为了做一个基于hive的大数据采集平台,最近踩了不少的坑。

    首先是想采用开源的项目代码搭建hadoop+hive+spark+hbase+sqoop平台的,hadoop采用2.7.7,spark用spark-2.3.0-bin-hadoop2.7,hbase用hbase-2.1.0,sqoop比较坑爹,只有1.4.7版本和1.99版本。了解过的人都不会用1.99版本,所以优先选择sqoop-1.4.7.bin-hadoop-2.6.0,。hive先用过apache-hive-3.1.1-bin,后降级到apache-hive-2.3.5-bin还是不行。

    以上任何一个模块单独使用都没有问题。但是引入sqoop以后就坑爹了。首先sqoop多年不见更新,最新的sqoop-1.4.7只能基于hadoop-2.6.0,导致整个框架版本选项失败,实际应用中出现了好多坑,先后降级hive还是搞不定。最后把hive改成hive-1.1.0,结果hadoop版本又过高,实例化错误。坑太多了,就不一一列举了。

    这个版本最后sqoop是没有成功的,但是通过spark读取oracle数据写入hive或者hbase还是可以成功的。

    后期了解到cdh的版本集成比较好,网上的视频课程也采用cdh5.7,因此决定改用cdh5.7重新搭建环境。

    从cdh官网看到,cdh早就知道sqoop有坑,所以一直到最新的(2019年6月18日发布更新)cdh5.16还是采用hadoop2.6+hive1.1+hbase1.2+sqoop1.4.6。

    cdh5.7的环境安装过程没有出现什么意外,依次安装了java1.8,hadoop2.6,hive1.1,hbase1.2,sqoop1.4.6.

    安装截图

    安装完成以后执行sqoop命令,出现了两个坑。

    第一个坑,json包没有,导致报错。知道了是缺少json-java.jar包,但是到处都下载不到jar包,花了半个小时终于在下面 的链接里面找到了靠谱的下载方法。

    附上链接地址:https://www.cnblogs.com/byfboke/p/10000578.html

    报错:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject

    at org.apache.sqoop.util.SqoopJsonUtil.getJsonStringforMap(SqoopJsonUtil.java:43)

    at org.apache.sqoop.SqoopOptions.writeProperties(SqoopOptions.java:785)

    at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.createInternal(HsqldbJobStorage.java:399)

    ......

     原因:sqoop缺少java-json.jar包.

    解决:

    这是因为sqoop缺少java-json.jar包.

    下载java-json.jar包:

    http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm

    把java-json.jar添加到../sqoop/lib目录:

    cp java-json.jar  /sqoop/lib

    第二个坑,htc环境变量配置:

    报错:

    19/06/27 11:04:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 19/06/27 11:04:24 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hive/hcatalog/mapreduce/HCatOutputFormat at org.apache.sqoop.mapreduce.DataDrivenImportJob.getOutputFormatClass(DataDrivenImportJob.java:199) at org.apache.sqoop.mapreduce.ImportJobBase.configureOutputFormat(ImportJobBase.java:94) at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:259) at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:692) at org.apache.sqoop.manager.OracleManager.importTable(OracleManager.java:444) at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:497) at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605) at org.apache.sqoop.Sqoop.run(Sqoop.java:143) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227) at org.apache.sqoop.Sqoop.main(Sqoop.java:236) Caused by: java.lang.ClassNotFoundException: org.apache.hive.hcatalog.mapreduce.HCatOutputFormat at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 13 more

    处理方法:baidu一下很容知道是包引用问题,但是解决方案没有找到靠谱的。几经周转,在stackoverflow上找到一个看上去很靠谱的方法,链接如下。经过尝试,确实很靠谱。

    就是在.bash_profile文件里面新增一个环节变量,把hcatalog配置进去。

    我的配置如下:

    export HCAT_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0/hcatalog

    https://stackoverflow.com/questions/37219921/exception-in-thread-main-java-lang-noclassdeffounderror-org-apache-hive-hcata

    解决方法

    解决了以上两个问题,终于到了见证奇迹的时刻。

    sqoop成功截图

    前前后后,断断续续高了两个月了,终于看到一次成功的了。

    相关文章

      网友评论

          本文标题:CDH5.7 hive+sqoop踩坑实践

          本文链接:https://www.haomeiwen.com/subject/ysvlcctx.html