Hadoop集群搭建过程记录

http://snowfigure.diandian.com/post/2012-09-24/40039595277


Hadoop集群搭建过程记录

一、前言

成为研究僧(研究生),有幸到BOSS冯老师手下接受“再改造”,一直“风闻”冯BOSS下面的学生很“严谨”,现在发现真的很严谨、很累。每周两次例会不说了,现在接手的项目就让我彻底崩溃,毁我“三观”啊。

好了废屁不扯了,进入正题。现在正在做“海量异构数据整合”的这样研究性课题,需要使用到hadoop平台、arcgis平台,还有神马oracle、weblogic....后续会用到神马我真心不知道。反正我现在的任务就是把hadoop平台搭建出来并把文件存储封装成API/接口给上层调用,对于数据整合这部分.......苍天啊大地啊、数据挖掘真的好难。苦%>_<%泪奔......

二、运行环境与准备工作(非安装过程,用于随时查看过程的)

在做集群开发之前我已经实现了伪分布式hadoop(单一ubuntu 11 下)以及分布式hadoop(redhat9下,使用root权限),这两天搞异OS(Ubuntu做Master,redhat做Slave,使用同一的普通用户权限,把我搞得特别崩溃),就是搞不起来,到了start-dfs.sh这一段直接告诉我permission denied。偶滴神呢......

我现在开始尝试安装1Master 3Slave的hadoop集群,给出配置。

1
2
3
4
5
6
7
8
实体机
     OS    windows 7 x64 旗舰版
     内存    8G
     CPU    i5- 2450
                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                          
虚拟机
     vmware workstation 8

虚拟机配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
网络环境
     实体机 无线网+静态IP
                                                                                                                                                                                                                                      
虚拟机
     网卡    VMware Virtual Ethernet Adapter for VMnet8
     模式    NAT转换
     地址   
             IPADDR     192.168 . 68.1
             NETMASK    255.255 . 255.0
NAT Setting
             GATEWAY    192.168 . 68.2
             Subnet IP  192.168 . 68.0
             NETMASK    255.255 . 255.0
DHCP Setting
             Subnet IP  192.168 . 68.0
             NETMASK    255.255 . 255.0
             start IP   192.168 . 68.128
             end   IP   192.168 . 68.254

 

软件准备

1
2
3
4
5
6
7
hadoop -0.20 . 2      http://hadoop.apache.org/core/releases.html
                                                                                                                                                                                                                                   
jdk -6 *-linux-x 64 *.bin  
     (下载JDK,不是JRE。要 1.6 以上, 1.6 一下会出问题)
     http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase 6 -419409 .html#jre -6 u 25 -oth-JPR
                                                                                                                                                                                                                                   
ubuntu -12.04 . 1 -desktop-i 386    Ubuntu官网

IP以及名称分配

1
2
3
4
5
节点名称        IP段            节点类型        职责
master    192.168.68.200        Namenode    Namenode+Jobtracker
slave1    192.168.68.131        Datanode    Datanode+Tasktracker
slave2    192.168.68.132        Datanode    Datanode+Tasktracker
slave3    192.168.68.133        Datanode    Datanode+Tasktracker

统一用户以及文件安装存放路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
用户名        hadoop
密  码        hadoop123
群  组        hadoop
文件夹        /home/hadoop
                                                                                                                                                                                                                          
安装路径      /home/hadoop/hadoopinstall/
临时文件      /home/hadoop/tmp/
SSH密钥       /home/hadoop/.ssh/
                                                                                                                                                                                                                          
                                                                                                                                                                                                                          
JDK安装(一下二选一,具体根据你下载的JDK包模式)
(1)./jdk-6u18-linux -x64-rpm.bin 
(2)./jdk-6u18-linux -x64.bin
                                                                                                                                                                                                                          
区别
     ./jdk-6u18-linux -x64-rpm.bin 会自动安装在/usr/java 下。
     ./jdk-6u18-linux- x64.bin 生成的 jdk1.6.0_18 文件夹需要手动放到/usr/java 或者其它自定义目录下。

 

三、一些基础知识

(1)Namenode和Datanode一些基本理解

对于 Hadoop 来说,在 HDFS 看来,节点分为 Namenode  和Datanode,      其中 Namenode 只有一个,Datanode 可以是很多;

