hadoop2.0全分布环境搭建

来源:互联网 发布:three.js视频教程下载 编辑:程序博客网 时间:2024/05/26 19:18

本文转载自:http://www.iteblog.com/archives/817 

经过好多天的各种折腾,终于在几台电脑里面配置好了Hadoop2.2.0分布式系统,现在总结一下如何配置。

  前提条件:
  (1)、首先在每台Linux电脑上面安装好JDK6或其以上版本,并设置好JAVA_HOME等,测试一下java、javac、jps等命令是否可以在终端使用,如何配置JDK这里就不说了;
  (2)、在每台Linux上安装好SSH,如何安装请参加《Linux平台下安装SSH》。后面会说如何配置SSH无密码登录。

  有了上面的前提条件之后,我们接下来就可以进行安装Hadoop分布式平台了。步骤如下:

  1、先设定电脑的IP为静态地址:

  由于各个Linux发行版本静态IP的设置不一样,这里将介绍CentOS、Ubunt、Fedora 19静态IP的设置步骤:
  (1)、CentOS静态IP地址设置步骤如下:

1[wyp@wyphadoop]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
2 
3在里面添加下面语句:
4 
5IPADDR=192.168.142.139
6NETMASK=255.255.255.0
7NETWORK=192.168.0.0

里面的IPADDR地址设置你想要的,我这里是192.168.142.139。
设置好后,需要让IP地址生效,运行下面命令:

1[wyp@wyphadoop]$ sudo service network restart
2Shutting down interfaceeth0:  Device state: 3(disconnected)
3                                                           [  OK  ]
4Shutting down loopback interface:                          [  OK  ]
5Bringing up loopback interface:                            [  OK  ]
6Bringing up interfaceeth0:  Active connection state: activated
7Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/7
8                                                           [  OK  ]
9[wyp@wyphadoop]$

然后运行ifconfig检验一下设置是否生效:

01[wyp@wyphadoop]$ ifconfig
02eth0      Link encap:Ethernet  HWaddr 00:0C:29:9F:FB:C0 
03          inet addr:192.168.142.139 Bcast:192.168.142.255 Mask:255.255.255.0
04          inet6 addr: fe80::20c:29ff:fe9f:fbc0/64Scope:Link
05          UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1
06          RX packets:389330errors:0dropped:0overruns:0frame:0
07          TX packets:171679errors:0dropped:0overruns:0carrier:0
08          collisions:0txqueuelen:1000
09          RX bytes:473612019(451.6MiB)  TX bytes:30110196(28.7MiB)
10 
11lo        Link encap:Local Loopback 
12          inet addr:127.0.0.1 Mask:255.0.0.0
13          inet6 addr: ::1/128Scope:Host
14          UP LOOPBACK RUNNING  MTU:16436 Metric:1
15          RX packets:80221errors:0dropped:0overruns:0frame:0
16          TX packets:80221errors:0dropped:0overruns:0carrier:0
17          collisions:0txqueuelen:0
18          RX bytes:1051174395(1002.4MiB)  TX bytes:1051174395(1002.4MiB)
19 
20[wyp@wyphadoop]$

可见IP地址已经设置为192.168.142.139了!
  (2)、Ubuntu静态IP地址设置步骤如下:

1wyp@node1:~$ sudo vim /etc/network/interfaces
2 
3在里面添加:
4 
5auto eth0
6iface eth0 inet static
7address192.168.142.140
8netmask255.255.255.0
9gateway192.168.142.1

同样需要让IP地址生效:

1wyp@node1:~$ sudo /etc/init.d/networking restart

同样也是输入ifconfig来检验IP设置是否生效,这里就不说了。
  (3)、Fedora 19静态IP地址设置步骤如下(Fedora其他版本的静态IP设置和19版本不一样,这里就不给出了):

1[wyp@wypnetwork-scripts]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
2 
3在里面添加:
4 
5IPADDR0=192.168.142.138
6NETMASK0=255.255.255.0
7GATEWAY0=192.168.142.0

设置好后,需要让IP地址生效,运行下面命令:

1[wyp@wypnetwork-scripts]$ sudo service network restart
2Restarting network (via systemctl):                        [  确定  ]

同样也是输入ifconfig来检验IP设置是否生效,这里就不说了。

  2、设置各个主机的hostname

  在步骤1中,我分别配置了CentOS、Ubuntu以及Fedora三台主机,我打算用它们作为集群中的电脑,其中Fedora主机作为master,其余的两台电脑作为slave。这步将说说如何修改这三台电脑的hostname:
  (1)、Fedora19 设置hostname步骤如下:

