默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程。这对调试非常有帮助。
(只有一个JVM进程,没有分布式,不使用HDFS)
环境:jdk-7u45-linux-i586.tar
下载hadoop-2.2.0.tar.gz
更新发布 下载 (64位系统需要下载src自行编译)
安装:在用户主目录新建文件夹setupEnv,将jdk-7u45-linux-i586.tar和hadoop-2.2.0.tar.gz放在该目录下,即: ~/setupEnv
Java将安装在/usr/local/java目录, Hadoop将安装在/opt目录
①安装Java创建文件夹
cd /usr/localsudo mkdir java
释放文件
cd ~/setupEnvsudo tar zxvf jdk-7u45-linux-i586.tar.gz -C /usr/local/java
修改系统环境变量
sudo gedit /etc/profile
在末尾添加以下内容 :
#Javaexport JAVA_HOME=/usr/local/java/jdk1.7.0_45export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
将系统默认的jdk修改过来(两种更新方法,任选其一)
source /etc/profile
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.7.0_45/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.7.0_45/bin/javac 300
测试
java -version
②Hadoop安装 释放文件并软连接(用户以后版本更新)
cd ~/setupEnvsudo tar zxvf hadoop-2.2.0.tar.gz -C /optsudo ln -s /opt/hadoop-2.2.0 /opt/hadoop
修改系统环境变量
sudo gedit /etc/profile
在末尾添加以下内容 :
#hadoopexport HADOOP_HOME=/opt/hadoopexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
将配置文件启用:
source /etc/profile
测试
hadoop version
配置hadoop-env.sh
cd /opt/hadoop/etc/hadoopsudo gedit hadoop-env.sh
把JAVA_HOME指定为:export JAVA_HOME=/usr/local/java/jdk1.7.0_45
③运行测试 (注:Hadoop刚完成安装不修改配置文件即为单机模式) 测试一:wordcount
在主文件下新建hadoopTest文件夹,创建in子文件夹,创建任意文本文档内容
cd /opt/hadoop/share/hadoop/mapreducehadoop jar hadoop-mapreduce-examples-2.2.0.jar wordcount ~/hadoopTest/in ~/hadoopTest/out
查看结果
cat ~/hadoopTest/out/part-r-00000
hadoop单机运行可以不打包成jar: hadoop 主类名 [输入输出目录等参数]
相比用java运行,使用hadoop命令会自动添加hadoop库文件到classpath
输出命名方式:
map输出:part-m-nnnnn
reduce输出:part-r-nnnnn
其中nnnnn为分块序号,从0开始。
分布式下Map的输出是在硬盘上而不是hdfs,因为它作为中间结果是临时的,一旦写入hdfs就会分布式存储并备份。
example中的样例程序说明