在 MapReduce 看来,节点又分为 Jobtracker 和  Tasktracker,其中Jobtracker 只有一个,Tasktracker 可以是很多。

所以通常有两台master,一台作为 NameNode,一台作为 JobTracker,剩下的都为slaves,同时当做 DataNode 和  TaskTracker 使用。

当然也可以将 NameNode 和 JobTracker 都放在一台 master 上面。

 

四、安装过程一

(1)虚拟机安装ubuntu

(我选择的是安装语言汉语安装,键盘布局英语美国)

(姓名snowfigure密码hadoop123)

(2)配置master的IP为静态IP地址

1
2
3
4
5
IPADDR    192.168.68.200
GATEWAY   192.168.68.2
NETMASK   255.255.255.0
ROUTE     192.168.68.2
DNS       192.168.68.2

(3)安装ssh    

1
sudo apt-get install ssh

(4)安装Vmtools

【文件操作参考http://www.cnblogs.com/lwm-1988/archive/2011/09/13/2174538.html 】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
有个文件,先复制到root /temp 目录下。然后解压安装就行了。详细的安装步骤如下:
  先以root身份登入。
  VMware Tools所在位置:VMware 安装路径 \VMware\VMware Workstation\linux.iso
                                                                                                                                                                                      
  [root@rd01 ~] # mount /cdrom
  # 有时可能加载不了,这时就要先将系统关闭,再手动指定 ISO 映像,看下图
  [root@rd01 ~] # cd /cdrom
  [root@rd01 ~] # ls -a
  [root@rd01 ~] # cp VMwareTools-5.5.1-19175.tar.gz /tmp
  [root@rd01 ~] # cd /tmp
  [root@rd01 ~] # tar zxpf VMwareTools-5.5.1-19175.tar.gz
  [root@rd01 ~] # cd vmware-tools-distrib
  [root@rd01 vmware-tools-distrib] # ./vmware-install.pl
  Creating a new installer database using the tar3 format .
                                                                                                                                                                                      
  Installing the content of the package.
                                                                                                                                                                                      
  # 安装过程的画面,全部使用默认值,一直按 Enter 就对了
  # 然后重启

 

(5)从windows系统把jdk6和hadoop-0.20.2复制到tmp目录下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
snowfigure@snowfigure-virtual-machine:/tmp$ ll
  总用量 126648
  drwxrwxrwt 13 root       root           4096  9月 24 15:41 ./
  drwxr-xr-x 23 root       root           4096  9月 24 15:05 ../
  drwxrwxrwt  2 lightdm    lightdm        4096  9月 24 15:38 at-spi2/
  -rwxrw-rw-  1 snowfigure snowfigure 44575568  9月 24 13:19 hadoop-0.20.2.tar.gz*
  -rw-rw-r--  1 snowfigure snowfigure        0  9月 24 15:38 ibus.log
  drwxrwxrwt  2 root       root           4096  9月 24 15:38 .ICE-unix/
  -rwxrw-rw-  1 snowfigure snowfigure 85052342  9月 13 16:45 jdk.bin*
  drwx------  2 snowfigure snowfigure     4096  9月 24 15:38 keyring-8fpbGj/
  drwx------  2 lightdm    lightdm        4096  9月 24 15:38 pulse-2L9K88eMlGn7/
  drwx------  2 snowfigure snowfigure     4096  9月 24 15:38 pulse-Md3Lr53do8SK/
  drwx------  2 root       root           4096  9月 24 15:38 pulse-PKdhtXMmr18n/
  drwx------  2 snowfigure snowfigure     4096  9月 24 15:38 ssh-dJCuhHiE1862/
  -rw-rw-r--  1 lightdm    lightdm           0  9月 24 15:38 unity_support_test.1
  drwxrwxrwt  5 root       root           4096  9月 24 15:41 VMwareDnD/
  drwx------  2 root       root           4096  9月 24 15:38 vmware-root/
  drwx------  2 snowfigure snowfigure     4096  9月 24 15:38 vmware-snowfigure/
  -r--r--r--  1 root       root             11  9月 24 15:38 .X0-lock
  drwxrwxrwt  2 root       root           4096  9月 24 15:38 .X11-unix/
  snowfigure@snowfigure-virtual-machine:/tmp$

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
snowfigure@snowfigure-virtual-machine: /tmp $ sudo cp jdk.bin /usr/local
  snowfigure@snowfigure-virtual-machine: /tmp $ cd /usr/local
  snowfigure@snowfigure-virtual-machine: /usr/local $ ll
  总用量 83100
  drwxr-xr-x 10 root root     4096  9月 24 15:44 ./
  drwxr-xr-x 10 root root     4096  8月 18 06:05 ../
  drwxr-xr-x  2 root root     4096  8月 18 06:05 bin/
  drwxr-xr-x  2 root root     4096  8月 18 06:05 etc/
  drwxr-xr-x  2 root root     4096  8月 18 06:05 games/
  drwxr-xr-x  2 root root     4096  8月 18 06:05 include/
  -rwxr--r--  1 root root 85052342  9月 24 15:44 jdk.bin*
  drwxr-xr-x  3 root root     4096  8月 18 06:05 lib/
  lrwxrwxrwx  1 root root        9  9月 24 14:57 man -> share /man/
  drwxr-xr-x  2 root root     4096  8月 18 06:05 sbin/
  drwxr-xr-x  7 root root     4096  8月 18 06:08 share/
  drwxr-xr-x  2 root root     4096  8月 18 06:05 src/
  snowfigure@snowfigure-virtual-machine: /usr/local $