1[wyp@wypnetwork-scripts]$ sudo hostnamectl set-hostname master
2 
3查看设置是否生效,运行下面命令
4 
5[wyp@wypnetwork-scripts]$ hostname
6master

  (2)、Ubuntu设置hostname步骤如下:

1wyp@node1:~$ sudo vim /etc/hostname
2 
3在里面添加自己需要取的hostname,我这里是取node1。
4查看设置是否生效,运行下面命令
5 
6wyp@node1:~$ hostname
7node1

  (3)、CentOS设置hostname步骤如下:

01[wyp@nodenetwork-scripts]$ sudo vim /etc/sysconfig/network
02 
03将里面的HOSTNAME修改为你想要的hostname,我这里是取node
04 
05HOSTNAME=node
06 
07查看设置是否生效,运行下面命令
08 
09[wyp@nodenetwork-scripts]$ hostname
10node

  3、在以上三台电脑的/etc/hosts添加以下配置:

1[wyp@master~]$ sudo vim /etc/hosts
2 
3在里面添加以下语句
4 
5192.168.142.138master
6192.168.142.139node
7192.168.142.140node1

其实就是上面三台电脑的静态IP地址和其hostname的对应关系。检验是否修改生效,可以用ping来查看:

1[wyp@master~]$ ping node
2PING node (192.168.142.139)56(84) bytes of data.
364bytes from node (192.168.142.139): icmp_seq=1ttl=64time=0.541ms
464bytes from node (192.168.142.139): icmp_seq=2ttl=64time=0.220ms
5^C
6--- node ping statistics ---
72packets transmitted, 2received, 0% packet loss, time 1000ms
8rtt min/avg/max/mdev = 0.220/0.380/0.541/0.161ms
9[wyp@master~]$

如果上面的命令可以ping通,说明设置生效了。

  4、设置SSH无密码登陆

  在本博客里面已经介绍了如何安装SSH(《Linux平台下安装SSH》),和怎么设置SSH无密码登陆(《Ubuntu和CentOS如何配置SSH使得无密码登陆》),这里主要是想说一下需要注意的事项,首先在master主机上面设置好了SSH无密码登陆之后,然后将生成的id_dsa.pub文件拷贝到node和node1上面去,可以运行下面的命令:

1[wyp@localhost~]$ cat /home/wyp/.ssh/id_dsa.pub |    \
2ssh wyp@192.168.142.139'cat - >> ~/.ssh/authorized_keys'

  要确保192.168.142.139主机的SSH服务是运行的。wyp@192.168.142.139的wyp是你需要登录192.168.142.139主机的用户名。同样,你也可以用上面类似的命令将id_dsa.pub拷贝到192.168.142.140主机上面去。
  当然,你也可以用scp命令将文件拷贝到相应的主机:

1[wyp@masterDocuments]$ scp /home/wyp/.ssh/id_dsa.pub     \
2wyp@192.168.142.139:~/.ssh/authorized_keys

检验是否可以从master无密码登录node和node1,可以用下面的命令:

1[wyp@masterDocuments]$ ssh node
2The authenticity of host 'node (192.168.142.139)' can't be established.
3RSA key fingerprint is ae:99:43:f0:cf:c6:a9:82:6c:93:a1:65:54:70:a6:97.
4Are you sure you want to continueconnecting (yes/no)? yes
5Warning: Permanently added 'node,192.168.142.139'(RSA)
6to the list of known hosts.
7Last login: Wed Nov  614:54:552013 from master
8[wyp@node~]$

  第一次运行上面的命令会出现上述信息。上面[wyp@node ~]已经暗示了我们成功从master无密码登录node;如果在登陆过程中出现了需要输入密码才能登录node,说明SSH无密码登录没成功,一般都是文件权限的问题,解决方法请参照《Ubuntu和CentOS如何配置SSH使得无密码登陆》。

  5、下载好Hadoop,这里用到的是hadoop-2.2.0.tar.gz,你可以用下面的命令去下载:
  下面的操作都是在master机器上进行的。

1[wyp@wyp/home]$ mkdir /home/wyp/Downloads/hadoop
2[wyp@wyp/home]$ cd /home/wyp/Downloads/hadoop
3[wyp@wyphadoop]$ wget \
4 
5http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0.tar.gz

运行完上面的命令之后,hadoop-2.2.0.tar.gz文件将会保存在/home/wyp/Downloads/hadoop里面,请解压它

1[wyp@wyphadoop]$ tar- zxvf hadoop-2.2.0.tar.gz

之后将会在hadoop文件夹下面生成hadoop-2.2.0文件夹,运行下面的命令

