二、Hadoop的分布式模式安装过程:(Ubuntu Linux)
1、集群环境介绍
集群环境中有三个结点,其中1个namenode,2个datanode,它们之间分布在局域网中,相互之间可以ping通。具体的IP地址为:
namenode:192.168.0.68
datanode1:192.168.0.41
datanode2:192.168.0.56
三台结点计算机都是Ubuntu Linux 系统,是在Virtual Workstation6.5中的虚拟机,并且都有一个相同的用户quinty(安装系统时的首个用户,具有管理员的权限),在/home/quinty目录下均有一个hadoopinstall目录,用于存放hadoop-0.20.2安装文件,hadoop的整个目录结构是/home/quinty/hadoopinstall/hadoop-0.20.2。
2、准备工作
1)ssh无密码验证配置
Hadoop需要使用ssh协议,namenode使用ssh协议启动namenode和datanode进程,为使Hadoop集群能够正常启动,需要在namenode和datanode结点之间设置ssh无密码验证。
A.安装和启动ssh协议(所有机器上)
$sudo apt-get install ssh (安装ssh)
$sudo apt-get install rsync
$ssh sudo /etc/init.d/ssh restart (启动ssh,无所谓)
执行完毕,机器之间可以通过密码验证相互登录。
B.生成密码对(所有机器)
~$ssh-keygen -t rsa //将在~/.ssh 目录下生成私钥id_rsa和公钥id_rsa.pub
~$chmod 755 .ssh
C.在namenode结点上做配置
~/.ssh$cp id_rsa.pub authorized_keys //namenode的公钥
~/.ssh$scp authorized_keys data结点的ip地址:/home/quinty/.ssh //namenode 可以无密码登录所有datanode结点(ssh ip地址 验证)
D.在datanode结点上做配置
~/.ssh$scp id_rsa.pub 192.168.0.68:/home/quinty/.ssh/datanode 的ip地址.id_rsa.pub
然后在namenode中,
~/.ssh$cat datanode 的ip地址.id_rsa.pub >> authorized_keys
这样datanode 可以无密码登录namenode(ssh ip地址 验证)
2)jdk安装及环境配置
下载Linux环境下的JDK安装包jdk-6u22-linux-i586.bin,
#chmod 755 jdk-6u22-linux-i586.bin
#./jdk-6u22-linux-i586.bin //解压在当前目录,接着做好环境配置
//我将jdk解压在/home/quinty/
vi /etc/profile.d/java.sh //写入
#set java environment
JAVA_HOME=/home/quinty/jdk_1.6.0_22
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
Export JAVA_HOME CLASSPATH PATH
保存退出,然后给java.sh分配权限 chmod 755 /etc/profile.d/java.sh
通过java –version检查JDK是否安装成功。
2、Hadoop集群的配置
在namenode上执行
下载hadoop-0.20.2.tar.gz,将其解压到/home/quinty/hadoopinstall目录下,可以使用如下命令:tar zxvf hadoop-0.20.2.tar.gz;然后在hadoopinstall下创建tmp文件夹。
1)将Hadoop 的安装路径添加到/etc/profile中,并使其有效(source /etc/profile)
vi /etc/profile
加入#set hadoop path
export HADOOPHOME=home/quinty/hadoopinstall/hadoop0.20.2
export PATH=$HADOOPHOME/bin:$PATH
Hadoop配置文件在conf目录下,接下来配置以下五个文件
2)配置Hadoop-env.sh
export JAVA_HOME=/home/quinty/jdk1_6_0_22
3)core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/quinty/hadoopinstall/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.0.68:9100</value>
<description>如果namenode的ip地址发生变化,需要修改 </description>
</property>
</configuration>
3)配置hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1 </value>
<description>replication是数据副本数量,默认是3,datanode少于3台会报错</description>
</property>
</configuration>
4)配置mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value> 192.168.0.68:9101</value>
<description>如果namenode的ip地址发生变化,需要修改 </description>
</property>
</configuration>
5)配置master文件,加入namenode的ip地址
192.168.0.68
6)配置slaves文件,加入所有datanode的ip地址
192.168.0.41
192.168.0.56
然后将namenode上配置好的hadoop所载文件夹hadoopinstall复制到datanode的/home/quinty目录下
$scp –r /home/quinty/hadoopinstall datanode ip地址:/home/quinty/hadoopinstall
$scp –r /home/quinty/jdk1.6.0_22 datanode ip地址:/home/quinty/ jdk1.6.0_22
在datanode上执行:
将Hadoop 的安装路径添加到/etc/profile中,并使其有效(source /etc/profile)
vi /etc/profile //写入
#set hadoop path
export HADOOPHOME=/home/quinty/hadoopinstall/hadoop0.20.2
export PATH=$HADOOPHOME/bin:$PATH
至此,hadoop集群的配置完毕。
3、Hadoop集群的启动及应用
1)在namenode上执行(user:quinty):
A.格式化hadoop:
cd ~/hadoopinstall/hadoop-0.20.2
bin/hadoop namenode –format
B.启动hadoop
bin/start-all.sh (结束是 bin/stop-all.sh)
启动hadoop成功后,在namenode中的tmp文件夹中生成了dfs文件夹,在所有datanode中的tmp文件夹中均生成了dfs文件夹和mapred文件夹。
C.用java自带的小工具jps查看进程:
在namenode中执行jps,分别列出 JobTracker、Jps、SecondaryNamenode和Namenode的对应进程号;
在每个datanode中执行jps,分别列出Datanode、Jps和TaskTracker对应的进程号。
D.查看集群状态
在namenode中 bin/hadoop dfsadmin –report
Hadoop的web方式查看:结点信息——http://192.168.0.68:50070
JobTracker信息——http://192.168.0.68:50030
TaskTracker信息——http://datanode ip地址:50060
E.实例应用——运行wordcount(在hadoop安装目录下)
$bin/hadoop dfs –mkdir input (新建目录)
$bin/hadoop dfs –put READEME.TXT input
$bin/hadoop jar hadoop-0.20.2-examples wordcount input output
$bin/hadoop dfs –cat output/* (查看结果)
F.常见问题:
a. start-all.sh是有启动namenode的,但是用jps查看发现没有namenode进程
原因之一:hadoopinstall/tmp下的dfs不能访问,可以通过删除dfs文件夹解决;
原因之二:hadoop集群的配置错误(core-site.xml和mapred-site.xml),如namenode的IP地址没有更新,导致namenode和datanode等进程启动后自动关闭。
b.连接到远程机器失败,可能是datanode的ip地址发生改变,但是slaves文件夹中的内容没有修改。
4、Hadoop分布式并行编程< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
网上很多就介绍了用< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />IBM MapReduce Tool,但是IBM MapReduce Tool只适用于Hadoop0.17.0的,已经不能满足最新的Hadoop要求,其实Hadoop本身是有带Eclipse-Plugin的,可以直接使用。
Hadoop如上配置安装在Linux系统中,然后在windows下使用Eclipse进行分布并行编程,
环境: Windows xp
Eclipse 3.4.2+JDK1.6.0_22+Hadoop0.20.2
1)在本地机器(windows xp)中安装JDK1.6.0,并配置好相关的环境变量
A. 下载.安装JDK,安装过程中可以自定义安装目录等信息,如选择安装目录为D:\java\jdk1.6.0_22;
B. 配置环境变量安装完成后,右击“我的电脑”,点击“属性”;选择“高级”选项卡,点击“环境变量”;在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”;
JAVA_HOME= D:\java\jdk1.6.0_22;
PATH=.;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(追加))
CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(追加)
C.检验是否配置成功,“开始”->;“运行”,键入“cmd”;
键入命令“java -version”,出现JDK版本号,说明环境变量配置成功;
2)将在Linux中配置好的Hadoop复制一份到本地机器中,Eclipse中新建Map/Reduce项目时,需要Hadoop的本地路径(如,D:\Programs\hadoopinstall\hadoop-0.20.2)。
3)下载Eclipse3.4.2(之前的版本好象不能识别hadoop-0.20.2的eclipse插件),然后解压到D:\Programs\ (绿色版,无需要安装),设置工作目录。
A. 将Hadoop自带的Eclipse插件复制到Eclipse的插件目录下
D:\Programs\hadoopinstall\hadoop-0.20.2\contrib\eclipse-plugin\hadoop-0.20.2-eclipse-plugin.jarà D:\Programs\eclipse\plugins
B. 重启Eclipse,在右上角的perspective,选择other->map/reduce,可以切换到Map/Reduce视窗,然后在下方“Map/Reducer ”点击可以设置Hadoop Location
Location name:自定一个
Map/Reduce Master Host:192.168.0.69( Hadoop中的namenodeip地址)
Port:9101(根据Hadoop中的配置来设,注意这里是MapReduce的Master,监听端口是**01的。)
DFS Master 勾选 “Use M/R Master host” ,port:9100(根据配置来设)
User name:在Linux中使用Hadoop的用户名,(如,我的是quinty)
SOCKS proxy 不需要勾选“Enabel SOCKSproxy”
点击Finish,配置完毕,回到主界面,project面板出现了“DFS location”,点击可以查看dfs中的内容。 Advanced Parameters可以不用设置。
C. 设置本地Hadoop的位置,windowsàPreferencesàHadoop Map/Reduce,将Hadoop的安装目录设置为本地机器的Hadoop目录。
4)新建一个MapReduce工程,试运行Hadoop自带的WordCount程序
A.FileàNewàProjectàMapReduce 填写工程名WordCount等信息,然后将Hadoop中自带的WordCount.java(Hadoop目录\src\examples\ org\apache\hadoop\examples)拷贝到src目录下,此时会出现错误,将第一行的pakage信息删除即可。
B.运行配置 运行WordCount,右击WordCount.java,在弹出的菜单中选择Run As àRun Configurations…,弹出的窗口中,在Java Application下选择“WordCount”,然后在右侧Arguments面板中配置相应的运行时参数。
程序参数可以用本地路径,也可以用HDFS路径,二者要求不同
本地路径不能指明处理的具体文件,输出文件夹必须是尚未存在的。
HDFS路径可以指明处理的具体文件
Pragrams arguments:
D:/input D:/output
Hdfs://UBUNTU:9100/user/quinty/input/README.txt 输出文件夹
**我是运行了一下,本地物理路径配置能成功运行;第一个参数为HDFS路径,第二个参数为本地路径也能成功运行;但是两个参数都是HDFS路径,则提示不允许,我觉得应该是用户访问权限的问题,但是还不知如何解决。
VM argument -Xmx512m 用于限制内存的使用量
C.程序运行 参数配置完成后,点击Apply,Run则开始运行WOrdCount程序,从Console面板中可以看到程序的运行过程。同时结果将在第二个参数指定的文件目录中。
这中间还涉及如何让本地机器访问虚拟机中的Linux系统等问题,将在下一日志中整理出来。