6、安装JDK到/usr/local目录下

1
2
3
snowfigure@snowfigure-virtual-machine: /usr/local $ sudo -sH
  root@snowfigure-virtual-machine: /usr/local # chmod +x jdk.bin
  root@snowfigure-virtual-machine: /usr/local # ./jdk.bin

当然也可以再usr目录下建立java文件夹,然后把jdk让进去。

1
2
3
4
5
6
7
root@snowfigure-virtual-machine: /usr/local/jdk1 .6.0_25 # mkdir /usr/java
root@snowfigure-virtual-machine: /usr/local/jdk1 .6.0_25 # mv
root@snowfigure-virtual-machine: /usr/local/jdk1 .6.0_25 # cd ../
root@snowfigure-virtual-machine: /usr/local # ls
bin  etc  games  include  jdk1.6.0_25  jdk.bin  lib  man  sbin  share  src
root@snowfigure-virtual-machine: /usr/local # mv jdk1.6.0_25/ /usr/java/jdk1.6
root@snowfigure-virtual-machine: /usr/local #

7、修改/etc/profile文件,添加全局变量

1
2
3
4
5
root@snowfigure-virtual-machine: /usr/java # gedit /etc/profile
                                                                                                                                                              
(gedit:2647): GLib-GIO-WARNING **: Missing callback called fullpath = /root/ . local /share/recently-used .xbel
                                                                                                                                                              
root@snowfigure-virtual-machine: /usr/java # cat /etc/profile

添加内容分

1
2
3
export JAVA_HOME= /usr/java/jdk1 .6
export PATH=$PATH:$JAVA_HOME /bin
export CLASSPATH=.:$JAVA_HOME /lib

添加后内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
                                                                                                                                                           
if [ "$PS1" ]; then
   if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
     # The file bash.bashrc already sets the default PS1.
     # PS1='\h:\w\$ '
     if [ -f /etc/bash .bashrc ]; then
       . /etc/bash .bashrc
     fi
   else
     if [ "`id -u`" - eq 0 ]; then
       PS1= '# '
     else
       PS1= '$ '
     fi
   fi
fi
                                                                                                                                                           
# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
                                                                                                                                                           
