一、 主机名设置、IP设置、代理设置
二、 远程登录工具VNCServer安装
一、VNC简单介绍:
VNC,全称为Virtual NetworkComputing,它是一个桌面共享系统。它的功能,类似于windows中 的远程桌面功能。VNC使用了
RFB(RemoteFrameBuffer,远程帧缓冲)协议来实现远程控制另外一台计算机。它把键盘、鼠标动作发送到远程计算机,并把远程计算机的屏
幕发回到本地。VNC技术与平台无关,VNC Viewer可以和VNCServer在不同的操作系统上。VNC几乎支持所有的操作系统,也支持Java,甚至可以通过支持Java的浏览器来访问 VNCServer。多个VNC客户端可以同时连接到一个VNC Server上。VNC最初由AT&T开发的,它的源代码是开源的。
二、VNC在centos上安装VNC和VNCserver:
查看是否安装了vnc以及VNCserver
[root@localhost ~]# rpm -q vnc vnc-server
vnc-4.1.2-14.el5_3.1
vnc-server-4.1.2-14.el5_3.1
如果没有安装,则安装他们
[root@localhost ~]# yum install vnc vnc-server #ubuntu的话,就是执行apt-get
install vnc vnc-server
1.需要在每个用户下启动vncserver,生成该用户远程桌面连接时的配置文件以及访问密码,方法就是切换到每个用户,执行 vncserver。
(注 释:在启动VNCserver时,你也可以为server指定一个display参数。你可以把display理解为一个桌面,每个用户都可以有自己的桌 面。VNC客户端在连接时,可以指定连接到哪个桌面上。在系统中,display号不能重复,也就是说,如果有用户已经建立了名为“:1”的 display,另外一个用户就不能再使用“:1”了,他可以使用“:2”。
指定display号码的启动VNC server的命令是: vncserver : 1
)
[root@localhost ~]# vncserver #运行vncserver。
You will require a password to access your desktops.
enter
password:
#首次运行会让你设置密码,密码要求6位以上
verify
password:
#确认密码
xauth: creating new authority file /root/.Xauthority #首次运行会生成本用户的相关配置文件,以及日志文件,生成位置在~.vnc/目录下
New 'CPAYNET005:1 (root)' desktop is CPAYNET005:1 注意这个数字1
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/CPAYNET005:1.log #注意这个数字
[root@localhost ~]# vncserver -kill
:1 #杀死刚才运行的vncserver,数字1正是上面1.log那个1。注意上面红色字体。
[root@localhost ~]# vi ~/.vnc/xstartup #编辑这个配置脚本文件,配置使远程登录为gnome或者kde桌面。
#!/bin/sh
# Uncomment
the following two lines for normal desktop:
# unset
SESSION_MANAGER
[ -x
/etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r
$HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot
-solid grey
vncconfig
-iconic &
#xterm
-geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
gnome-session &
#startkde
&#kde若是用kde桌面,则将本行开始#号去掉,注释上面的gnome
[root@localhost ~]#su - otheruser #切换到别的用户
[otheruser@localhost ~]$ vncserver #为用户名otheruser生成访问密码,以及远程连接时的配置文件
You will require a password to access your desktops.
enter passwd:
verify password:
xauth: creating new authority file /home/otheruser/.Xauthority #首次运行会生成本用户的相关配置文件,以及日志文件,生成位置在~.vnc/目录下
New 'CPAYNET005:1 (otheruser)' desktop is CPAYNET005:1
注意这个数字1
Creating default startup script /home/otheruser/.vnc/xstartup
Starting applications specified in /home/otheruser/.vnc/xstartup
Log file is /root/.vnc/CPAYNET005:1.log #注意这个数字
[root@localhost
~]# vncserver -kill :1
#杀死刚才运行的vncserver,数字1正是上面1.log那个1。注意上面红色字体。
[root@localhost
~]# vi ~/.vnc/xstartup #编辑这个配置脚本文件,配置使远程登录为gnome或者kde桌面。原来vncserver默认使
#用的窗口管理器是twm,这是一个很简陋的窗口管理器,你可以把你的桌面改成GNOME或KDE。
#!/bin/sh
# Uncomment
the following two lines for normal desktop:
# unset
SESSION_MANAGER
# exec
/etc/X11/xinit/xinitrc
[ -x
/etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r
$HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot
-solid grey
vncconfig
-iconic &
#xterm
-geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
gnome-session &
#startkde
&#kde若是用kde桌面,则将本行开始#号去掉,注释上面的gnome
[otheruser@localhost
~]$exit #切换回root
如果还有别的用户,重复执行上面紫色字体的步骤
2.接下来编辑vnc的配置文件
[root@localhost~]#vi /etc/sysconfig/vncservers
以下是文件内容:
# The VNCSERVERS variable is a list of display:user pairs.
# The VNCSERVERS variable is a list of display:user pairs.
# Uncomment the line below to start a VNC server on display : 1
# as my ’myusername’ (adjust this to your own). You will also
# need to set a VNC password ; run ’man vncpasswd’ to see how
# to do that.
## DO NOT RUN THIS SERVICE if your local area network is
# untrusted! For a secure way of using VNC , see
# <URL:http://www.uk.research.att.com/vnc/sshvnc.html>.
# Use "-nolisten tcp" to prevent X connections to your VNC server via
TCP.
# Use "-nohttpd" to prevent web-based VNC clients connecting.
# Use "-localhost" to prevent remote VNC clients connecting except
when
# doing so through a secure tunnel.See the "-via" option in the
# `man vncviewer' manual page
VNCSERVERS= “ 1:user1 2:user2 3:user3 “
VNCSERVERARGS [ 1 ] = “ -geometry 1024×768 “
VNCSERVERARGS [ 2 ] = “ -geometry 1024×768 “
VNCSERVERARGS [ 3 ] = “ -geometry 800×600 -depth 24 -nolisten tcp -nohttpd
-localhost“
解释一下这个文件:
VNCSERVERS这一行是配置在系统启动时启动几个VNC server,上面的例子里运行了三个VNC server,其中user1在display :1,user2在display :2,user3在display :3。
VNCSERVERARGS这三行,分别为VNC server 1, 2, 3配置启动参数,上面的例子里对user1和user2使用屏幕分辨率1024×768,
对user3使用800×600,24色,不支持tcp,不支持http连接,只能在本地测试访问。
设置完成后就可以启动vncserver服务了。
[root@localhost~]#/sbin/service vncserver start
启动失败的原因有:
1./etc/sysconfig/vncservers文件参数不对
2.没有为vncservers提到的用户生成各自的配置文件
3.在生成配置文件后,没有使用命令vncserver -kill :1 将那个进程杀死
3. 最后,需要配置一下防火墙,允许VNC客户端连接VNC server。
VNC server监听的端口从5900开始,display:1的监听5901,display:2监听5902,以此类推。CentOs的防火墙缺省是不允许连接这些端口的,所以需要使用下面的步骤打开防火墙(需要root权限):
vi /etc/sysconfig/iptables
vi /etc/sysconfig/iptables 找到下面的语句:
-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited
在此行之前,加上下面的内容:
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 5900:5903 -j
ACCEPT
这句话的含义是,允许其它机器访问本机的5900到5903端口,这样,display:1, display:2, display:3的用户就可以连接到本机。
然后使用root身份重新启动防火墙:
[root@localhost~]#/sbin/service iptables restart
[root@localhost~]#/sbin/service iptables restart
好了,现在就可以运行客户端软件,连接到VNC server上了。
加开机启动
#chkconfig vncserver on
三、 SSH安装
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。
3.1 安装和启动SSH协议
在"Hadoop集群(第1期)"安装CentOS6.0时,我们选择了一些基本安装包,所以我们需要两个服务:ssh和rsync已经安装了。可以通过下面命令查看结果显示如下:
rpm –qa | grep openssh
rpm –qa | grep rsync
假设没有安装ssh和rsync,可以通过下面命令进行安装。
yum install ssh 安装SSH协议
yum install rsync (rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件)
service sshd restart 启动服务
确保所有的服务器都安装,上面命令执行完毕,各台机器之间可以通过密码验证相互登。
3.2 配置Master无密码登录所有Salve
1)SSH无密码原理
Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。
2)Master机器上生成密码对
在Master节点上执行以下命令:
ssh-keygen –t rsa –P ''
这条命是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。
查看"/home/hadoop/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。
接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在验证前,需要做两件事儿。第一件事儿是修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效。
1)修改文件"authorized_keys"
chmod 600 ~/.ssh/authorized_keys
备注:如果不进行设置,在验证时,扔提示你输入密码,在这里花费了将近半天时间来查找原因。在网上查到了几篇不错的文章,把作为"Hadoop集群_第5期副刊_JDK和SSH无密码配置"来帮助额外学习之用。
2)设置SSH配置
用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
设置完之后记得重启SSH服务,才能使刚才设置有效。
service sshd restart
退出root登录,使用hadoop普通用户验证是否成功。
ssh localhost
从上图中得知无密码登录本级已经设置完毕,接下来的事儿是把公钥复制所有的Slave机器上。使用下面的命令格式进行复制公钥:
scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP:~/
例如:
scp ~/.ssh/id_rsa.pub hadoop@192.168.1.3:~/
上面的命令是复制文件"id_rsa.pub"到服务器IP为"192.168.1.3"的用户为"hadoop"的"/home/hadoop/"下面。
下面就针对IP为"192.168.1.3"的Slave1.Hadoop的节点进行配置。
1)把Master.Hadoop上的公钥复制到Slave1.Hadoop上
从上图中我们得知,已经把文件"id_rsa.pub"传过去了,因为并没有建立起无密码连接,所以在连接时,仍然要提示输入输入Slave1.Hadoop服务器用户hadoop的密码。为了确保确实已经把文件传过去了,用SecureCRT登录Slave1.Hadoop:192.168.1.3服务器,查看"/home/hadoop/"下是否存在这个文件。
从上面得知我们已经成功把公钥复制过去了。
2)在"/home/hadoop/"下创建".ssh"文件夹
这一步并不是必须的,如果在Slave1.Hadoop的"/home/hadoop"已经存在就不需要创建了,因为我们之前并没有对Slave机器做过无密码登录配置,所以该文件是不存在的。用下面命令进行创建。(备注:用hadoop登录系统,如果不涉及系统文件修改,一般情况下都是用我们之前建立的普通用户hadoop进行执行命令。)
mkdir ~/.ssh
然后是修改文件夹".ssh"的用户权限,把他的权限修改为"700",用下面命令执行:
chmod 700 ~/.ssh
备注:如果不进行,即使你按照前面的操作设置了"authorized_keys"权限,并配置了"/etc/ssh/sshd_config",还重启了sshd服务,在Master能用"ssh localhost"进行无密码登录,但是对Slave1.Hadoop进行登录仍然需要输入密码,就是因为".ssh"文件夹的权限设置不对。这个文件夹".ssh"在配置SSH无密码登录时系统自动生成时,权限自动为"700",如果是自己手动创建,它的组权限和其他权限都有,这样就会导致RSA无密码远程登录失败。
对比上面两张图,发现文件夹".ssh"权限已经变了。
3)追加到授权文件"authorized_keys"
到目前为止Master.Hadoop的公钥也有了,文件夹".ssh"也有了,且权限也修改了。这一步就是把Master.Hadoop的公钥追加到Slave1.Hadoop的授权文件"authorized_keys"中去。使用下面命令进行追加并修改"authorized_keys"文件权限:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4)用root用户修改"/etc/ssh/sshd_config"
具体步骤参考前面Master.Hadoop的"设置SSH配置",具体分为两步:第1是修改配置文件;第2是重启SSH服务。
5)用Master.Hadoop使用SSH无密码登录Slave1.Hadoop
当前面的步骤设置完毕,就可以使用下面命令格式进行SSH无密码登录了。
ssh 远程服务器IP
从上图我们主要3个地方,第1个就是SSH无密码登录命令,第2、3个就是登录前后"@"后面的机器名变了,由"Master"变为了"Slave1",这就说明我们已经成功实现了SSH无密码登录了。
最后记得把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉。
rm –r ~/id_rsa.pub
到此为止,我们经过前5步已经实现了从"Master.Hadoop"到"Slave1.Hadoop"SSH无密码登录,下面就是重复上面的步骤把剩余的两台(Slave2.Hadoop和Slave3.Hadoop)Slave服务器进行配置。这样,我们就完成了"配置Master无密码登录所有的Slave服务器"。
3.3 配置所有Slave无密码登录Master
和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加到Master的".ssh"文件夹下的"authorized_keys"中,记得是追加(>>)。
为了说明情况,我们现在就以"Slave1.Hadoop"无密码登录"Master.Hadoop"为例,进行一遍操作,也算是巩固一下前面所学知识,剩余的"Slave2.Hadoop"和"Slave3.Hadoop"就按照这个示例进行就可以了。
首先创建"Slave1.Hadoop"自己的公钥和私钥,并把自己的公钥追加到"authorized_keys"文件中。用到的命令如下:
ssh-keygen –t rsa –P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
接着是用命令"scp"复制"Slave1.Hadoop"的公钥"id_rsa.pub"到"Master.Hadoop"的"/home/hadoop/"目录下,并追加到"Master.Hadoop"的"authorized_keys"中。
1)在"Slave1.Hadoop"服务器的操作
用到的命令如下:
scp ~/.ssh/id_rsa.pub hadoop@192.168.1.2:~/
2)在"Master.Hadoop"服务器的操作
用到的命令如下:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
然后删除掉刚才复制过来的"id_rsa.pub"文件。
最后是测试从"Slave1.Hadoop"到"Master.Hadoop"无密码登录。
从上面结果中可以看到已经成功实现了,再试下从"Master.Hadoop"到"Slave1.Hadoop"无密码登录。
至此"Master.Hadoop"与"Slave1.Hadoop"之间可以互相无密码登录了,剩下的就是按照上面的步骤把剩余的"Slave2.Hadoop"和"Slave3.Hadoop"与"Master.Hadoop"之间建立起无密码登录。这样,Master能无密码验证登录每个Slave,每个Slave也能无密码验证登录到Master。
四、 JDK安装
CentOS 卸载OpenJdk
第一步:查看Linux自带的JDK是否已安装 (卸载centOS已安装的1.4)
安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息:
java version "1.6.0"
OpenJDK Runtime Environment (build 1.6.0-b09)
OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)
最好还是先卸载掉openjdk,在安装sun公司的jdk.
先查看 rpm -qa | grep java
显示如下信息:
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
卸载:
rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
还有一些其他的命令
rpm -qa | grep gcj
rpm -qa | grep jdk
如果出现找不到openjdk source的话,那么还可以这样卸载
yum -y remove java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
<1># rpm -qa|grep jdk ← 查看jdk的信息或直接执行
或
# rpm -q jdk
或
# java -version
<2># rpm -qa | grep gcj ← 确认gcj的版本号
<3># yum -y remove java-1.4.2-gcj-compat ← 卸载gcj
第二步:安装JDK
<1>从SUN下载jdk-1_5_0_14-linux-i586-rpm.bin或jdk-1_5_0_14-linux-i586.bin
在/usr下新建java文件夹,将安装包放在/usr/java目录下
# mkdir /usr/java
<2>安装JDK
# cd /usr/java
①jdk-1_5_0_14-linux-i586-rpm.bin文件安装
# chmod 777 jdk-1_5_0_14-linux-i586-rpm.bin ← 修改为可执行
# ./jdk-1_5_0_14-linux-i586-rpm.bin ← 选择yes同意上面的协议
# rpm -ivh jdk-1_5_0_14-linux-i586.rpm ← 选择yes直到安装完毕
②jdk-1_5_0_14-linux-i586.bin文件安装
# chmod a+x jdk-1_5_0_14-linux-i586.bin ← 使当前用户拥有执行权限
# ./jdk-1_5_0_14-linux-i586.bin ← 选择yes直到安装完毕
第三步:配置环境变量
<1># vi /etc/profile
<2>在最后加入以下几行:
export JAVA_HOME=/usr/java/jdk1.6.0_10
export
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
<3># source profile
五、 Hadoop安装
SCP:
/etc/ssh/sshd_config
/etc/profile
/usr/java/jdk…
/home/admin/hadoop(admin)
Hosts中127.0.0.1 那行要去掉 切记,教训深刻
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves\
官方地址:(http://hadoop.apache.org/common/docs/r0.19.2/cn/cluster_setup.html)
1 先决条件
- 确保在你集群中的每个节点上都安装了所有必需软件:sun-JDK ,ssh,Hadoop
- JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本。
- ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
2 实验环境搭建
2.1 准备工作
操作系统:Ubuntu
部署:Vmvare
在vmvare安装好一台Ubuntu虚拟机后,可以导出或者克隆出另外两台虚拟机。
准备机器:一台master,若干台slave,配置每台机器的/etc/hosts保证各台机器之间通过机器名可以互访,例如:
10.64.56.76 node1(master)
10.64.56.77 node2 (slave1)
10.64.56.78 node3 (slave2)
主机信息:
|
机器名 |
IP地址 |
作用 |
|
Node1 |
10.64.56.76 |
NameNode、JobTracker |
|
Node2 |
10.64.56.77 |
DataNode、TaskTracker |
|
Node3 |
10.64.56.78 |
DataNode、TaskTracker |
为保证环境一致先安装好JDK和ssh:
2.2 安装JDK
#安装JDK
$ sudo apt-get install
sun-java6-jdk1.2.3
这个安装,java执行文件自动添加到/usr/bin/目录。
验证 shell命令 :java
-version 看是否与你的版本号一致。
2.3下载、创建用户
在所有的机器上都建立相同的目录,也可以就建立相同的用户,以该用户的home路径来做hadoop的安装路径。例如我在所有的机器上都建立了/home/hadoop/install
$ useradd hadoop
$ cd /home/hadoop
2.4 安装ssh和配置
1) 安装:sudo apt-get install ssh
2) 配置:
在Hadoop启动以后,Namenode是通过SSH(Secure
Shell)来启动和停止各个datanode上的各种守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的形式,故我们须要配置SSH运用无密码公钥认证的形式。
以本文中的三台机器为例,现在node1是主节点,他须要连接node2和node3。须要确定每台机器上都安装了ssh,并且datanode机器上sshd服务已经启动。
(
说明:hadoop@hadoop~]$ssh-keygen
-t rsa
这个命令将为hadoop上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下然后将
id_rsa.pub的内容复制到每个机器(也包括本机)的/home/dbrg/.ssh/authorized_keys文件中,如果机器上已经有
authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接复制过去就行.)
3) 首先设置namenode的ssh为无需密码的、自动登录。
切换到hadoop用户
$ su hadoop
cd /home/hadoop
$ ssh-keygen -trsa然后一直按回车
完成后,在home跟目录下会产生隐藏文件夹.ssh
$ cd .ssh
之后ls 查看文件
cp id_rsa.pubauthorized_keys
测试:
ssh localhost发现链接成功,并且无需密码。
4 ) 复制到node2 和node3 上
[hadoop@hadoop .ssh]$ scp authorized_keysnode2:/home/hadoop/.ssh/
[hadoop@hadoop .ssh]$ scp authorized_keysnode3:/home/hadoop/.ssh/
输入 yes 来继续。这会把该服务器添加到你的已知主机的列表中
The authenticity of host ‘test (192.168.9.111)’ can’t be established.
RSA key fingerprint is 03:e0:30:cb:6e:13:a8:70:c9:7e:cf:ff:33:2a:67:30.
Are you sure you want to continue connecting (yes/no)?
- 这里会提示输入密码,输入hadoop账号密码就可以了。
改动你的
authorized_keys 文件的许可权限:
[hadoop@hadoop .ssh]$chmod 644 authorized_keys
检查下能不能配置成功,从hadoop机器上ssh到node2和node3,如果不须要输入密码则配置成功,如果还须要请检查上面的配置能不能正确。
2.5 安装Hadoop
#切换为hadoop用户
su hadoop
wget http://apache.mirrors.tds.net//hadoop/common/hadoop-0.20.203.0/hadoop-0.20.203.0rc1.tar.gz
下载安装包后,直接解压安装即可:
$ tar -zxvfhadoop-0.20.203.0rc1.tar.gz
1 ) 安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。并且安装路径要一致,如果我们用HADOOP_HOME指代安装的根路径,通常,集群里的所有机器的HADOOP_HOME路径相同。
2 ) 如果集群内机器的环境完全一样,可以在一台机器上配置好,然后把配置好的软件即hadoop-0.20.2整个文件夹拷贝到其他机器的相同位置即可。
3 ) 可以将Master上的Hadoop通过scp拷贝到每一个Slave相同的目录下,同时根据每一个Slave的Java_HOME 的不同修改其hadoop-env.sh 。
4) 为了方便,使用hadoop命令或者start-all.sh等命令。
修改Master上/etc/profile: 新增以下内容:(具体的内容根据你的安装路径修改,这步只是为了方便使用) e export HADOOP_HOME=/home/hadoop/hadoop/install
exportPATH=$PATH:$HADOOP_HOME/bin
修改完毕后,执行source
/etc/profile 来使其生效。
6)配置conf/hadoop-env.sh文件
配置conf/hadoop-env.sh文件
#添加
export JAVA_HOME=/usr/lib/jvm/java-6-sun/
这里修改为你的jdk的安装位置。
测试hadoop安装:
Bin/hadoop jar hadoop-0.20.2-examples.jarwordcount conf/ /tmp/out
3. 集群配置(所有节点相同)
3.1配置文件:conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://node1:49000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop_home/var</value>
</property>
</configuration>
1)fs.default.name是NameNode的URI。hdfs://主机名:端口/
2)hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。
3.2配置文件:conf/mapred-site.xml
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>node1:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/hadoop/hadoop_home/var</value>
</property>
</configuration>
1)mapred.job.tracker是JobTracker的主机(或者IP)和端口。主机:端口。
3.3配置文件:conf/hdfs-site.xml
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/name1, /home/hadoop/name2</value> #hadoop的name目录路径
<description> </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/data1, /home/hadoop/data2</value>
<description> </description>
</property>
<property>
<name>dfs.replication</name>
<!-- 我们的集群又两个结点,所以rep两份 -->
<value>2</value>
</property>
</configuration>
1) dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
2) dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
3)dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。
3.4配置masters和slaves主从结点
配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。
vi
masters:
输入:
node1
vi slaves:
输入:
node2
node3
配置结束,把配置好的hadoop-0.20.2文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而言正确,例如:如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh
$ scp -r /home/hadoop/hadoop-0.20.2 root@node2: /home/hadoop/
4 hadoop启动
4.1 格式化一个新的分布式文件系统
先格式化一个新的分布式文件系统
$ cd
hadoop-0.20.2
$ bin/hadoop namenode -format
成功情况下系统输出:
12/02/06 00:46:50 INFO namenode.NameNode:STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = ubuntu/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.203.0
STARTUP_MSG: build =http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203-r 1099333; compiled by 'oom' on Wed May 4 07:57:50 PDT 2011
************************************************************/
12/02/0600:46:50
INFO namenode.FSNamesystem: fsOwner=root,root
12/02/06 00:46:50 INFO namenode.FSNamesystem:supergroup=supergroup
12/02/06 00:46:50 INFO namenode.FSNamesystem:isPermissionEnabled=true
12/02/06 00:46:50 INFO common.Storage: Imagefile of size 94 saved in 0 seconds.
12/02/06 00:46:50 INFO common.Storage: Storagedirectory
/opt/hadoop/hadoopfs/name1 has been successfully formatted.
12/02/06 00:46:50 INFO common.Storage: Imagefile of size 94 saved in 0 seconds.
12/02/06 00:46:50 INFO common.Storage: Storagedirectory
/opt/hadoop/hadoopfs/name2 has been successfully formatted.
12/02/06 00:46:50 INFO namenode.NameNode:SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode atv-jiwan-ubuntu-0/127.0.0.1
************************************************************/
查看输出保证分布式文件系统格式化成功
执行完后可以到master机器上看到/home/hadoop//name1和/home/hadoop//name2两个目录。在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。
4.2 启动所有节点
$ bin/start-all.sh
系统输出:
starting namenode, logging to
/usr/local/hadoop/logs/hadoop-hadoop-namenode-ubuntu.out
node2: starting datanode, loggingto /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu.out
node3: starting datanode, loggingto /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu.out
node1: starting secondarynamenode,logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-ubuntu.out
starting jobtracker, logging to/usr/local/hadoop/logs/hadoop-hadoop-jobtracker-ubuntu.out
node2: starting tasktracker,logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-ubuntu.out
node3: starting tasktracker,logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-ubuntu.out
As
you can see in slave's output above, it will automatically format it's storage
directory(specified by dfs.data.dir) if it is not formattedalready. It will
also create the directory if it does not exist yet.
执行完后可以到master(node1)和slave(node1,node2)机器上看到/home/hadoop/hadoopfs/data1和/home/hadoop/data2两个目录。
4.3 关闭所有节点
从主节点master关闭hadoop,主节点会关闭所有从节点的hadoop。
$ bin/stop-all.sh
Hadoop守护进程的日志写入到 ${HADOOP_LOG_DIR} 目录 (默认是 ${HADOOP_HOME}/logs).
${HADOOP_HOME}就是安装路径.
5 .测试
1)浏览NameNode和JobTracker的网络接口,它们的地址默认为:
NameNode
- http://node1:50070/
JobTracker - http://node2:50030/
3) 使用netstat –nat查看端口49000和49001是否正在使用。
4) 使用jps查看进程
要想检查守护进程是否正在运行,可以使用 jps 命令(这是用于 JVM 进程的ps 实用程序)。这个命令列出 5 个守护进程及其进程标识符。
5)将输入文件拷贝到分布式文件系统:
$ bin/hadoop fs -mkdir input
$ bin/hadoop fs -put conf/core-site.xml input
运行发行版提供的示例程序:
$ bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+'
6.补充
Q: bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+' 什么意思啊?
A: bin/hadoop jar(使用hadoop运行jar包)
hadoop-0.20.2_examples.jar(jar包的名字) grep (要使用的类,后边的是参数)input
output 'dfs[a-z.]+'
整个就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。
Q: 什么是grep?
A: A map/reduce program that counts the matches of a regex in the input.
查看输出文件:
将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ bin/hadoop fs -get output output
$ cat output/*
或者
在分布式文件系统上查看输出文件:
$ bin/hadoop fs -cat output/*
统计结果:
root@v-jiwan-ubuntu-0:~/hadoop/hadoop-0.20.2-bak/hadoop-0.20.2#bin/hadoop fs
-cat output/part-00000
3 dfs.class
2 dfs.period
1 dfs.file
1 dfs.replication
1 dfs.servers
1 dfsadmin
7. HDFS常用操作
hadoopdfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out 删除指定文件从HDFS上
hadoop dfs -cat in/* 查看HDFS上in目录的内容
hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 进入安全模式
8.添加节点
可扩展性是HDFS的一个重要特性,首先在新加的节点上安装hadoop,然后修改$HADOOP_HOME/conf /master文件,加入 NameNode主机名,然后在NameNode节点上修改$HADOOP_HOME/conf/slaves文件,加入新加节点主机名,再建立到新加节点无密码的SSH连接
运行启动命令:
start-all.sh
然后可以通过http://(Masternode的主机名):50070查看新添加的DataNode
9负载均衡
start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布
浙公网安备 33010602011771号