hadoop cdh版maven依赖解决方案

使用cloudera hadoop开发hadoop程序,官方文档上有两种方法。第一种即把相应jar包拷贝到工程目录中去,另一种即使用maven管理依赖jar包。
直接拷贝

如果直接在构建节点上开发程序的话直接指向jar包目录即可。
默认目录
hadoop:/opt/cloudera/parcels/CDH/lib
CDH文件是指向${CDH.Version}的一个链接
lib下可用的包包含如下:
avro hadoop-httpfs impala sentry
bigtop-tomcat hadoop-kms impala-shell solr
bigtop-utils hadoop-mapreduce kite spark
crunch hadoop-yarn llama sqoop
debug hbase mahout sqoop2
flume-ng hbase-solr oozie whirr
hadoop hive parquet zookeeper
hadoop-0.20-mapreduce hive-hcatalog pig zookeeper-native
hadoop-hdfs hue search
maven 依赖

maven的默认仓库没有CDH包,所以在maven repository 上也搜不到,cloudera自己提供了个仓库供引用。当然你也可以直接输入地址下载jar包,例如https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hadoop/hadoop-common/2.6.0-cdh5.7.0/hadoop-common-2.6.0-cdh5.7.0.jar,你也可以根据仓库表直接下载或者在pom中依赖相应jar包。
1. 构建maven结构
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DgroupId= \
-DartifactId=
group-id 和 project-name 分别是你的组织id和项目名称
2. 使用archetype:generate生成的项目文件中有个pom.xml文件
* pom文件编写 *
默认仓库找不到对应jar包,因此添加仓库:


     
        cloudera-releases
        https://repository.cloudera.com/artifactory/cloudera-repos
       
          true
       

       
         false
       

     

   

允许发布版本,禁止快照版
然后添加版本属性,方便后面依赖引用


     2.6.0-cdh5.7.0
 

 

添加依赖包

   
      org.apache.hadoop
      hadoop-client
      ${cdh.version}
      provided
   

scope 指定打包项目采用provided方式,即不把依赖包打进去。因为最后生成的程序jar包都是要在linux节点运行的,防止与节点自带的classpaths包冲突。
那如果项目中的一下jar包在hadoop运行环境中找不到,那么就需要用一个插件


     
        org.apache.maven.plugins
        maven-shade-plugin
        1.7.1
         
           
               
          ${MainClass}  
        
 
     
 
       

       
         
            package
           
              shade
           

         

       

     

   

 

它可以让用户配置Main-Class的值,然后在打包的时候将值填入/META-INF/MANIFEST.MF文件。关于项目的依赖,它很聪明地将依赖JAR文件全部解压后,再将得到的.class文件连同当前项目的.class文件一起合并到最终的CLI包中,这样,在执行CLI JAR文件的时候,所有需要的类就都在Classpath中了,运行java -jar 命令也不需要添加依赖包,这个插件的说明见这里.

下面一个插件方便生成可在eclipse管理的工具,可以再eclipse中直接导入用maven生成的项目:


      org.apache.maven.plugins
      maven-eclipse-plugin
      2.9
     
       
          ${project.artifactId}
       

       
          eclipse-classes
       

        true
        false
     

   

执行:

mvn -Declipse.workspace=   eclipse:configure-workspace eclipse:eclipse

    1

当然如果eclipse整合了maven的话,可以直接不需要这个插件了,直接新建maven简单项目,然后导入pom.xml文件即可。
pom.xml
Reference

    http://www.cloudera.com/documentation/enterprise/release-notes/topics/cdh_vd_cdh5_maven_repo.html
    http://www.cloudera.com/documentation/enterprise/releasenotes/topics/cdh_vd_cdh5_maven_repo_57x.html#concept_s1z_m5f_x5
    http://maven.apache.org/plugins/index.html
    http://blog.cloudera.com/blog/2012/08/developing-cdh-applications-with-maven-and-eclipse/
---------------------
作者:楚汐
来源:CSDN
原文:https://blog.csdn.net/trucyluce/article/details/51383196
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(hadoop)