创建三个虚拟机,一个作为master,另外两个作为slave。虚拟机与宿主机采用桥接,虚拟机可以上网,这样所有虚拟机与宿主机在同一个网段,要求宿主机所在网段的网络畅通。如果不要求虚拟机上网的话可以采用host-only的方式。
操作系统Centos 6.2 JDK1.7.0 Hadoop 1.0.1
主机名与IP地址对应关系
master 10.7.6.112
slave1 10.7.6.111
一、修改hosts文件并重启/etc/init.d/network restart,使hosts修改生效
这样以后机器间的访问就是通过域名,如果IP发生变化,则只需修改hosts文件并让所有机器使用相同配置的hosts文件即可
二、关闭防火墙
root权限下
ufwdisable
serviceiptables stop
可以写入/etc/rc.d/rc.local随机启动
三、创建SSH信任关系,使master能够无密码访问slave
确保各虚拟机安装ssh服务,并通过/etc/init.d/sshdstart开启服务。
生成rsa加密的密钥对ssh-keygen –trsa
使master和slave均能无密码访问自己cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改authorized_keys文件权限chmod600 authorized_keys
将master上的公钥拷贝给slave
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
四、搭建JAVA环境
方法一、安装配置新版本JAVA并删除旧版本JAVA(如OpenJDK)
安装新版本的JDK
rpm –ivh jdk-1.7.0_03-fcs.i586.rpm默认安装到/usr/java下面
配置新版本JDK的环境
修改/etc/profile
export JAVA_HOME="/usr/java/jdk1.7.0_03"
exportCLASSPATH=".:$JAVA_HOME/lib:$CLASSPATH"
export PATH="$JAVA_HOME/bin:$PATH"
执行source /etc/profile使变化生效
查看系统原来安装的JDK环境
Java-version
rpm–qa | grep java
rpm–qa | grep jdk
删除系统安装时的openjdk环境。
yum–y remove java java-1.6.0-openjdk-1.6.0.0-1.41.1.10.4.el6.i686
方法二、安装新的JAVA环境,保留系统原JAVA环境,提高新的JAVA环境优先级
使用alternatives或update-alternatives–install命令修改新版本JAVA的优先级高于旧版本
方法三、(不推荐)将新安装的JAVA命令创建链接到/usr/bin替换原来的链接
五、解压下载好的hadoop即可
六、对解压后的hadoop进行配置
1 修改hadoop-env.sh设置java路径(master与slave相同配置)
如果已设置JAVA全局环境变量不用再设置
2 core-site.xml文件(master与slave相同配置)
<configuration>
<!--- global properties -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
<description>A base for other temporarydirectories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
3 hdfs-site.xml文件(master与slave相同配置)
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
4 mapred-site.xml文件(master与slave相同配置)
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
5 指定masters与slaves(在master结点配置)
conf/masters文件
master
conf/slaves文件
slave1
七、创建文件系统并启动HADOOP
1 创建分布式文件系统HDFS
[hadoop@master hadoop-1.0.1]$ ./bin/hadoop namenode-format
12/04/25 12:59:56 INFO namenode.NameNode:STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = master.hadoopdomain/10.7.6.112
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.0.1
STARTUP_MSG: build =https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1243785;compiled by 'hortonfo' on Tue Feb 14 08:15:38 UTC 2012
************************************************************/
12/04/25 12:59:57 INFO util.GSet: VM type = 32-bit
12/04/25 12:59:57 INFO util.GSet: 2% max memory =19.33375 MB
12/04/25 12:59:57 INFO util.GSet: capacity = 2^22 = 4194304 entries
12/04/25 12:59:57 INFO util.GSet:recommended=4194304, actual=4194304
12/04/25 12:59:58 INFO namenode.FSNamesystem:fsOwner=hadoop
12/04/25 12:59:58 INFO namenode.FSNamesystem:supergroup=supergroup
12/04/25 12:59:58 INFO namenode.FSNamesystem:isPermissionEnabled=true
12/04/25 12:59:58 INFO namenode.FSNamesystem:dfs.block.invalidate.limit=100
12/04/25 12:59:58 INFO namenode.FSNamesystem:isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s),accessTokenLifetime=0 min(s)
12/04/25 12:59:58 INFO namenode.NameNode: Cachingfile names occuring more than 10 times
12/04/25 12:59:59 INFO common.Storage: Image file ofsize 112 saved in 0 seconds.
12/04/25 12:59:59 INFO common.Storage: Storagedirectory /home/hadoop/tmp/dfs/name has been successfully formatted.
12/04/25 12:59:59 INFO namenode.NameNode:SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode atmaster.hadoopdomain/10.7.6.112
************************************************************/
2启动hadoop
[hadoop@master hadoop-1.0.1]$ ./bin/start-all.sh
namenode running as process 5685. Stop it first.
slave1: starting datanode, logging to/home/hadoop/hadoop-1.0.1/libexec/../logs/hadoop-hadoop-datanode-slave1.hadoopdomain.out
master: starting secondarynamenode, logging to/home/hadoop/hadoop-1.0.1/libexec/../logs/hadoop-hadoop-secondarynamenode-master.hadoopdomain.out
jobtracker running as process 5906. Stop it first.
slave1: starting tasktracker, logging to/home/hadoop/hadoop-1.0.1/libexec/../logs/hadoop-hadoop-tasktracker-slave1.hadoopdomain.out
3 使用jps查看hadoop的各结点的启动状况
4查看文件系统状态hadoopdfsadmin -report
5 使用浏览器查看map/reduce和HDFS的状态
查看HDFS状态http://master:50070
查看map/reduce状态http://master:50030
八、例子
1 在namenode主机本地磁盘创建示例文件
[hadoop@master hadoop-1.0.1]$echo “Hello World Bye World” > ~/input/f1
[hadoop@master hadoop-1.0.1]$echo “hello hadoop bye world” > ~/input/f2
2 在HDFS文件系统上创建文件夹
[hadoop@master hadoop-1.0.1]$hadoop fs –mkdir/testwc
注意、/testwc为HDFS文件系统上的目录,并不是本地磁盘上的目录
3 把本地文件拷贝到HDFS文件系统目标文件夹内
[hadoop@master hadoop-1.0.1]$hadoop –put/home/hadoop/input /testwc
其中/home/hadoop/input为本地目录,/testwc为HDFS上的目录
或者
hadoop fs –copyFromLocal/home/hadoop/input /testwc
3运行例子wordcount
指定结果放到HDFS上的/testwc/output目录下,保证该目录为空
[hadoop@master hadoop-1.0.1]$ hadoop jar hadoop-examples-1.0.1.jar wordcount /testwc/input /testwc/output
Warning: $HADOOP_HOME is deprecated.
****hdfs://master:9000/home/hadoop/tmp/input/input/input
12/04/26 13:07:40 INFO input.FileInputFormat: Totalinput paths to process : 2
12/04/26 13:07:42 INFO mapred.JobClient: Running job:job_201204260928_0009
12/04/26 13:07:43 INFO mapred.JobClient: map 0% reduce 0%
12/04/26 13:09:04 INFO mapred.JobClient: map 100% reduce 0%
12/04/26 13:09:22 INFO mapred.JobClient: map 100% reduce 100%
12/04/26 13:09:27 INFO mapred.JobClient: Jobcomplete: job_201204260928_0009
12/04/26 13:09:27 INFO mapred.JobClient: Counters: 29
12/04/26 13:09:27 INFO mapred.JobClient: Job Counters
12/04/26 13:09:27 INFO mapred.JobClient: Launched reduce tasks=1
12/04/26 13:09:27 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=131204
12/04/26 13:09:27 INFO mapred.JobClient: Total time spent by all reduces waitingafter reserving slots (ms)=0
12/04/26 13:09:27 INFO mapred.JobClient: Total time spent by all maps waiting afterreserving slots (ms)=0
12/04/26 13:09:27 INFO mapred.JobClient: Launched map tasks=2
12/04/26 13:09:27 INFO mapred.JobClient: Data-local map tasks=2
12/04/26 13:09:27 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=17263
12/04/26 13:09:27 INFO mapred.JobClient: File Output Format Counters
12/04/26 13:09:27 INFO mapred.JobClient: Bytes Written=45
12/04/26 13:09:27 INFO mapred.JobClient: FileSystemCounters
12/04/26 13:09:27 INFO mapred.JobClient: FILE_BYTES_READ=87
12/04/26 13:09:27 INFO mapred.JobClient: HDFS_BYTES_READ=285
12/04/26 13:09:27 INFO mapred.JobClient: FILE_BYTES_WRITTEN=64784
12/04/26 13:09:27 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=45
12/04/26 13:09:27 INFO mapred.JobClient: File Input Format Counters
12/04/26 13:09:27 INFO mapred.JobClient: Bytes Read=45
12/04/26 13:09:27 INFO mapred.JobClient: Map-Reduce Framework
12/04/26 13:09:27 INFO mapred.JobClient: Map output materialized bytes=93
12/04/26 13:09:27 INFO mapred.JobClient: Map input records=2
12/04/26 13:09:27 INFO mapred.JobClient: Reduce shuffle bytes=53
12/04/26 13:09:27 INFO mapred.JobClient: Spilled Records=14
12/04/26 13:09:27 INFO mapred.JobClient: Map output bytes=77
12/04/26 13:09:27 INFO mapred.JobClient: CPU time spent (ms)=11520
12/04/26 13:09:27 INFO mapred.JobClient: Total committed heap usage(bytes)=413466624
12/04/26 13:09:27 INFO mapred.JobClient: Combine input records=8
12/04/26 13:09:27 INFO mapred.JobClient: SPLIT_RAW_BYTES=240
12/04/26 13:09:27 INFO mapred.JobClient: Reduce input records=7
12/04/26 13:09:27 INFO mapred.JobClient: Reduce input groups=6
12/04/26 13:09:27 INFO mapred.JobClient: Combine output records=7
12/04/26 13:09:27 INFO mapred.JobClient: Physical memory (bytes) snapshot=334348288
12/04/26 13:09:27 INFO mapred.JobClient: Reduce output records=6
12/04/26 13:09:27 INFO mapred.JobClient: Virtual memory (bytes) snapshot=1130512384
12/04/26 13:09:27 INFO mapred.JobClient: Map output records=8
九、查看结果
[hadoop@master conf]$ hadoop fs -cat/testwc/output/part-r-00000
Bye 1
Hello 1
bye 1
hadoop 1
hello 1
world 3
或者通过web查看
十、其它
(一)如果jps查看namenode与datanode,hadoop启动不全,如没有jobtracker或没有tasktracker
1.在Linux下关闭防火墙:使用service iptables stop命令;
2.再次对namenode进行格式化:在/usr/local/hadoop/hadoop-0.20.2/bin 目录下执行hadoopnamenode -format命令
3.对服务器进行重启
4.查看datanode或是namenode对应的日志文件,日志文件保存 在/usr/local/hadoop/hadoop-0.20.2/logs目录下。仔细查看日志报错的原因,(上次日志报错的信息忘记了)解决方法是进入/usr/local/hadoop/hdfs/name 和usr/local/hadoop/hdfs/data目录下,将目录下的文件全部删除。
5.再次在/bin目录下用start-all.sh命令启动所有进程,通过以上的几个方法应该能解决进程启动不完全的问题了。
http://bjbxy.blog.51cto.com/854497/352692
(二)jps命令说明
JPS(Java Virtual Machine Process StatusTool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。
我想很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程,及其 id。
jps也是一样,它的作用是显示当前系统的java进程情况,及其id号。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),和他们的进程号(为下面几个程序做准备),并可通过opt来查看这些进程的详细启动参数。
(三)警告处理Warning:$HADOOP_HOME is deprecated
在hadoop-env.sh中设置HADOOP_HOME_WARN_SUPPRESS=TRUE
https://issues.apache.org/jira/browse/HADOOP-7816