Hadoop 安装详解--新手必备
准备:
这次学习,我使用的是虚拟机vmware,安装了3台虚拟机,系统为centos 5(其它版本亦可),主机名依次命名为hdfs1、hdfs2、hdfs3,ip地址一次为:172.16.16.1、172.16.16.10、172.16.16.11
通过配置/etc/sysconfig/network 修改主机名
通过修改/etc/sysconfig/network-scripts/ifcfg-eth0 ,配置ip等信息
将主机hdfs1作为hadoop作为分布式文件系统HDFS的namenode节点和MapReduce 运行过程中的 Job Tracker 结点,我们将 hdfs1 称之为主结点。其它两台机器 (hdfs2, hdfs3) 作为 HDFS 的 Data Node 以及 MapReduce 运行过程中的 Task Tracker 结点,这些结点可统称为从结点。如你需要部署更多的机器,也是很容易的,将新加入的机器作为 Data Node 以及 Task Tracker 结点即可,其配置过程在您看完本文后就会了。
步骤一:
vi /etc/hosts
172.16.16.10 hdfs2
172.16.16.11 hdfs3
172.16.16.1 hdfs1
先保证每一台主机都能ping通其他主机,ping 通其他任意节点的主机名
步骤二:
设置master到任意节点的无密码登录
[root@hdfs1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
09:ad:96:cf:9f:21:65:10:3d:39:f0:f9:99:69:3c:b2 root@hdfs1
[root@hdfs1 ~]# cd .ssh/
[root@hdfs1 .ssh]# mv id_rsa.pub id_rsahdfs1.pub
[root@hdfs1 .ssh]# touch authorized_keys
[root@hdfs1 .ssh]# cat id_rsahdfs1.pub > authorized_keys
[root@hdfs1 .ssh]# ssh hdfs1
Last login: Sat Mar 24 12:25:53 2012 from hdfs1
在hdfs2和hdfs3主机上,依次操作cat id_rsahdfs1.pub > authorized_keys,之后,验证从hdfs1上其它两个节点上,登录是否需要输入密码?不输入密码是正确的
[root@hdfs1 .ssh]# ssh hdfs2
Last login: Sat Mar 24 12:31:44 2012 from hdfs1
[root@hdfs2 ~]#
[root@hdfs1 .ssh]# ssh hdfs3
Last login: Fri Mar 23 21:18:29 2012 from 172.16.16.110
[root@hdfs3 ~]#
Ok , ssh验证均不需要密码
步骤三:安装jdk和hadoop,我的系统是32位的,
cp hadoop-1.0.1.tar.gz jdk-6u31-linux-i586.bin /usr/local/
chmod 755 jdk-6u31-linux-i586.bin
[root@hdfs1 local]# ./jdk-6u31-linux-i586.bin 赋予可执行权限
tar zxvf hadoop-1.0.1.tar.gz 安装hadoop
注意:
Jdk和hadoop程序是一样的,在那个目录下解压包,就是将程序安装在当前目录下
因为安装jdk,就是安装Java程序,看系统默认的程序是否卸载掉,可以手动删除,然后在做一个软连接
默认的java
[root@hdfs1 local]# java -version
java version "1.6.0"
OpenJDK Runtime Environment (build 1.6.0-b09)
OpenJDK Client VM (build 1.6.0-b09, mixed mode)
删除/usr/bin 的Java符号链接
[root@hdfs1 bin]# rm java
rm:是否删除 符号链接 “java”? Y
然后再做一个软连接:
[root@hdfs1 bin]# java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)
这个才是我们安装的版本
所有的主机的Java都调整好后,开始编辑hadoop的配置文件
vi hadoop-env.sh 此文件指定JAVA程序的安装目录
添加一行,export JAVA_HOME=/usr/local/jdk1.6.0_31
编辑:vi core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
参数 fs.default.name 指定 Name Node 的 IP 地址和端口号,这里指定就是namenode的9000端口
<value>hafs://hdfs1:9000</value>
</property>
</configuration>
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
参数 dfs.name.dir 指定 Name Node 相关数据在本地文件系统上的存放位置
<value>/home/hadoop/dfs.name.dir</value>
</property>
<property>
<name>dfs.data.dir</name>
参数 dfs.data.dir 指定 Data Node 相关数据在本地文件系统上的存放位置
<value>/home/hadoop/dfs.data.dir</value>
</property>
<property>
<name>dfs.replication</name>
设置hdfs系统备份文件数,此值设置为2,说明当一个文件上传到hdfs系统中,会被备份2个
<value>2</value>
</property>
</configuration>
vi mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
参数 mapred.job.tracker 指定 JobTracker 的 IP 地址和端口号
<value>hdfs1:9001</value>
</property>
</configuration>
设置主从节点:
修改 conf/masters 文件,将其中的 localhost 改为 hdfs1 ,修改 conf/slaves 文件。 删掉其中的localhost, 将我们的另两台机器 hdfs2、hdfs3 加入, 注意每个机器一行。masters里面的是主机节点,slaves里面是从机节点。
步骤四:
同样的配置文件,拷贝到其它两台slave节点中
[root@hdfs1 hadoop-1.0.1]# scp -r conf/
root@hdfs2:/usr/local/hadoop-1.0.1/
[root@hdfs1 hadoop-1.0.1]# scp -r conf/ root@hdfs3:/usr/local/hadoop-1.0.1/
开启hdfs防火墙端口:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT~
重启防火墙,使新添加的防火墙规则生效
步骤五:
在hdfs 节点上,格式化一个HDFS文件系统
[root@hdfs1 hadoop-1.0.1]# /usr/local/hadoop-1.0.1/bin/hadoop namenode -format
2/03/24 13:19:17 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = hdfs1/172.16.16.1
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/03/24 13:19:17 INFO util.GSet: VM type = 32-bit
12/03/24 13:19:17 INFO util.GSet: 2% max memory = 19.33375 MB
12/03/24 13:19:17 INFO util.GSet: capacity = 2^22 = 4194304 entries
12/03/24 13:19:17 INFO util.GSet: recommended=4194304, actual=4194304
12/03/24 13:19:18 INFO namenode.FSNamesystem: fsOwner=root
12/03/24 13:19:18 INFO namenode.FSNamesystem: supergroup=supergroup
12/03/24 13:19:18 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/03/24 13:19:18 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/03/24 13:19:18 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
12/03/24 13:19:18 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/03/24 13:19:18 INFO common.Storage: Image file of size 110 saved in 0 seconds.
12/03/24 13:19:18 INFO common.Storage: Storage directory /home/hadoop/dfs.name.dir has been successfully formatted.
12/03/24 13:19:18 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hdfs1/172.16.16.1
************************************************************/
Ok
步骤六:
启动hadoop进程
/usr/local/hadoop-1.0.1/bin/start-all.sh
starting namenode, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-namenode-hdfs1.out
hdfs3: starting datanode, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-datanode-hdfs3.out
hdfs2: starting datanode, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-datanode-hdfs2.out
hdfs1: starting secondarynamenode, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-secondarynamenode-hdfs1.out
starting jobtracker, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-jobtracker-hdfs1.out
hdfs3: starting tasktracker, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-tasktracker-hdfs3.out
hdfs2: starting tasktracker, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-tasktracker-hdfs2.out
启动完成后,用ps -ef 可以查到hdfs上启动了3个关于hadoop有关的java进程,
jar org.apache.hadoop.hdfs.
server.namenode.NameNode
org.apache.hadoop.hdfs.server.
namenode.SecondaryNameNode
org.apache.hadoop.
mapred.JobTracker
在其它的节点上,hdfs2、hdfs3有两个与hadoop相关的两个java进程
org.apache.hadoop.hdfs.
server.datanode.DataNode
org.apache.hadoop
.mapred.TaskTracker
现在再调整系统的环境变量
Vi /etc/profile
export PATH=/usr/local/jdk1.6.0_31/bin:/usr/local/hadoop-1.0.1/bin:$PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
source /etc/profile
同步到其他slave节点上
[root@hdfs1 bin]# scp /etc/profile root@hdfs2:/etc/
profile 100% 1091 1.1KB/s 00:00
[root@hdfs1 bin]# scp /etc/profile root@hdfs3:/etc/
profile
到其它节点上,执行命令
source /etc/profile
让文件生效,这样hadoop/bin下的和jdk/bin/下的命令,可以任意调用
查看hadoop是否安装ok
使用命令jps
[root@hdfs1 bin]# jps
8517 SecondaryNameNode
8943 Jps
8592 JobTracker
8343 NameNode
[root@hdfs2 bin]# jps
8600 Jps
8306 TaskTracker
8220 DataNode
[root@hdfs3 bin]# jps
11833 DataNode
12211 Jps
11902 TaskTracker
由此可看出,hadoop安装、部署是ok的
通过
http://hdfs1:50070
看看分布式文件系统概况日志
http://hdfs1:50030
可以查看分布式文件系统的工作状况
以上所有的步骤,是hadoop集群系统的安装、配置部分,后续将继续发表出hdfs的命令、操作等其它文章
我也是新手,愿有志同道合的朋友,一起学习!
以后操作如有不当之处,请指出,一起学习!
因为jdk包和hadoop包计较大,无法上传,有需要的,可以从官网上下载,也可以联系我索要
转载于:https://blog.51cto.com/caibird/815933