01[wyp@wyphadoop]$ cd hadoop-2.2.0
02[wyp@wyphadoop-2.2.0]$ ls -l
03total56
04drwxr-xr-x.2wyp wyp  4096Oct  714:38bin
05drwxr-xr-x.3wyp wyp  4096Oct  714:38etc
06drwxr-xr-x.2wyp wyp  4096Oct  714:38include
07drwxr-xr-x.3wyp wyp  4096Oct  714:38lib
08drwxr-xr-x.2wyp wyp  4096Oct  714:38libexec
09-rw-r--r--.1wyp wyp 15164Oct  714:46LICENSE.txt
10drwxrwxr-x.3wyp wyp  4096Oct 2814:38logs
11-rw-r--r--.1wyp wyp   101Oct  714:46NOTICE.txt
12-rw-r--r--.1wyp wyp  1366Oct  714:46README.txt
13drwxr-xr-x.2wyp wyp  4096Oct 2812:37sbin
14drwxr-xr-x.4wyp wyp  4096Oct  714:38share

显示出刚刚解压文件的文件夹。

  6、配置Hadoop的环境变量

01[wyp@wyphadoop]$ sudo vim /etc/profile
02  
03在/etc/profile文件的末尾加上以下配置
04  
05export HADOOP_DEV_HOME=/home/wyp/Downloads/hadoop/hadoop-2.2.0
06export PATH=$PATH:$HADOOP_DEV_HOME/bin
07export PATH=$PATH:$HADOOP_DEV_HOME/sbin
08export HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}
09export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}
10export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}
11export YARN_HOME=${HADOOP_DEV_HOME}
12export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop

然后按:wq保存。为了让刚刚的设置生效,运行下面的命令

1[wyp@wyphadoop]$ sudo source /etc/profile

在终端输入hadoop命令查看Hadoop的环境变量是否生效:

01[wyp@node~]$ hadoop
02Usage: hadoop [--config confdir] COMMAND
03       where COMMAND is one of:
04  fs                   run a generic filesystem user client
05  version              print the version
06  jar <jar>            run a jar file
07  checknative [-a|-h]  check nativehadoop and compression libraries
08                                                availability
09  distcp <srcurl> <desturl> copy file or directories recursively
10  archive -archiveName NAME -p <parent path> <src>* <dest> create
11                                             a hadoop archive
12  classpath            prints the classpath needed to get the
13                       Hadoop jar and the required libraries
14  daemonlog            get/set the log level foreach daemon
15 or
16  CLASSNAME            run the classnamed CLASSNAME
17 
18Most commands print help when invoked w/o parameters.
19[wyp@node~]$

如果显示上面的信息,说明环境变量生效了,如果显示不了,重启一下电脑再试试。

  7、修改Hadoop的配置文件

修改Hadoop的hadoop-env.sh配置文件,设置jdk所在的路径:

1[wyp@wyphadoop]$ vim etc/hadoop/hadoop-env.sh
2  
3在里面找到JAVA_HOME,并将它的值设置为你电脑jdk所在的绝对路径
4  
5# The java implementation to use.
6export JAVA_HOME=/home/wyp/Downloads/jdk1.7.0_45

依次修改core-site.xml、yarn-site.xml、mapred-site.xml和hdfs-site.xml配置文件

01----------------core-site.xml
02<property>
03  <name>fs.default.name</name>
04  <value>hdfs://master:8020</value>
05  <final>true</final>
06</property>
07<property>
08  <name>hadoop.tmp.dir</name>
09  <value>/home/wyp/cloud/tmp/hadoop2.0</value>
10</property>
11  
12------------------------- yarn-site.xml
13<property>
14  <name>yarn.resourcemanager.address</name>
15  <value>master:8032</value>
16</property>
17 
18<property>
19  <name>yarn.resourcemanager.scheduler.address</name>
20  <value>master:8030</value>
21</property>
22 
23<property>
24  <name>yarn.resourcemanager.resource-tracker.address</name>
25  <value>master:8031</value>
26</property>
27 
28<property>
29  <name>yarn.resourcemanager.admin.address</name>
30  <value>master:8033</value>
31</property>
32 
33<property>
34  <name>yarn.resourcemanager.webapp.address</name>
35  <value>master:8088</value>
36</property>
37 
38<property>
39    <name>yarn.nodemanager.aux-services</name>
40    <value>mapreduce_shuffle</value>
41</property>
42  
43<property>
44    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
45    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
46</property>
47  
48------------------------ mapred-site.xml
49<property>
50    <name>mapreduce.framework.name</name>
51    <value>yarn</value>
52</property>
53  
54<property>
55    <name>mapred.system.dir</name>
56    <value>file:/hadoop/mapred/system/</value>
57    <final>true</final>
58</property>
59  
60<property>
61    <name>mapred.local.dir</name>
62    <value>file:/opt/cloud/hadoop_space/mapred/local</value>
63    <final>true</final>
64</property>
65  
66----------- hdfs-site.xml 
67<property>
68    <name>dfs.namenode.name.dir</name>
69    <value>file:/opt/cloud/hadoop_space/dfs/name</value>
70    <final>true</final>
71</property>
72  
73<property>
74    <name>dfs.datanode.data.dir</name>
75    <value>file:/opt/cloud/hadoop_space/dfs/data</value>
76    <description>Determines where on the local
77      filesystem an DFS data node should store its blocks.
78      Ifthisis a comma-delimited list of directories,
79      then data will be stored in all named
80      directories, typically on different devices.
81      Directories that donot exist are ignored.
82    </description>
83    <final>true</final>
84</property>
85<property>
86    <name>dfs.replication</name>
87    <value>1</value>
88</property>
89  
90<property>
91    <name>dfs.permissions</name>
92    <value>false</value>
93</property>

