Hadoop集群的部署
网上很多关于hadoop集群部署的文章, 我这里重新整理下,毕竟,别人的经历,让你按照着完整走下来,总有或多或少的问题。
小技巧分享:
有些初学者喜欢在自己机器上安装虚拟机来部署hadoop,毕竟,很多同学的学习环境都是比较受限的。
我这里则直接选择了阿里云的机器,买了三台ECS作为学习环境。毕竟,最低配一个月才40多块,学习还是要稍微投入点的。
一、 基础环境准备
Windows不熟练,小主只有选择Linux了。
官方提示如下,Linux所需软件包括:
JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本。
ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
rsync也是需要安装的。
so, 首先选择买几台Linux服务器,然后去准备基础环境。
阿里云官网www.aliyun.com, 注册一个账号,很便捷,支持支付宝付款。这年头,如果没有支付宝,就真的奥特曼了。
购买一台ECS(当然,最便宜的一种),选择的是aliyun redhat 5.7 64.(哦,不是要买三台吗?不急,后面可以展示下云计算的威力,花点小钱,节约大把时间,何乐不为呢?)
检查这个机器的基础环境:
[hadoop@iZ94cjwg86gZ ~]$ uname -a Linux iZ94cjwg86gZ 2.6.32-220.23.2.al.ali1.1.alios6.x86_64 #1 SMP Sun Jan 4 15:01:53 CST 2015 x86_64 x86_64 x86_64 GNU/Linux [hadoop@iZ94cjwg86gZ ~]$ java -version java version "1.6.0_22" OpenJDK Runtime Environment (IcedTea6 1.10.4) (rhel-1.41.1.10.4.5.alios6-x86_64) OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode) [hadoop@iZ94cjwg86gZ ~]$ python --version Python 2.6.6 [hadoop@iZ94cjwg86gZ ~]$ Hey, 兄弟,真不赖,什么Java/Python安装起来也不轻松。不用操心,太好了。 检查下, Java中的JPS工具是否有,后面会依赖这个工具。这个时候,你会纳闷,咦,怎么检查呢,Java目录在哪里呢? 这个时候,你会发现两个命令可以帮你,一个是find, 当然,另外一个就是rpm。这里就不介绍这些命令了。(如果有问题,大家搜索下就了解了) rpm -qa|grep java [hadoop@iZ94cjwg86gZ ~]$ rpm -qa|grep java libvirt-java-0.4.7-1.3.alios6.noarch java-1.6.0-openjdk-devel-1.6.0.0-1.41.1.10.4.5.alios6.x86_64 libvirt-java-devel-0.4.7-1.3.alios6.noarch tzdata-java-2011l-4.4.alios6.noarch java-1.6.0-openjdk-1.6.0.0-1.41.1.10.4.5.alios6.x86_64 [hadoop@iZ94cjwg86gZ ~]$ rpm -ql java-1.6.0-openjdk-1.6.0.0-1.41.1.10.4.5.alios6.x86_64|grep bin /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/keytool /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/orbd /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/pack200 /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/policytool /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/rmid /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/rmiregistry /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/servertool /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/tnameserv /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/unpack200 /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/libinstrument.so /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/zi/Asia/Harbin 哦, maybe /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/就是java的主目录啦~~~~~~~~~ [hadoop@iZ94cjwg86gZ bin]$ pwd /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin [hadoop@iZ94cjwg86gZ bin]$ ls jps jps [hadoop@iZ94cjwg86gZ bin]$ [hadoop@iZ94cjwg86gZ bin]$ rpm -qa|grep rsync rsync-3.0.6-5.4.alios6.1.x86_64 [hadoop@iZ94cjwg86gZ bin]$ Fortunately, Java环境, Python环境, rsync 都是ok的。 另外,就是集群管理,毫无疑问, PSSH需要有一个的,不然, 一台机器一台机器操作, 没有人愿意。 安装setuptools,即easy_install。 wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e tar zxf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 & python setup.py install 然后, easy_install pssh, 就这样,基础工具就这样准备好啦。
二、系统环境准备
权限问题
我们尽量要规避Hadoop的root操作权限,因此,我们需要新建一个用户:hadoop。
useradd hadoop password hadoop 比较重要的就是:hadoop的sudo权限 ## Allow root to run any commands anywhere root ALL=(ALL) ALL hadoop ALL=(ALL) NOPASSWD: ALL 如果你想设置只有某些命令可以sudo的话,hadoop ALL= (root) NOPASSWD: /sbin/mount, (root) NOPASSWD: /bin/umount, (root) NOPASSWD: /mnt/mount, (root) NOPASSWD: /bin/rm, (root) NOPASSWD: /usr/bin/make, (root) NOPASSWD: /bin/ln, (root) NOPASSWD: /bin/sh, (root) NOPASSWD: /bin/mv, (root) NOPASSWD: /bin/chown, (root) NOPASSWD: /bin/chgrp, (root) NOPASSWD: /bin/cp, (root) NOPASSWD: /bin/chmod 然后,hadoop账号的下日常工具也要能用才行,~/.bash_profile文件需要增加一些内容。 PATH=$PATH:$HOME/bin PATH=$PATH:$HOME/bin:/sbin:/usr/sbin/:/usr/bin:/usr/local/bin:/usr/local/python27/bin/:/home/hadoop/hadoop-2.6.0/bin export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/ export JAR_HOME=$JAVA_HOME/jre/ export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAR_HOME/lib export HADOOP_HOME=/home/hadoop/hadoop-2.6.0 PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 添加完毕后,sourece ~/.bash_profile即可。
三、准备单台Hadoop环境
Maybe, 你可以专门准备一个Hadoop目录,比如, /home/hadoop就是你的主目录。
su - hadoop 下载hadoop 2.6.0: cd /home/hadoop/ wget http://mirrors.hust.edu.cn/apache/hadoop/core/stable2/hadoop-2.6.0.tar.gz tar -xzvf hadoop-2.6.0.tar.gz 修改配置文件: cd /home/hadoop/hadoop-2.6.0/etc/hadoop hadoop-env.sh # The java implementation to use. export JAVA_HOME=${JAVA_HOME} export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/ yarn-env.sh [hadoop@iZ94cjwg86gZ hadoop]$ cat yarn-env.sh |grep -i java # some Java parameters export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64 hdfs-site.xmlmapred-site.xml [hadoop@iZ94cjwg86gZ hadoop]$ cat mapred-site.xml dfs.namenode.secondary.http-address iZ94cjwg86gZ:9001 dfs.namenode.name.dir file:/home/hadoop/hadoop-2.6.0/dfs/name dfs.datanode.data.dir file:/home/hadoop/hadoop-2.6.0/dfs/data dfs.replication 3 dfs.webhdfs.enabled true 也许,你想知道这些配置项的意思。 ok, 我的回答是:管他呢!(其实,我也不知道,没有关系,慢慢来吧) ok, 就这样,我们的第一台机器就准备好了。 mapreduce.framework.name yarn
四、准备Hadoop集群环境
剩下的,就是靠云计算的便捷了;
阿里云ECS可以通过打快照的方式,将我们刚才做的工作做成自定义镜像,无需在其他机器上重复做了。How amazing!!!
我们进入下一个环节,集群环境准备:
首先,我利用这个新制作的镜像,重新购买了两台机器。然后,分别进入后,发现,god, 确实啥都有了!!kickstart装机系统可以out了。科技改变生活。
ok, Anyway, Now, 我们拥有了三台ECS。一个月大概100块吧。这年头,买个苹果都要2块,当然,如果是个苹果手表呢,100块体验云计算多划算~~~~
我们聊到了3台阿里云ECS部署,单机部署已经完成了,现在剩下的,就是集群部署了。
部署集群,主要是三点:
1、 SSH免登方案
Master机器ip1,我们进入hadoop账号:
ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub ip1 ssh-copy-id -i ~/.ssh/id_rsa.pub ip2
2、 Host配置方案:
Master机器IP1:
[hadoop@iZ94cjwg86gZ ~]$ cat /etc/hosts 127.0.0.1 localhost ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ip1 iZ94cjwg86gZ ip2 iZ94eg0rzu5Z ip3 iZ94tmf2zfuZ
利用pssh分发hosts文件:
[hadoop@iZ94cjwg86gZ ~]$ cat hadoop.slave.list ip2 ip3 pscp -h /tmp/hadoop.slave.list /etc/hosts /etc/hosts pssh -h /tmp/hadoop.slave.list -i "cat /etc/hosts"
五、 启动hadoop集群
启动hadoop集群:
[hadoop@iZ94cjwg86gZ ~]$ start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh 15/06/12 11:16:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Starting namenodes on [iZ94cjwg86gZ] iZ94cjwg86gZ: starting namenode, logging to /home/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-namenode-iZ94cjwg86gZ.out iZ94eg0rzu5Z: starting datanode, logging to /home/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-datanode-iZ94eg0rzu5Z.out iZ94tmf2zfuZ: starting datanode, logging to /home/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-datanode-iZ94tmf2zfuZ.out Starting secondary namenodes [iZ94cjwg86gZ] iZ94cjwg86gZ: starting secondarynamenode, logging to /home/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-secondarynamenode-iZ94cjwg86gZ.out 15/06/12 11:17:06 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable starting yarn daemons starting resourcemanager, logging to /home/hadoop/hadoop-2.6.0/logs/yarn-hadoop-resourcemanager-iZ94cjwg86gZ.out iZ94eg0rzu5Z: starting nodemanager, logging to /home/hadoop/hadoop-2.6.0/logs/yarn-hadoop-nodemanager-iZ94eg0rzu5Z.out iZ94tmf2zfuZ: starting nodemanager, logging to /home/hadoop/hadoop-2.6.0/logs/yarn-hadoop-nodemanager-iZ94tmf2zfuZ.out
检查服务是否启动成功:
[hadoop@iZ94cjwg86gZ ~]$ pssh -h hadoop.all.list -i "jps" [1] 11:14:15 [SUCCESS] 10.116.49.32 25869 Jps 17158 NodeManager 17041 DataNode [2] 11:14:15 [SUCCESS] 10.116.146.133 15744 DataNode 15861 NodeManager 24566 Jps [3] 11:14:15 [SUCCESS] 10.116.52.102 13796 SecondaryNameNode 13595 NameNode 13953 ResourceManager 31596 JobHistoryServer 27148 Jps hadoop namenode -format
格式化hadoop集群:
hadoop namenode -format
关闭hadoop集群:
从主节点master关闭hadoop,主节点会关闭所有从节点的hadoop。 $ bin/stop-all.sh Hadoop守护进程的日志写入到 ${HADOOP_LOG_DIR} 目录 (默认是 ${HADOOP_HOME}/logs). ${HADOOP_HOME}就是安装路径.
六、 验证Hadoop集群
相关步骤及命令 1.先在本地磁盘上建立两个文件file1和file2 $ echo ”Hello world Bye world" > >~/input/file1 $ echo ”hello hadoop bye hadoop” > >~/input/file2 2.在HDFS上建立一个input目录 $ hadoop fs -mkdir /tmp/input 3.将file1和file2拷贝到hdfs的input目录下 $ hadoop fs -put input/* /tmp/input 4.检查hdfs上有没有file1,file2 $ hadoop fs -ls /tmp/input 5.执行wordcount hadoop jar hadoop-examples-1.0.0.jar wordcount /tmp/input /tmp/output 6.运行完成,查看结果 hadoop fs -cat /output/part-r-00000