if [ -d /etc/profile .d ]; then
   for i in /etc/profile .d/*.sh; do
     if [ -r $i ]; then
       . $i
     fi
   done
export JAVA_HOME= /usr/java/jdk1 .6
export PATH=$PATH:$JAVA_HOME /bin
export CLASSPATH=.:$JAVA_HOME /lib
   unset i
fi

然后运行使配置生效

1
root@snowfigure-virtual-machine: /usr/java # source /etc/profile

测试安装是否成功

1
2
3
4
root@snowfigure-virtual-machine: /usr/local # java -version
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) Client VM (build 20.0-b11, mixed mode, sharing)

 

8、修改/etc/hosts文件

原始文件

1
2
3
4
5
6
7
8
9
10
127.0.0.1   localhost
127.0.1.1  snowfigure-virtual-machine
                                                                                                                                                
                                                                                                                                                
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

修改后文件

1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1   localhost
127.0.1.1  snowfigure
192.168.68.200 master
192.168.68.131 slave1
192.168.68.132 slave2
192.168.68.133 slave3
                                                                                                                                                
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

 

修改后貌似需要重启才能完事。没有找到立即生效的指令,求大神帮忙、指教

 

9、新建hadoop用户

1
2
3
4
5
6
root@snowfigure-virtual-machine:/ # useradd hadoop
root@snowfigure-virtual-machine:/ # passwd hadoop
输入新的 UNIX 密码: hadoop123
重新输入新的 UNIX 密码: hadoop123
passwd :已成功更新密码
root@snowfigure-virtual-machine:/ #

上面貌似登陆不了

所以就出现了下面这个了

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
root@snowfigure-virtual-machine: /etc # userdel hadoop
  root@snowfigure-virtual-machine: /etc # useradd hadoop
  root@snowfigure-virtual-machine: /etc # passwd hadoop
  输入新的 UNIX 密码:
  重新输入新的 UNIX 密码:
  passwd :已成功更新密码
  root@snowfigure-virtual-machine: /etc # sudo groupadd hadoop
  sudo : 无法解析主机:snowfigure-virtual-machine
  groupadd: group 'hadoop' already exists
  root@snowfigure-virtual-machine: /etc # sudo usermod -g hadoop hadoop
  sudo : 无法解析主机:snowfigure-virtual-machine
  usermod :无改变
  root@snowfigure-virtual-machine: /etc # gedit
  root@snowfigure-virtual-machine: /etc # gedit /etc/hosts
  root@snowfigure-virtual-machine: /etc # usermod -g hadoop hadoop
  usermod :无改变
  root@snowfigure-virtual-machine: /etc # passwd -e hadoop
  passwd : password expiry information changed.
  root@snowfigure-virtual-machine: /etc # mkdir /home/hadoop
  root@snowfigure-virtual-machine: /etc # cd /home
  root@snowfigure-virtual-machine: /home # ls
  hadoop  snowfigure
  root@snowfigure-virtual-machine: /home # chmod 700 -r /home/hadoop
  chmod : 无法访问 "700" : 没有那个文件或目录
  root@snowfigure-virtual-machine: /home # chmod -r hadoop/
  root@snowfigure-virtual-machine: /home # chown hadoop:hadoop hadoop/
  root@snowfigure-virtual-machine: /home #

可以登录

切换到hadoop用户登录

 

10、(1)先安装hadoop吧

*******************************************************************************************************************************

/*下面的做法都有问题,直接使用图形化界面创建就可以了*/

在/home/hadoop文件夹下面新建hadoopinstall文件夹

刚开始遇到这个问题

1
2
3
$ sudo -sH
  [ sudo ] password for hadoop:
  hadoop 不在 sudoers 文件中。此事将被报告。

修改方式如下

root登录(我是在snowfigure用户模式下进入root权限的)

1
2
3
4
进入超级用户模式。也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。(当然,你也可以直接用root用)
添加文件的写权限。也就是输入命令"chmod u+w /etc/sudoers"。
编辑/etc/sudoers文件。也就是输入命令"vim /etc/sudoers",输入"i"进入编辑模式,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存(就是先按一 下Esc键,然后输入":wq")退出。
撤销文件的写权限。也就是输入命令"chmod u-w /etc/sudoers"。
1
2
root    ALL=(ALL:ALL) ALL
hadoop  ALL=(ALL:ALL) ALL

【参考:http://blog.csdn.net/coldwin_415/article/details/4650901 】

/*使用图形化界面创建吧*/

*******************************************************************************************************************************

(2)在hadoop用户下把hadoop安装包复制到/home/hadoop/文件夹下

1
hadoop@snowfigure-virtual-machine::~$ tar -zxvf hadoop-0.20.2. tar .gz

如果无法向vmware里面复制东西的话,再安装一遍vmtools,或者重启一下就可以。

然后把hadoop-0.20.2重命名为hadoopinstall

1
hadoop@snowfigure-virtual-machine:~$ mv /home/hadoop/hadoop-0 .20.2/ /home/hadoop/hadoopinstall/

 

(3)配置/etc/profile

1
2
3
hadoop@snowfigure-virtual-machine:~$ sudo -sH
[ sudo ] password for hadoop:
root@snowfigure-virtual-machine: /home/hadoop # gedit /etc/profile

添加以下内容

