1.下载Maven到
/opt/maven
目录中,解压缩
sudo tar -zxvf maven3.5.tar.gz
- 配置环境变量,修改
/etc/profile
文件,在里面加入下面的代码
export MAVEN_HOME=/opt/maven/apache-maven-3.5.3
export PATH=$PATH:${MAVEN_HOME}/bin
- 让配置文件生效
source /etc/profile
- 测试Maven是否安装成功
mvn -version
如果成功就会出现
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /opt/maven/maven3.5
Java version: 1.8.0_74, vendor: Oracle Corporation, runtime: /opt/jdk1.8.0_74/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.13.0-43-generic", arch: "amd64", family: "unix"
- 在Ecplise中集成Maven,打开
Windows—>Preferences—>Maven—>installation
选项,点击add添加maven
- 再点击
User Settings
选项把settings.xml
地址填入User Settings
输入框,在修改本地仓库路径为/home/root/.m2/repository
(实际路径看自己心情自己选择),点击Apply and Close
关闭
- 修改
settings.xm
l文件,在 注释的配置选项旁添加下面的第一行代码,然后在配置选项
中添加剩下的代码,保存。
/home/root/.m2/repository
mirrorId
central
Human Readable Name for this Mirror.
http://repo1.maven.org/maven2/
现在就可以建maven项目了,如果是第一次创建时间会比较久
- 项目创建完成后,如果需要jar包只需要配置项目中的
pom.xml
文件就行了,我的配置模板放下面
4.0.0
hadoop
hdfs
0.0.1-SNAPSHOT
jar
hdfs
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
org.slf4j
slf4j-api
1.8.0-beta2
org.slf4j
slf4j-log4j12
1.8.0-beta2
test
jdk.tools
jdk.tools
1.8
system
${JAVA_HOME}/lib/tools.jar
org.apache.hadoop
hadoop-common
2.7.3
org.apache.hadoop
hadoop-hdfs
2.7.3
org.apache.hadoop
hadoop-client
2.7.3
org.apache.hadoop
hadoop-mapreduce-client-core
2.7.3
- 在Windows中的配置方法基本一样,就不记录了。但在Windows中和Linux中我分别遇到了一个小问题,记录一下。
- 在Windows下的问题为:
Missing artifact jdk.tools:jdk.tools:jar:1.8
。
这是因为缺少了tools.jar
包,解决方法就是在pom.xm
l中添加
jdk.tools
jdk.tools
1.8
system
${JAVA_HOME}/lib/tools.jar
这个情况我在Linux中并没发现,而且在Linux中我也没有添加上面的代码
- 在Linux下的问题为:
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
。这个问题是我在Maven项目中运行Java操作HDFS的代码时发现的。
这个问题的原因仍然时缺少jar包,在pom.xml
添加
org.slf4j
slf4j-api
1.8.0-beta2
org.slf4j
slf4j-log4j12
1.8.0-beta2
test
添加完上面的代码后,就可以使用Java读取HDFS中的文件了
- 至此,Ecplise中集成Maven,创建Maven项目并使用Java访问HDFS都成功完成。把之前写的HCat类拿来运行看一下。
log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
Hello hipeer!
补充一下Linux的scp命令:
Linux scp命令用于Linux之间复制文件和目录。
scp [可选参数] file_source file_target
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试 连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file