Python菜鸟的Hadoop实战――Hadoop2.6.0集群搭建


Hadoop集群的部署


        网上很多关于hadoop集群部署的文章, 我这里重新整理下,毕竟,别人的经历,让你按照着完整走下来,总有或多或少的问题。

小技巧分享:

        有些初学者喜欢在自己机器上安装虚拟机来部署hadoop,毕竟,很多同学的学习环境都是比较受限的。j_0057.gif

        我这里则直接选择了阿里云的机器,买了三台ECS作为学习环境。毕竟,最低配一个月才40多块,学习还是要稍微投入点的。j_0067.gif


一、 基础环境准备

Windows不熟练,小主只有选择Linux了。

官方提示如下,Linux所需软件包括:

  1. JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本。

  2. ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。

  3. rsync也是需要安装的。


so, 首先选择买几台Linux服务器,然后去准备基础环境。

  1. 阿里云官网www.aliyun.com, 注册一个账号,很便捷,支持支付宝付款。这年头,如果没有支付宝,就真的奥特曼了。

  2. 购买一台ECS(当然,最便宜的一种),选择的是aliyun redhat 5.7 64.(哦,不是要买三台吗?不急,后面可以展示下云计算的威力,花点小钱,节约大把时间,何乐不为呢?)

  3. 检查这个机器的基础环境:

[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, 就这样,基础工具就这样准备好啦。

    


二、系统环境准备


  1. 权限问题

我们尽量要规避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.xml
<configuration>
 <property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>iZ94cjwg86gZ:9001</value>
 </property>

  <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/hadoop/hadoop-2.6.0/dfs/name</value>
 </property>

 <property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/home/hadoop/hadoop-2.6.0/dfs/data</value>
  </property>

 <property>
  <name>dfs.replication</name>
  <value>3</value>
 </property>

 <property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
 </property>

</configuration>

mapred-site.xml
[hadoop@iZ94cjwg86gZ hadoop]$ cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
 </property>
</configuration>


     也许,你想知道这些配置项的意思。 ok, 我的回答是:管他呢!(其实,我也不知道,没有关系,慢慢来吧)

ok, 就这样,我们的第一台机器就准备好了。



四、准备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











你可能感兴趣的:(linux,阿里云服务器,hadoop2.6.0,分布式部署)