共计 10078 个字符,预计需要花费 26 分钟才能阅读完成。
本文是参考 HDFS 分布式文件系统深度的总结,以后学习的参考。
一、现在我们看一下 CentOS5.6(32)的设置流程
1,首先将虚拟机的网卡设置为 host-only
物理机器的虚拟网卡 VMnet1 的 IP 设置为 192.168.1.1,以后建立的虚拟集群都在这个网段
2,启动系统,进入 root 用户
3,CentOS 刚安装完毕,要进行初始化设置,使得一些基本命令可以直接使用,不用再输入绝对路径,
如:
[user@localhost ~]$ ifconfig
bash: ifconfig: command not found
3.1 配置 /etc/profile 文件,
在文件末加入以下语句:
PATH=$PATH:/sbin #在 PATH 变量后追加 /sbin 目录
export PATH=$PATH:/sbin#设置变量为全局的
3.2 配置 /home/user/.bash_profile 文件,
在 PATH 后面添加 /sbin:/usr/sbin:/usr/local/sbin:/usr/kerberos/sbin 这几个路径。
4,编辑 /etc/sudoers 文件,使得普通用户可以以 root 权限执行命令,就是命令前可以使用“sudo”
4.1 添加文件的写权限。chmod u+w /etc/sudoers。
4.2 编辑 /etc/sudoers 文件。在 ”root ALL=(ALL) ALL” 下面添加 ”user ALL=(ALL) ALL”(这里的 user 是用户名),退出。
4.3 注释掉:Defaults requiretty 所在的行。即:#Defaults requiretty
4.4 撤销文件的写权限。chmod u-w /etc/sudoers。
5,编辑 /etc/sysconfig/network-scripts/ifcfg-eth0,设置网卡的为静态获取 IP,并设置 IP 地址
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:0C:29:67:87:79
IPADDR=192.168.1.11
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
6,编辑 /etc/sysconfig/network 和 /etc/hosts 设置机器名
network 修改为:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=namenode0
hosts 修改为:
127.0.0.1 localhost
192.168.1.11 namenode0
127.0.0.1 namenode0(可要可不要)
7,重启虚拟机
8,可以看到 sudo 已经可以使用了,ifconfig 也可以直接用了,主机名也已经改了
需要说明的是:
VMWare 安装 centos5.6 后,例子:
选用 NAT/Birdged 方式的 ifcfg-eth0 内容如下:
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=dhcp
DHCPCLASS=
HWADDR=00:0C:29:0E:20:58
ONBOOT=yes
要进行修改如下:
首先将虚拟机的网卡设置为 host-only,物理机器的虚拟网卡 VMnet1 的 IP 设置为 192.168.1.1,以后建立的虚拟集群都在这个网段
编辑 /etc/sysconfig/network-scripts/ifcfg-eth0,设置网卡的为静态获取 IP,并设置 IP 地址
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:0C:29:67:87:79
IPADDR=192.168.1.11
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
二、安装 JDK
进入 root,安装 jdk。
进入 user/123456 用户 编辑~/.bashrc 文件(或 /etc/profile),加入以下几行
export JAVA_HOME=/home/user/jdk1.6.0_24
export JRE_HOME=/home/user/jdk1.6.0_24/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile
java -version
可以看到 java 的版本信息,安装成功
三、假设虚拟机器
现在我们看一下虚拟集群的架设流程
1,连接到虚拟机 namenode0(192.168.1.11)
2, 查看一下开机自动启动的服务,关闭其中一些不必要的,可以加快开机速度并减少内存占用
在 SecureRCT 中,直接右键就可以粘贴了,
有很多服务没必要开启
chkconfig –list
需要关闭的服务有如下几个:
echo “123456” | sudo -S 这个前缀可以使得普通用户不必在使用 root 权限
的时候再输入密码了,看一下,每次都要输入密码很麻烦。ok 了!这里没问题。
echo “123456” | sudo -S chkconfig sendmail off
echo “123456” | sudo -S chkconfig bluetooth off
echo “123456” | sudo -S chkconfig NetworkManager off
echo “123456” | sudo -S chkconfig acpid off
echo “123456” | sudo -S chkconfig apmd off
echo “123456” | sudo -S chkconfig dund off
echo “123456” | sudo -S chkconfig pand off
echo “123456” | sudo -S chkconfig capi off
echo “123456” | sudo -S chkconfig cups off
echo “123456” | sudo -S chkconfig iptables off
echo “123456” | sudo -S chkconfig ip6tables off
echo “123456” | sudo -S chkconfig irda off
echo “123456” | sudo -S chkconfig isdn off
echo “123456” | sudo -S chkconfig kudzu off
echo “123456” | sudo -S chkconfig lm_sensors off
echo “123456” | sudo -S chkconfig mdmonitor off
echo “123456” | sudo -S chkconfig pcscd off
3,通过 SecureFX 将一些必要的软件 copy 到虚拟机里,速度比较慢。copy 完了
4,关闭虚拟机
5,将虚拟机的镜像文件 copy 成 3,一共 4 个虚拟机
注意:虚拟集群需要足够大的硬盘空间,另外物理机的内存也要足够大,实验中的物理机是 8g 的内存,如果内存不是很大,用 3 - 4 个虚拟机组成集群也可以,其中要有两个是作为 namenode 节点的,其他的作为 datanode 节点,当然把虚拟机的内存调小一些也可以。
6,启动一个新的虚拟机镜像
7,一个虚拟机副本 copy 完并启动之后,vmware 会重新给其网卡分配一个 mac 地址,所以需要修改 mac 地址,IP 也要改
copy 后 mac 相同, 怎么办?,办法:在 VMware 的每个虚拟机器的 settings 中 generate 一个,那这个去修改,不能随机修改。
这样就建立了如下的几个虚拟 linux:
7.1 ifconfig 查看其它各个机器的 eth0 网卡的 IP 和 mac 地址
7.2 编辑其它各个机器的 etc/sysconfig/network-scripts/ifcfg-eth0,IP 地址
8,重启网卡
sudo service network restart
9,编辑 /etc/sysconfig/network 和 /etc/hosts 修改机器名
10,重启
11,可以看到这台虚拟机已经配置好了。
本文是参考 HDFS 分布式文件系统深度的总结,以后学习的参考。
一、现在我们看一下 CentOS5.6(32)的设置流程
1,首先将虚拟机的网卡设置为 host-only
物理机器的虚拟网卡 VMnet1 的 IP 设置为 192.168.1.1,以后建立的虚拟集群都在这个网段
2,启动系统,进入 root 用户
3,CentOS 刚安装完毕,要进行初始化设置,使得一些基本命令可以直接使用,不用再输入绝对路径,
如:
[user@localhost ~]$ ifconfig
bash: ifconfig: command not found
3.1 配置 /etc/profile 文件,
在文件末加入以下语句:
PATH=$PATH:/sbin #在 PATH 变量后追加 /sbin 目录
export PATH=$PATH:/sbin#设置变量为全局的
3.2 配置 /home/user/.bash_profile 文件,
在 PATH 后面添加 /sbin:/usr/sbin:/usr/local/sbin:/usr/kerberos/sbin 这几个路径。
4,编辑 /etc/sudoers 文件,使得普通用户可以以 root 权限执行命令,就是命令前可以使用“sudo”
4.1 添加文件的写权限。chmod u+w /etc/sudoers。
4.2 编辑 /etc/sudoers 文件。在 ”root ALL=(ALL) ALL” 下面添加 ”user ALL=(ALL) ALL”(这里的 user 是用户名),退出。
4.3 注释掉:Defaults requiretty 所在的行。即:#Defaults requiretty
4.4 撤销文件的写权限。chmod u-w /etc/sudoers。
5,编辑 /etc/sysconfig/network-scripts/ifcfg-eth0,设置网卡的为静态获取 IP,并设置 IP 地址
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:0C:29:67:87:79
IPADDR=192.168.1.11
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
6,编辑 /etc/sysconfig/network 和 /etc/hosts 设置机器名
network 修改为:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=namenode0
hosts 修改为:
127.0.0.1 localhost
192.168.1.11 namenode0
127.0.0.1 namenode0(可要可不要)
7,重启虚拟机
8,可以看到 sudo 已经可以使用了,ifconfig 也可以直接用了,主机名也已经改了
需要说明的是:
VMWare 安装 centos5.6 后,例子:
选用 NAT/Birdged 方式的 ifcfg-eth0 内容如下:
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=dhcp
DHCPCLASS=
HWADDR=00:0C:29:0E:20:58
ONBOOT=yes
要进行修改如下:
首先将虚拟机的网卡设置为 host-only,物理机器的虚拟网卡 VMnet1 的 IP 设置为 192.168.1.1,以后建立的虚拟集群都在这个网段
编辑 /etc/sysconfig/network-scripts/ifcfg-eth0,设置网卡的为静态获取 IP,并设置 IP 地址
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:0C:29:67:87:79
IPADDR=192.168.1.11
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
二、安装 JDK
进入 root,安装 jdk。
进入 user/123456 用户 编辑~/.bashrc 文件(或 /etc/profile),加入以下几行
export JAVA_HOME=/home/user/jdk1.6.0_24
export JRE_HOME=/home/user/jdk1.6.0_24/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile
java -version
可以看到 java 的版本信息,安装成功
四、单机伪分布式部署(简单化 conf)
我们首先拿 namenode0 进行伪分布式部署(conf 简单配置)
1、实现 SSH 无密码登陆
1.1 实现无密码本机登录 namenode0:
ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa
直接回车,完成后会在 ~/.ssh/ 生成两个文件:id_dsa 和 id_dsa.pub。这两个是成对出现,类似钥匙和锁。再把 id_dsa.pub 追加到授权 key 里面 (当前并没有 authorized_key s 文件):
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
还是要输入密码,一般这种情况都是因为目录或文件的权限问题,
sudo tail /var/log/secure -n 20
看看系统日志,确实是权限问题,、ok 了,.ssh 下的 authorized_keys 权限为 600,其父目录和祖父目录应为 755,
$chmod 755 .
$chmod 755 ~/.ssh
$chmod 600 ~/.ssh/authorized_keys
2、下载 Hadoop-1.0.4.tar.gz 下载 hadoop-1.0.4.bin.tar.gz 也可以。
3, 修改 hadoop 配置文件,指定 JDk 安装路径
vi conf/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6.0_21
6, 修改 Hadoop 核心配置文件 core-site.xml,配置 HDFS 的地址和端口号
vi conf/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
7, 修改 Hadoop 中 HDFS 的配置,修改 replication
vi conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
8, 修改 Hadoop 中 MapReduce 的配置文件,配置的是 JobTracker 的地址和端口
vi conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
9, 格式化 Hadoop 的文件系统 HDFS
bin/hadoop namenode -format
10, 启动 hadoop
bin/start-all.sh
最后,验证 Hadoop 是否安装成功。打开浏览器,分别输入一下网址:
http://localhost:50030 (MapReduce 的 Web 页面)
http://localhost:50070 (HDfS 的 web 页面)
如果都能查看,说明安装成功。
五、分布式集群配置
1,准备 3 个服务器,分别为
机器名 IP 地址 作用
namenode0 192.168.1.11 NameNode,JobTracker(也可作为 DataNode,TaskTracker,但没这样做)
datanode00 192.168.1.13 DataNode,TaskTracker
datanode01 192.168.1.14 DataNode,TaskTracker
注:3 台主机必须使用相同的用户名运行 hadoop
1.2 实 现无密码登录其他机器
拷贝 id_dsa.pub 文件到其他机器,scp 是远程 copy 命令,192.168.1.11 上的 id_dsa.pub 已经 copy 到其他机器上了,同样的,将每台机器上的 id_dsa.pub copy 到其他机器上。登录其他机器,执行 cat 1x.pub >> .ssh/authorized_keys ok,都配通了,ssh 的无密码登陆配置,容易出现很多问题,配置时一定要注意!!!
无密码登录是为了在 namenode 启动时能登录从而启动 datanode,所以只需要 master->slave 拷贝就行了。而此处是互相拷贝(datanode 不过不需要登录 namenode 就不需要 copy 了)。如下图
对 namenode 生成 key,同样其它机器也类似,之后把 1.11 的 copy 到其它机器上,
同样其它机器生成后也需要 scp 到 1.11 上,如下的是把 datanode00 的 copy 到其它机器上
如下是 namenode0 和 datanode00 执行 cat 1x.pub >> .ssh/authorized_keys
进入 user/123456 账户分别在这两个主机上,按照单机版的安装方法,安装 hadoop,不过为了可以区别开,下面的流程是先对 namenode0 进行配置,然后 copy 拷贝配置后的 hadoop-1.0.4 到其它机器上并修改 conf 中的文件。
2,修改 /usr/local 目录的权限,将 hadoop-1.0.4 的 tar 包 copy 到 /usr/local/ 下
修改 权限 sudo chmod 777 /usr/local/
如果从 datanode00 copy 到 datanode01 上,则需要先[user@datanode01 .ssh]$ sudo chmod 777 /usr/local/
才能[user@datanode00 local]$ scp -r /usr/local/hadoop-1.0.4 datanode01:/usr/local
不然会提示文件权限,不允许访问
3, 配置 ~/.bashrc
在最后加入
export Hadoop_HOME=/usr/local/hadoop-1.0.4
export PATH=$HADOOP_HOME/bin:$PATH
5, 配置 /etc/hosts
192.168.1.11 namenode0
#192.168.1.12 namenode1
192.168.1.13 datanode00
192.168.1.14 datanode01
6, 配置 conf/masters 和 conf/slaves
conf/masters
192.168.1.11
conf/slaves
192.168.1.13
192.168.1.14
7, 配置 conf/hadoop-env.sh
加入
export JAVA_HOME=/usr/java/jdk1.6.0_21
8, 配置 conf/core-site.xml
加入
<name>fs.default.name</name>
<!–<value>hdfs://0.0.0.0:9000</value> –>
<value>hdfs://namenode0:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
9, 配置 conf/hdfs-site.xml
加入
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.http.address</name>
<!– <value>0.0.0.0:50070</value>backup –>
<value>192.168.1.11:50070</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/local/namenode</value>
</property>
<property>
<name>dfs.name.edits.dir</name>
<value>/usr/local/hadoop/local/editlog</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/block</value>
</property>
10, 建立相关的目录(程序会根据上面的配置自动创建目录)
mkdir /usr/local/hadoop/tmp //hadoop 临时目录
mkdir /usr/local/hadoop/local
mkdir /usr/local/hadoop/local/namenode // 镜像存储目录
mkdir /usr/local/hadoop/local/editlog // 日志存储目录
mkdir /usr/local/hadoop/block // 数据块存储目录
如 namenode00, 虽然建立的 block 目录单,它不需要在目录,程序就不会创建,而 datanode 只会创建 tmp 和 block,不会创建 local。
注意 如果在 cygwin 下这样配置,不会自动创建,而且手动创建后需要修改权限为 755,不然会出现 tasktracker 启动失败问题,可以看 tasktrack 的日志
[user@namenode0 local]$ ls -sR hadoop
hadoop:
total 16
8 local 8 tmp
hadoop/local:
total 16
8 editlog 8 namenode
hadoop/local/editlog:
total 28
8 current 8 image 4 in_use.lock 8 previous.checkpoint
hadoop/local/editlog/current:
total 32
16 edits 8 fstime 8 VERSION
hadoop/local/editlog/image:
total 8
8 fsimage
hadoop/local/editlog/previous.checkpoint:
total 24
8 edits 8 fstime 8 VERSION
hadoop/local/namenode:
total 28
8 current 8 image 4 in_use.lock 8 previous.checkpoint
hadoop/local/namenode/current:
total 24
8 fsimage 8 fstime 8 VERSION
hadoop/local/namenode/image:
total 8
8 fsimage
hadoop/local/namenode/previous.checkpoint:
total 24
8 fsimage 8 fstime 8 VERSION
hadoop/tmp:
total 8
8 dfs
hadoop/tmp/dfs:
total 8
8 namesecondary
hadoop/tmp/dfs/namesecondary:
total 4
4 in_use.lock
11. 修改 namenode0 配置文件 masters
12 修改 namenode0 配置文件 slaves
13. 修改 mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>namenode0:9001</value>
</property>
<property>
<name>mapred.child.tmp</name>
<value>/usr/local/hadoop/tmp</value>
</property>
14,将 hadoop 远程 copy 到其他节点
scp -r hadoop-1.0.4 192.168.1.13:/usr/local/) 192.168.1.12 也可以写为 datanode00(也可 scp -r hadoop-1.0.4user@192.168.1.13:/usr/local/)
15,格式化 Active namenode(192.168.1.11)
bin/hadoop namenode -format
16,启动集群 bin/start-all.sh
更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13