配置好Hadoop的相关东西之后,请将hadoop-2.2.0整个文件夹分别拷贝到node和node1主机上面去,设置都不需要改!

  8、关掉master、node和node1的防火墙

如果在node上启动nodemanager,遇到java.net.NoRouteToHostException异常

01java.net.NoRouteToHostException: No Route to Host from 
02localhost.localdomain/192.168.142.139to 192.168.142.138:8031
03failed on socket timeout exception: java.net.NoRouteToHostException:
04No route to host; For more details see:
05 
06http://wiki.apache.org/hadoop/NoRouteToHost
07 
08        ..................省略了好多东西
09 
10Caused by: java.net.NoRouteToHostException: No route to host
11        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
12 
13        ..................省略了好多东西
14 
15        at org.apache.hadoop.ipc.Client.getConnection(Client.java:1399)
16        at org.apache.hadoop.ipc.Client.call(Client.java:1318)
17        ...19more

说明了没有关闭防火墙,各个linux平台关闭防火墙的方法不一样,这里也分享一下:
  (1)、对于ubuntu关闭防火墙

1可以运行:ufw disable
2如果你要防火墙可以运行: apt-get remove iptables

  (2)、对于fedora关闭防火墙可以运行:

1[wyp@wyphadoop]$  sudo systemctl stop firewalld.service
2[wyp@wyphadoop]$  sudo systemctl disable firewalld.service

  9、查看Hadoop是否运行成功

  首先在master上面格式化一下HDFS,如下命令

01[wyp@wyphadoop]$  cd $hadoop_home
02[wyp@wyphadoop-2.2.0]$  hdfs namenode -format
0313/10/2816:47:33INFO namenode.NameNode: STARTUP_MSG:
04/************************************************************
05  
06..............此处省略好多文字......................
07  
08************************************************************/
0913/10/2816:47:33INFO namenode.NameNode: registered UNIX signal
10handlersfor[TERM, HUP, INT]
11Formatting using clusterid: CID-9931f367-92d3-4693-a706-d83e120cacd6
1213/10/2816:47:34INFO namenode.HostFileManager: read includes:
13HostSet(
14)
1513/10/2816:47:34INFO namenode.HostFileManager: read excludes:
16HostSet(
17)
18  
19..............此处也省略好多文字......................
20  
2113/10/2816:47:38INFO util.ExitUtil: Exiting with status 0
2213/10/2816:47:38INFO namenode.NameNode: SHUTDOWN_MSG:
23/************************************************************
24SHUTDOWN_MSG: Shutting down NameNode at wyp/192.168.142.138
25************************************************************/
26[wyp@wyphadoop-2.2.0]$

在master中启动 namenode 和 resourcemanager

1[wyp@wyphadoop-2.2.0]$ sbin/hadoop-daemon.sh start namenode
2[wyp@wyphadoop-2.2.0]$ sbin/yarn-daemon.sh start resourcemanager

在node和node1中启动datanode 和 nodemanager

1[wyp@wyphadoop-2.2.0]$ sbin/hadoop-daemon.sh start datanode
2[wyp@wyphadoop-2.2.0]$ sbin/yarn-daemon.sh start nodemanager

检查Hadoop集群是否安装好了,在master上面运行jps,如果有NameNode、ResourceManager二个进程,说明master安装好了。

1[wyp@masterhadoop]$ jps
22016NameNode
32602ResourceManager

在node(node1)上面运行jps,如果有DataNode、NodeManager二个进程,说明node(node1)安装好了。

查看源代码
打印帮助
1[wyp@nodenetwork-scripts]$ jps
27889DataNode
37979NodeManager
0 0
原创粉丝点击