概述
使用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=<your-group-id>
-DartifactId=<your-project-name>
group-id 和 project-name 分别是你的组织id和项目名称
2. 使用archetype:generate生成的项目文件中有个pom.xml文件
* pom文件编写 *
默认仓库找不到对应jar包,因此添加仓库:
<repositories>
<repository>
<id>cloudera-releases</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
允许发布版本,禁止快照版
然后添加版本属性,方便后面依赖引用
<properties>
<cdh.version>2.6.0-cdh5.7.0</cdh.version>
</properties>
添加依赖包
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${cdh.version}</version>
<scope>provided</scope>
</dependency>
scope 指定打包项目采用provided方式,即不把依赖包打进去。因为最后生成的程序jar包都是要在linux节点运行的,防止与节点自带的classpaths包冲突。
那如果项目中的一下jar包在hadoop运行环境中找不到,那么就需要用一个插件
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.7.1</version>
<configuration>
<transformers>
<transformer implementation = "org.apache.maven.plugins.shade.resource.MainifestResourceTransformer">
<mainClass>${MainClass}</mainClass>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</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-plugin</artifactId>
<version>2.9</version>
<configuration>
<projectNameTemplate>
${project.artifactId}
</projectNameTemplate>
<buildOutputDirectory>
eclipse-classes
</buildOutputDirectory>
<downloadSources>true</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
</configuration>
</plugin>
执行:
mvn -Declipse.workspace=<eclipse-workspace-path> 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 cdh版maven依赖解决方案的全部内容,希望文章能够帮你解决hadoop cdh版maven依赖解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复