VMWare安装Hadoop集群

来源:互联网 发布:手机热点限速软件 编辑:程序博客网 时间:2024/05/22 13:21

参考:http://wenku.it168.com/d_000049179.shtml

1. 机器配置
共有三台机器,主机名为node1,node2,node3

                ip                      子网掩码           网关

node1 : 192.168.10.1     255.255.255.0   192,168.10.255              namenode

node2 : 192.168.10.2     255.255.255.0   192,168.10.255              datanode

node3 : 192.168.10.3     255.255.255.0   192,168.10.255              datanode
操作系统:均为Ubuntu 12.04
hadoop
hadoop-1.0.1.tar.gz

2 . 修改/etc/hosts文件,如果可能ping 通主机名就不要这一步


3. 新建hadoop用户

4.安装并开启SSH服务
SSH设置之前先要安装ssh服务,并开启。Ubuntu缺省安装了openssh-client,所以在这里就不安装了,如果你的系统没有安装的话,再用apt-get安装上即可。
网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务。最终成功的方法如下:
$ sudo apt-get install openssh-server
然后确认sshserver是否启动了:
$ ps -e |grep ssh
如果只有ssh-agentssh-server还没有启动,需要执行命令$ /etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。

5.配置SSH
Hadoop
需要namenodedatanode的无密码SSH,所以需要设置namenode到其他2datanode的无密码公钥认证方式的SSH。简单的说,在node1上需要生成一个密钥对,即一个私钥,一个公钥。将公钥拷贝到node2上,这样,比如当node1向node2发起ssh连接的时候,node2上就会生成一个随机数并用node1的公钥对这个随机数进行加密,并发送给node1;node收到这个加密的数以后用私钥进行解密,并将解密后的数发送回node2,node2确认解密的数无误后就允许node1进行连接了。这就完成了一次公钥认证过程。
(1) 首先用hadoop用户登录每台机器(包括namenode),在/home/hadoop/目录下建立.ssh目录,并将目录权限设为:drwxr-xr-x,设置命令: chmod 755 .ssh

   $ mkdir .ssh

   $ chmod 755 .ssh
(2) 在namenode(node1)上执行命令:$ ssh-keygen -t rsa (这个命令将为namenode生成一个密钥对)
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
这三个项目直接回车即可(第一个回车表示将密钥对默认存储在/home/hadoop/.ssh目录下,第二三个回车表示设置空密码)。
这个命令将在/home/hadoop/.ssh目录下生成一对密钥id_rsaid_rsa.pub。然后将id_rsa.pub的内容复制到每个机器(包括本机)的home/hadoop/.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没authorized_keys这个文件,直接cp或者scp就好了,下面的操作假设各个机器上都没有authorized_keys文件。
具体命令:
namenode执行(用新建的hadoop用户登录)
$ cp /home/hadoop/.ssh/id_rsa.pub /home/hadoop/.ssh/authorized_keys 
$ scp /home/hadoop/.ssh/authorized_keys node2:/home/hadoop/.ssh/

$ scp /home/hadoop/.ssh/authorized_keys node3:/home/hadoop/.ssh/
此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,按照提示输入即可
当然,也可以用其他方法将authorized_keys文件拷贝到其他机器上,比方说用U盘(不过还是建议用scp命令,因为可以检查以下ssh服务是否已经开启)。
(3) 用hadoop用户登录每台机器,修改/home/hadoop/.ssh/authorized_keys文件的权限为:-rw-r–r–,设置命令:
$ cd /home/hadoop/.ssh
$ chmod 644 authorized_keys
设置完成后,测试一下namenode到各个datanode节点的ssh链接,包括到本机,如果不需要输入密码就可以ssh登录,说明设置成功了。
测试方法:
比如node1向node2发起ssh连接
[hadoop@node1:~]$ssh  node2
如果ssh配置好了,就会出现以下提示信息
The authenticity of host [node2] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
OpenSSH
告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。
然后你会发现不需要输入密码就可以建立ssh连接了,恭喜你,配置成功了!


6.安装JDK
sun网站下载JDK安装包jdk-6u11-linux-i586.bincopy到机器的usr目录中,并在每台机器的root用户下面安装.
root用户下:
$ cd /usr
$ chmod +x jdk-6u11-linux-i586.bin 
给安装文件增加执行权限.
$ ./jdk-6u11-linux-i586.bin,
按提示按几个空格健后,输入yes后开始安装jdk6.
安装好后,将目录名修改为jdk6.
设置JDK的环境变量,考虑到JDK可能会有其他系统用户也会用到,建议将环境变量直接设置在/etc/profile中具体内容(如果没有则直接在profile文件中添加)
export JAVA_HOME=/usr/jdk6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
$ source /etc/profile使用java环境生效.

