http://download.csdn.net/detail/kl222/5219102 下载word文档
hadoop包含两个部分:分布式文件系统(HDSF)和Map/Reduce。这两个部分都采用master/slave结构。
对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。
l Ubuntu12.04
root@ubuntu:/etc/apt# uname -a
Linux ubuntu 3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux
l Jdk
l hadoop
2.2. JDK安装和配置
2.2.1.1. ubuntu下:apt-get install default-jdk
root@ubuntu:/etc/apt# java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK Server VM (build 20.0-b12, mixed mode)
2.2.2. 下载oracle的java虚拟机
2.2.2.1. 下载jdk-7-linux-i586.tar.gz
- wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586.tar.gz
可以在oracle官网找到你需要的版本。现在是jdk7(java se)
http://www.oracle.com/technetwork/indexes/downloads/index.html
- sudo tar zxvf ./jdk-7-linux-i586.tar.gz -C /usr/lib/jvm
- cd /usr/lib/jvm
- sudo mv jdk1.7.0/ java-7-sun
- vim ~/.bashrc
添加:
- export JAVA_HOME=/usr/lib/jvm/java-7-sun
- export JRE_HOME=${JAVA_HOME}/jre
- export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
- export PATH=${JAVA_HOME}/bin:$PATH
保存退出,输入以下命令使之立即生效。
- source ~/.bashrc
由于Ubuntu中可能会有默认的JDK,如openjdk,所以,为了将我们安装的JDK设置为默认JDK版本,还要进行如下工作。
执行代码:
- sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-sun/bin/java 300
- sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-7-sun/bin/javac 300
执行代码:
- sudo update-alternatives --config java
系统会列出各种JDK版本,如下所示:
- www.linuxidc.com@linux:~$ sudo update-alternatives --config java
- 有 3 个候选项可用于替换 java (提供 /usr/bin/java)。
- 选择 路径 优先级 状态
- ------------------------------------------------------------
- * 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自动模式
- 1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手动模式
- 2 /usr/lib/jvm/java-6-sun/jre/bin/java 63 手动模式
- 3 /usr/lib/jvm/java-7-sun/bin/java 300 手动模式
- 要维持当前值[*]请按回车键,或者键入选择的编号:3
- update-alternatives: 使用 /usr/lib/jvm/java-7-sun/bin/java 来提供 /usr/bin/java (java),于 手动模式 中。
- www.linuxidc.com@linux:~$ java -version
- java version "1.7.0"
- Java(TM) SE Runtime Environment (build 1.7.0-b147)
- Java HotSpot(TM) Server VM (build 21.0-b17, mixed mode)
2.3. Hadoop安装和配置
地址:
http://hadoop.apache.org/releases.html
安装包有两种型式,一种只有运行行库,另一种除运行库外,还包含有源码的。我们下载包含有源码的发行包。
直接解压到一个指定的目录下就可以了。
文档位于安装目录下面的docs目录,docs/cn下包含中文文档。
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。
root@ubuntu:/data# ls
hadoop-1.0.3.tar.gz
root@ubuntu:/data# tar xzvf hadoop-1.0.3.tar.gz
root@ubuntu:/data# ls
hadoop-1.0.3 hadoop-1.0.3.tar.gz
root@ubuntu:/data/hadoop-1.0.3# ls
bin hadoop-ant-1.0.3.jar ivy sbin
build.xml hadoop-client-1.0.3.jar ivy.xml share
c++ hadoop-core-1.0.3.jar lib src
CHANGES.txt hadoop-examples-1.0.3.jar libexec webapps
conf hadoop-minicluster-1.0.3.jar LICENSE.txt
contrib hadoop-test-1.0.3.jar NOTICE.txt
docs hadoop-tools-1.0.3.jar README.txt
2.3.4. 配置
2.3.4.1. Master节点配置
Master节点包括 NameNode、JobTracker。由于我们现在是测试,所以把Namenode和JobTracker放到同一台机器上了。而在实际现网布署时,由于master节点是全系统的一个单点,所以需要采用热备方式布署。
Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件
可以直接src目录下的文件替换
cp src/core/core-default.xml conf/core-site.xml
cp src/hdfs/hdfs-default.xml conf/hdfs-site.xml
cp mapred/mapred-default.xml conf/mapred-site.xml
修改core-site.xml中的hadoop.tmp.dir,它是设置HADOOP数据存储的位置。
修改core-site.xml中的fs.default.name,它是设置namenode的位置,其它datanode是通过这个地址来与namenode通信的。
修改hdfs-site.xml中的dfs.name.dir,它是设置hadoop namenode数据存储的位置。默认是依赖core-site.xml中的hadoop.tmp.dir
修改hdfs-site.xml中的dfs.data.dir,它是设置hadoop datanode数据存储的位置。默认是依赖core-site.xml中的hadoop.tmp.dir
修改mapred-site.xml中的mapred.job.tracker,它是设置jobtracker的位置,其它tasktracker是通过这个地址来与jobtracker通信的。
参考:配置参考
3. 编译
3.1. hadoop编译
Hadoop编译时,需要能够上网,编译的时候需要下载很多库和包。如果是通过代理上网,则需要设置代理:
在根目录\build.xml中
找到<target name="ivy-download" ...
在这前增加:
<target name= "proxy" >
<property name="proxy.host" value= "代理的ip地址" />
<property name="proxy.port" value= "8080" />
<input message="Please enter proxy username" addproperty= "proxy.user" />
<input message="Please enter proxy password - NOTE: CLEAR TEXT" addproperty= "proxy.pass" />
<setproxy proxyhost="${proxy.host}" proxyport= "${proxy.port}" proxyuser= "${proxy.user}" proxypassword= "${proxy.pass}" />
</target>
修改:增加依赖
<target name="ivy-download"depends= "proxy" description= "To download ivy" unless= "offline" >
<get src="${ivy_repo_url}" dest= "${ivy.jar}" usetimestamp= "true" />
</target>
Hadoop编译工具是ant
在根目录下执行:
root@ubuntu:/data/hadoop#ant
就可以了,一般会通过,不会遇到什么错误。
生成在build目录下。
3.2. 用eclipse编译hadoop
打开eclipse->new->project->java project from existing ant buildfile
会出现下面问题:
此问题未解决
3.3. Eclipse插件编译
官方文档:http://wiki.apache.org/hadoop/EclipsePlugIn
源码位于根目录下的src/contrib/eclipse-plugin
3.3.1. 安装eclipse,并安装eclipse-jdt包
apt-get install eclipse eclipse-jdt
如果没有安装,则编译时会出现下面错误:
compile:
[echo] contrib: eclipse-plugin
[javac] /data/hadoop-1.0.4/src/contrib/eclipse-plugin/build.xml:61: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 45 source files to /data/hadoop-1.0.4/build/contrib/eclipse-plugin/classes
[javac] /data/hadoop-1.0.4/src/contrib/eclipse-plugin/src/java/org/apache/hadoop/eclipse/HadoopPerspectiveFactory.java:22:软件包 org.eclipse.jdt.ui 不存在
[javac] import org.eclipse.jdt.ui.JavaUI;
[javac] ^
[javac] /data/hadoop-1.0.4/src/contrib/eclipse-plugin/src/java/org/apache/hadoop/eclipse/NewDriverWizard.java:25:软件包 org.eclipse.jdt.internal.ui.wizards不存在
[javac] import org.eclipse.jdt.internal.ui.wizards.NewElementWizard;
[javac] ^
3.3.2. 先找到eclipse安装目录:
root@a:/usr/lib/eclipse# ps -ef|grep eclipse
root 5465 5031 5 18:03 ? 00:00:38 /usr/lib/eclipse/eclipse
root 5791 5265 0 18:15 pts/2 00:00:00 grep --color=auto eclipse
root@a:/usr/lib/eclipse# ls
about_files buildscripts dropins eclipse.ini p2
artifacts.xml configuration eclipse features plugins
3.3.3. 再在src/contrib/eclipse-plugin/build.properties文件中加入:
eclipse.home=/usr/lib/eclipse
3.3.4. 在src/contrib/build-contrib.xml文件中加入:
<property name="version" value="1.0.4"/> <--改成与根目录中build.xml中version相同的值-->
3.3.5. 设置代理,如果可以直接访问网络,就不需要这一步:
在src/contrib/eclipse-plugin/build.xml文件中加入:
<target name= "proxy" >
<property name="proxy.host" value= "代理IP地址" />
<property name="proxy.port" value= "代理端口" />
<input message="Please enter proxy username" addproperty= "proxy.user" />
<input message="Please enter proxy password - NOTE: CLEAR TEXT" addproperty= "proxy.pass" />
<setproxy proxyhost="${proxy.host}" proxyport= "${proxy.port}" proxyuser= "${proxy.user}" proxypassword= "${proxy.pass}" />
</target>
并修改:
<target name="compile" depends="proxy, init, ivy-retrieve-common" unless="skip.contrib">
<echo message="contrib: ${name}"/>
<javac
encoding="${build.encoding}"
srcdir="${src.dir}"
includes="**/*.java"
destdir="${build.classes}"
debug="${javac.debug}"
deprecation="${javac.deprecation}">
<classpath refid="classpath"/>
</javac>
</target>
3.3.6. 编译
在hadoop解压根目录下执行:
ant
编译时,可能会出现下面错误:
BUILD FAILED
/data/hadoop-1.0.4/src/contrib/eclipse-plugin/build.xml:69: Warning: Could not find file /data/hadoop-1.0.4/build/hadoop-core-1.0.4.jar to copy.
提示找不到hadoop-core-1.0.4.jar,那是因为生成的文件名不对,你可以到/data/hadoop-1.0.4/build下,把hadoop-core-XXXXX.jar改成正确的名字。
编译成功后,会在 build/contrib/eclipse-plugin下生成 hadoop-eclipse-plugin-1.0.4.jar
3.3.7. 安装
把hadoop-eclipse-plugin-1.0.4.jar复制到eclipse安装目录下的plugins目录下。重启eclipse。
便可以在 project explorer中看到 DFS Locations
使用参考:使用参考
4. 测试
4.1. 其中一个节点宕机,查看整个集群的状态。
4.1.1. 查看文件系统状态:bin/hadoop dfsadmin –report
4.1.2. 查看文件分配状态:
4.2. 宕机机器重新恢复,查看是否可以自动加入集群,是否对集群是否有影响
4.2.1. 查看进程是否自动重启:jps
结果:hadoop不会自动重启
4.2.2. bin/hadoop dfsadmin –report
5. 参考:
http://www.cnblogs.com/xia520pi/category/346943.html
http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html