1
2
export HADOOP_HOME= /home/hadoop/hadoopinstall
export PATH=$PATH:$HADOOP_HOME /bin

最后内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
                                                                                       
if [ "$PS1" ]; then
   if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
     # The file bash.bashrc already sets the default PS1.
     # PS1='\h:\w\$ '
     if [ -f /etc/bash .bashrc ]; then
       . /etc/bash .bashrc
     fi
   else
     if [ "`id -u`" - eq 0 ]; then
       PS1= '# '
     else
       PS1= '$ '
     fi
   fi
fi
                                                                                       
# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
                                                                                       
if [ -d /etc/profile .d ]; then
   for i in /etc/profile .d/*.sh; do
     if [ -r $i ]; then
       . $i
     fi
   done
export JAVA_HOME= /usr/java/jdk1 .6
export PATH=$PATH:$JAVA_HOME /bin
export CLASSPATH=.:$JAVA_HOME /lib
export HADOOP_HOME= /home/hadoop/hadoopinstall
export PATH=$PATH:$HADOOP_HOME /bin
   unset i
fi

然后source /etc/profile使变化生效

1
root@snowfigure-virtual-machine: /home/hadoop # source /etc/profile

 

(4)修改 Hadoop 的配置文件

//masters 文件修改成

1
master

//slaves 文件修改成

1
2
3
slave1
slave2
slave3

//hadoop-env.sh 文件修改成

1
2
3
# The java implementation to use.  Required.
# export JAVA_HOME=/usr/lib/j2sdk1.5-sun
export JAVA_HOME=/usr/java/jdk1.6

 

okay,公共使用的环境都已经搭配好了,现在修改一下网络名,然后把虚拟机复制三份做slave,并在三份slave里面分别修改网络名、静态IP地址等

然分开别配置master和slave的hadoop配置文件(可以先复制一个slave,然后slave修改完成后再把修改后的slave复制成两份)

修改主机名方法一(测试没有通过)

1
2
3
设置主机名称( hostname )
  使用下面的命令来查看当前主机的主机名称: sudo /bin/hostname
  使用下面的命令来设置当前主机的主机名称: sudo /bin/hostname newname

【参考http://blog.csdn.net/jiusifeng/article/details/7583555 】

修改主机名方法二(测试通过)

1
hadoop@snowfigure-virtual-machine: /etc $ sudo gedit hostname

Linux主机名是在安装Linux操作系统的过程中设定的,并作为网络中的某一台主机的唯一标志,但是在安装好Linux系统后,如果想修改主机名,该怎么办呢?本文介绍基于Ubuntu Desktop 9.04。

1、快速查看主机名

在Ubuntu系统中,快速查看主机名有两种方法:一是打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后;二是在终端窗口中输入命令:hostname或uname –n,均可以查看到当前主机名。

2、临时修改主机名

修改主机名最为快速的方法就是使用命令“hostname 新主机名”来改变当前主机名,其中“新主机名”可以用任何合法字符串来表示。不过采用这种方式,新主机名并不保存在系统中,重启系统后主机名将恢复为原先的主机名称。

3、永久修改主机名

在Ubuntu系统中永久修改主机名也比较简单。主机名存放在/etc/hostname文件中,修改主机名时,编辑hostname文件,在文件中输入新的主机名并保存该文件即可。重启系统后,参照上面介绍的快速查看主机名的办法来确认主机名有没有修改成功。

值得指出的是,在其他Linux发行版中,并非都存在/etc/hostname文件。如Fedora发行版将主机名存放在/etc/sysconfig/network文件中。所以,修改主机名时应注意区分是哪种Linux发行版。

【参考:http://www.cnblogs.com/bearcat/archive/2012/05/13/2498045.html  】

1
hadoop@master:~$

 

五、安装过程二

   关闭ubuntu系统,复制一个slave,进入slave修改主机名为slave1,修改ip为192.168.68.131。

 

1、修改master下面的hadoop配置文件(推荐是把所有的配置写在core-site.xml中的)

core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<? xml version = "1.0" ?>
  <? xml-stylesheet type = "text/xsl" href = "configuration.xsl" ?>
                                       
  <!-- Put site-specific property overrides in this file. -->
  <!-- hadoop 的 tmp 目录路径-->
  <!-- 心跳间隔时间,5000 秒=40 分-->
  < configuration >
     <

你可能感兴趣的:(Hadoop集群搭建过程记录)