maven构建CDH开发环境

使用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包,因此添加仓库:

<repositories>
      <repository>
        <id>cloudera-releasesid>
        <url>https://repository.cloudera.com/artifactory/cloudera-reposurl>
        <releases>
          <enabled>trueenabled>
        releases>
        <snapshots>
         <enabled>falseenabled>
        snapshots>
      repository>
    repositories>

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

<properties>
     <cdh.version>2.6.0-cdh5.7.0cdh.version>
  properties>

添加依赖包

    <dependency>
      <groupId>org.apache.hadoopgroupId>
      <artifactId>hadoop-clientartifactId>
      <version>${cdh.version}version>
      <scope>providedscope>
    dependency>

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

<plugins>
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-shade-pluginartifactId>
        <version>1.7.1version>
        <configuration>  
          <transformers>  
         <transformer implementation = "org.apache.maven.plugins.shade.resource.MainifestResourceTransformer">      
          <mainClass>${MainClass}mainClass>  
         transformer>  
      transformers>  
        configuration> 
        <executions>
          <execution>
            <phase>packagephase>
            <goals>
              <goal>shadegoal>
            goals>
          execution>
        executions>
      plugin>
    plugins>

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

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

<plugin>
      <groupId>org.apache.maven.plugins groupId>
      <artifactId>maven-eclipse-pluginartifactId>
      <version>2.9version>
      <configuration>
        <projectNameTemplate>
          ${project.artifactId}
        projectNameTemplate>
        <buildOutputDirectory>
          eclipse-classes
        buildOutputDirectory>
        <downloadSources>truedownloadSources>
        <downloadJavadocs>falsedownloadJavadocs>
      configuration>
    plugin>

执行:

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

当然如果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/

你可能感兴趣的:(大数据)