如果你想搭建伪分布式 Hadoop 平台, 请参见本博客 在 Fedora 上部署 Hadoop2.2.0 伪分布式平台 经过好多天的各种折腾, 终于在几台电脑里面配置好了 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 地址设置步骤如下 : [wyp@wyp hadoop]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0 在里面添加下面语句 : IPADDR=192.168.142.139 NETMASK=255.255.255.0 NETWORK=192.168.0.0 里面的 IPADDR 地址设置你想要的, 我这里是 192.168.142.139 设置好后, 需要让 IP 地址生效, 运行下面命令 : [wyp@wyp hadoop]$ sudo service network restart Shutting down interface eth0: Device state: 3 (disconnected) [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Active connection state: activated Active connection path: /org/freedesktop/networkmanager/activeconnection/7 1 / 13
[wyp@wyp hadoop]$ [ OK ] 然后运行 ifconfig 检验一下设置是否生效 : [wyp@wyp hadoop]$ ifconfig eth0 Link encap:ethernet HWaddr 00:0C:29:9F:FB:C0 inet addr:192.168.142.139 Bcast:192.168.142.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe9f:fbc0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:389330 errors:0 dropped:0 overruns:0 frame:0 TX packets:171679 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:473612019 (451.6 MiB) TX bytes:30110196 (28.7 MiB) lo Link encap:local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:80221 errors:0 dropped:0 overruns:0 frame:0 TX packets:80221 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1051174395 (1002.4 MiB) TX bytes:1051174395 (1002.4 MiB) [wyp@wyp hadoop]$ 可见 IP 地址已经设置为 192.168.142.139 了! (2) Ubuntu 静态 IP 地址设置步骤如下 : wyp@node1:~$ sudo vim /etc/network/interfaces 在里面添加 : auto eth0 iface eth0 inet static address 192.168.142.140 netmask 255.255.255.0 gateway 192.168.142.1 2 / 13
同样需要让 IP 地址生效 : wyp@node1:~$ sudo /etc/init.d/networking restart 同样也是输入 ifconfig 来检验 IP 设置是否生效, 这里就不说了 (3) Fedora 19 静态 IP 地址设置步骤如下 (Fedora 其他版本的静态 IP 设置和 19 版本不一样, 这里就不给出了 ): [wyp@wyp network-scripts]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33 在里面添加 : IPADDR0=192.168.142.138 NETMASK0=255.255.255.0 GATEWAY0=192.168.142.0 设置好后, 需要让 IP 地址生效, 运行下面命令 : [wyp@wyp network-scripts]$ sudo service network restart Restarting network (via systemctl): [ 确定 ] 同样也是输入 ifconfig 来检验 IP 设置是否生效, 这里就不说了 2 设置各个主机的 hostname 在步骤 1 中, 我分别配置了 CentOS Ubuntu 以及 Fedora 三台主机, 我打算用它们作为集群中的电脑, 其中 Fedora 主机作为 master, 其余的两台电脑作为 slave 这步将说说如何修改这三台电脑的 hostname: (1) Fedora19 设置 hostname 步骤如下 : [wyp@wyp network-scripts]$ sudo hostnamectl set-hostname master 查看设置是否生效, 运行下面命令 [wyp@wyp network-scripts]$ hostname master 3 / 13
(2) Ubuntu 设置 hostname 步骤如下 : wyp@node1:~$ sudo vim /etc/hostname 在里面添加自己需要取的 hostname, 我这里是取 node1 查看设置是否生效, 运行下面命令 wyp@node1:~$ hostname node1 (3) CentOS 设置 hostname 步骤如下 : [wyp@node network-scripts]$ sudo vim /etc/sysconfig/network 将里面的 HOSTNAME 修改为你想要的 hostname, 我这里是取 node HOSTNAME=node 查看设置是否生效, 运行下面命令 [wyp@node network-scripts]$ hostname node 3 在以上三台电脑的 /etc/hosts 添加以下配置 : [wyp@master ~]$ sudo vim /etc/hosts 在里面添加以下语句 192.168.142.138 master 192.168.142.139 node 192.168.142.140 node1 其实就是上面三台电脑的静态 IP 地址和其 hostname 的对应关系 检验是否修改生效, 可以用 ping 来查看 : 4 / 13
[wyp@master ~]$ ping node PING node (192.168.142.139) 56(84) bytes of data. 64 bytes from node (192.168.142.139): icmp_seq=1 ttl=64 time=0.541 ms 64 bytes from node (192.168.142.139): icmp_seq=2 ttl=64 time=0.220 ms ^C --- node ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.220/0.380/0.541/0.161 ms [wyp@master ~]$ 如果上面的命令可以 ping 通, 说明设置生效了 4 设置 SSH 无密码登陆 在本博客里面已经介绍了如何安装 SSH( Linux 平台下安装 SSH ), 和怎么设置 SSH 无密码登陆 ( Ubuntu 和 CentOS 如何配置 SSH 使得无密码登陆 ), 这里主要是想说一下需要注意的事项, 首先在 master 主机上面设置好了 SSH 无密码登陆之后, 然后将生成的 id_dsa.pub 文件拷贝到 node 和 node1 上面去, 可以运行下面的命令 : [wyp@localhost ~]$ cat /home/wyp/.ssh/id_dsa.pub \ ssh 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.16 8.142.140 主机上面去 当然, 你也可以用 scp 命令将文件拷贝到相应的主机 : [wyp@master Documents]$ scp /home/wyp/.ssh/id_dsa.pub \ wyp@192.168.142.139:~/.ssh/authorized_keys 检验是否可以从 master 无密码登录 node 和 node1, 可以用下面的命令 : [wyp@master Documents]$ ssh node The authenticity of host 'node (192.168.142.139)' can't be established. RSA key fingerprint is ae:99:43:f0:cf:c6:a9:82:6c:93:a1:65:54:70:a6:97. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'node,192.168.142.139' (RSA) 5 / 13
to the list of known hosts. Last login: Wed Nov 6 14:54:55 2013 from master [wyp@node ~]$ 第一次运行上面的命令会出现上述信息 上面 [wyp@node ~] 已经暗示了我们成功从 master 无密码登录 node; 如果在登陆过程中出现了需要输入密码才能登录 node, 说明 SSH 无密码登录没成功, 一般都是文件权限的问题, 解决方法请参照 Ubuntu 和 CentOS 如何配置 SSH 使得无密码登陆 5 下载好 Hadoop, 这里用到的是 hadoop-2.2.0.tar.gz, 你可以用下面的命令去下载 : 下面的操作都是在 master 机器上进行的 [wyp@wyp /home]$ mkdir /home/wyp/downloads/hadoop [wyp@wyp /home]$ cd /home/wyp/downloads/hadoop [wyp@wyp hadoop]$ wget \ http://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 里面, 请解压它 [wyp@wyp hadoop]$ tar- zxvf hadoop-2.2.0.tar.gz 之后将会在 hadoop 文件夹下面生成 hadoop-2.2.0 文件夹, 运行下面的命令 [wyp@wyp hadoop]$ cd hadoop-2.2.0 [wyp@wyp hadoop-2.2.0]$ ls -l total 56 drwxr-xr-x. 2 wyp wyp 4096 Oct 7 14:38 bin drwxr-xr-x. 3 wyp wyp 4096 Oct 7 14:38 etc drwxr-xr-x. 2 wyp wyp 4096 Oct 7 14:38 include drwxr-xr-x. 3 wyp wyp 4096 Oct 7 14:38 lib drwxr-xr-x. 2 wyp wyp 4096 Oct 7 14:38 libexec -rw-r--r--. 1 wyp wyp 15164 Oct 7 14:46 LICENSE.txt drwxrwxr-x. 3 wyp wyp 4096 Oct 28 14:38 logs -rw-r--r--. 1 wyp wyp 101 Oct 7 14:46 NOTICE.txt -rw-r--r--. 1 wyp wyp 1366 Oct 7 14:46 README.txt drwxr-xr-x. 2 wyp wyp 4096 Oct 28 12:37 sbin 6 / 13
drwxr-xr-x. 4 wyp wyp 4096 Oct 7 14:38 share 显示出刚刚解压文件的文件夹 6 配置 Hadoop 的环境变量 [wyp@wyp hadoop]$ sudo vim /etc/profile 在 /etc/profile 文件的末尾加上以下配置 export HADOOP_DEV_HOME=/home/wyp/Downloads/hadoop/hadoop-2.2.0 export PATH=$PATH:$HADOOP_DEV_HOME/bin export PATH=$PATH:$HADOOP_DEV_HOME/sbin export HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME} export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME} export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME} export YARN_HOME=${HADOOP_DEV_HOME} export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop 然后按 :wq 保存 为了让刚刚的设置生效, 运行下面的命令 [wyp@wyp hadoop]$ sudo source /etc/profile 在终端输入 hadoop 命令查看 Hadoop 的环境变量是否生效 : [wyp@node ~]$ hadoop Usage: hadoop [--config confdir] COMMAND where COMMAND is one of: fs run a generic filesystem user client version print the version jar <jar> run a jar file checknative [-a -h] check native hadoop and compression libraries availability distcp <srcurl> <desturl> copy file or directories recursively archive -archivename NAME -p <parent path> <src>* <dest> create a hadoop archive classpath prints the class path needed to get the 7 / 13
Hadoop jar and the required libraries daemonlog get/set the log level for each daemon or CLASSNAME run the class named CLASSNAME Most commands print help when invoked w/o parameters. [wyp@node ~]$ 如果显示上面的信息, 说明环境变量生效了, 如果显示不了, 重启一下电脑再试试 7 修改 Hadoop 的配置文件 修改 Hadoop 的 hadoop-env.sh 配置文件, 设置 jdk 所在的路径 : [wyp@wyp hadoop]$ vim etc/hadoop/hadoop-env.sh 在里面找到 JAVA_HOME, 并将它的值设置为你电脑 jdk 所在的绝对路径 # The java implementation to use. export JAVA_HOME=/home/wyp/Downloads/jdk1.7.0_45 依次修改 core-site.xml yarn-site.xml mapred-site.xml 和 hdfs-site.xml 配置文件 ----------------core-site.xml <name>fs.default.name</name> <value>hdfs://master:8020</value> <final>true</final> <name>hadoop.tmp.dir</name> <value>/home/wyp/cloud/tmp/hadoop2.0</value> ------------------------- yarn-site.xml <name>yarn.resourcemanager.address</name> <value>master:8032</value> 8 / 13
<name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.shufflehandler</value> ------------------------ mapred-site.xml <name>mapreduce.framework.name</name> <value>yarn</value> <name>mapred.system.dir</name> <value>file:/hadoop/mapred/system/</value> <final>true</final> <name>mapred.local.dir</name> <value>file:/opt/cloud/hadoop_space/mapred/local</value> <final>true</final> 9 / 13
----------- hdfs-site.xml <name>dfs.namenode.name.dir</name> <value>file:/opt/cloud/hadoop_space/dfs/name</value> <final>true</final> <name>dfs.datanode.data.dir</name> <value>file:/opt/cloud/hadoop_space/dfs/data</value> <description>determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored. </description> <final>true</final> <name>dfs.replication</name> <value>1</value> <name>dfs.permissions</name> <value>false</value> 配置好 Hadoop 的相关东西之后, 请将 hadoop-2.2.0 整个文件夹分别拷贝到 node 和 node1 主机上面去, 设置都不需要改! 8 关掉 master node 和 node1 的防火墙 如果在 node 上启动 nodemanager, 遇到 java.net.noroutetohostexception 异常 java.net.noroutetohostexception: No Route to Host from localhost.localdomain/192.168.142.139 to 192.168.142.138:8031 failed on socket timeout exception: java.net.noroutetohostexception: No route to host; For more details see: http://wiki.apache.org/hadoop/noroutetohost 10 / 13
... 省略了好多东西 Caused by: java.net.noroutetohostexception: No route to host at sun.nio.ch.socketchannelimpl.checkconnect(native Method)... 省略了好多东西 at org.apache.hadoop.ipc.client.getconnection(client.java:1399) at org.apache.hadoop.ipc.client.call(client.java:1318)... 19 more 说明了没有关闭防火墙, 各个 linux 平台关闭防火墙的方法不一样, 这里也分享一下 : (1) 对于 ubuntu 关闭防火墙 可以运行 :ufw disable 如果你要防火墙可以运行 : apt-get remove iptables (2) 对于 fedora 关闭防火墙可以运行 : [wyp@wyp hadoop]$ sudo systemctl stop firewalld.service [wyp@wyp hadoop]$ sudo systemctl disable firewalld.service 9 查看 Hadoop 是否运行成功 首先在 master 上面格式化一下 HDFS, 如下命令 [wyp@wyp hadoop]$ cd $hadoop_home [wyp@wyp hadoop-2.2.0]$ hdfs namenode -format 13/10/28 16:47:33 INFO namenode.namenode: STARTUP_MSG: /************************************************************... 此处省略好多文字... ************************************************************/ 13/10/28 16:47:33 INFO namenode.namenode: registered UNIX signal handlers for [TERM, HUP, INT] 11 / 13
Formatting using clusterid: CID-9931f367-92d3-4693-a706-d83e120cacd6 13/10/28 16:47:34 INFO namenode.hostfilemanager: read includes: HostSet( ) 13/10/28 16:47:34 INFO namenode.hostfilemanager: read excludes: HostSet( )... 此处也省略好多文字... 13/10/28 16:47:38 INFO util.exitutil: Exiting with status 0 13/10/28 16:47:38 INFO namenode.namenode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at wyp/192.168.142.138 ************************************************************/ [wyp@wyp hadoop-2.2.0]$ 在 master 中启动 namenode 和 resourcemanager [wyp@wyp hadoop-2.2.0]$ sbin/hadoop-daemon.sh start namenode [wyp@wyp hadoop-2.2.0]$ sbin/yarn-daemon.sh start resourcemanager 在 node 和 node1 中启动 datanode 和 nodemanager [wyp@wyp hadoop-2.2.0]$ sbin/hadoop-daemon.sh start datanode [wyp@wyp hadoop-2.2.0]$ sbin/yarn-daemon.sh start nodemanager 检查 Hadoop 集群是否安装好了, 在 master 上面运行 jps, 如果有 NameNode ResourceManager 二个进程, 说明 master 安装好了 [wyp@master hadoop]$ jps 2016 NameNode 2602 ResourceManager 12 / 13
Powered by TCPDF (www.tcpdf.org) 在 node(node1) 上面运行 jps, 如果有 DataNode NodeManager 二个进程, 说明 node(node1 ) 安装好了 [wyp@node network-scripts]$ jps 7889 DataNode 7979 NodeManager 本博客文章除特别声明, 全部都是原创! 转载本文请加上 : 转载自过往记忆 (https://www.iteblog.com/) 本文链接 : () 13 / 13