7.
设置目录并安装Hadoop
hadoop用户登录namenode,并新建一个目录,用于存放所有hadoop相关内容。
本例中在/home/hadoop目录下新建HadoopInstall
下载hadoop安装包并copynamenodehadoop用户的/home/hadoop/HadoopInstall并解压缩:
tar zxvf hadoop-1.0.1.tar.gz
考虑到今后升级以及其他操作的方便性,建议建一个名称为hadoop的链接,指向hadoop-0.16.3目录:
ln -s hadoop-1.0.1  hadoop
新建目录:/home/hadoop/HadoopInstall/hadoop-conf
/home/hadoop/HadoopInstall/hadoop/conf目录下的hadoop_site.xml,slaves,hadoop_env.sh,masters文件拷贝到/home/hadoop/HadoopInstall/hadoop-conf目录
/etc/profile文件中设置环境变量 $HADOOP_CONF_DIR:
export HADOOP_CONF_DIR=$HOME/HadoopInstall/hadoop-conf/

8.Hadoop环境变量设置和配置文件修改
/home/hadoop/HadoopInstall/hadoop-conf/hadoop_env.sh文件中设置环境变量:
export JAVA_HOME=/usr/jdk6
export HADOOP_HOME=/home/hadoop/HadoopInstall/hadoop
/home/hadoop/HadoopInstall/hadoop-conf/masters文件中设置namenode
文件内容:
node1
/home/hadoop/HadoopInstall/hadoop-conf/slaves文件中设置datanode
文件内容:
node2

node3
conf/目录中的hadoop-default.xml中包含了Hadoop的所有配置项,但是不允许直接修改!可以在hadoop-conf/目录下的hadoop-site.xml里面定义我们需要的项,其值会覆盖hadoop-default.xml中的默认值。可以根据自己的实际需要来进行定制。
/home/hadoop/HadoopInstall/hadoop-conf/hadoop-site.xml文件中设置hadoop配置:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
  <name>fs.default.name</name>
  <value>node1:9000</value>
  <description>The name of the default file system. Either the literal string "local" or a host:port for DFS.</description>
</property>
<property>
  <name>mapred.job.tracker</name>
  <value>node1:9001</value>
  <description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.</description>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/hadoop/HadoopInstall/tmp</value>
  <description>A base for other temporary directories.</description>
</property>
<property>
  <name>dfs.name.dir</name>
  <value>/home/hadoop/HadoopInstall/filesystem/name</value>
  <description>Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy. </description>
</property>
<property>
  <name>dfs.data.dir</name>
  <value>/home/hadoop/HadoopInstall/filesystem/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>
</property>
<property>
  <name>dfs.replication</name>
  <value>1</value>
  <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.</description>
</property>
</configuration>

9.部署datanode节点
namenode上安装配置完成的hadoop文件拷贝到所有datanode:
$ scp -r /home/hadoop/HadoopInstall node2:/home/hadoop/

$ scp -r /home/hadoop/HadoopInstall node3:/home/hadoop/

10.
启动Hadoop
启动之前,我们先要格式化namenode,先进入~/HadoopInstall/hadoop目录,执行下面的命令
[hadoop@node1:hadoop]$bin/hadoop  namenode  -format
不出意外,应该会提示格式化成功。如果不成功,就去hadoop/logs/目录下去查看日志文件
下面就该正式启动hadoop啦,在bin/下面有很多启动脚本,可以根据自己的需要来启动。
* start-all.sh 
启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack
* stop-all.sh 
停止所有的Hadoop
* start-mapred.sh 
启动Map/Reduce守护。包括JobtrackerTasktrack
* stop-mapred.sh 
停止Map/Reduce守护
* start-dfs.sh 
启动Hadoop DFS守护.NamenodeDatanode
* stop-dfs.sh 
停止DFS守护
在这里,简单启动所有守护
[hadoop@node1:hadoop]$bin/start-all.sh
同样,如果要停止hadoop,则
[hadoop@node1:hadoop]$bin/stop-all.sh

11.HDFS
测试
运行bin/目录的hadoop命令,可以查看Haoop所有支持的操作及其用法,这里以几个简单的操作为例。
HDFS建立目录(HDFS中建立一个名为testdir的目录)
$ bin/hadoop dfs -mkdir testdir
复制文件到HDFS(把本地文件large.zip拷贝到HDFS的根目录/user/hadoop/下,文件名为testfile.zip)
$ bin/hadoop dfs -put /home/hadoop/large.zip testfile.zip
查看HDFS的现有文件
$ bin/hadoop dfs -ls




原创粉丝点击