hadoop-0.20.2安装及简单使用 ubuntu

来源:互联网 发布:java实现字符串替换 编辑:程序博客网 时间:2024/05/12 18:11
 我是初学者,文章只是记录我的学习过程,有很多不足或是错误,请大家谅解并指正,真心希望多和大家交流~

安装步骤如下:

1.1 机器说明

VMware总共虚拟3台机器:h1、h2、h3

IP地址分别为:192.168.1.109、192.168.1.100、192.168.1.110

操作系统为:Linux的Ubuntu10.04

jdk版本为:jdk-6u41-linux-i586

hadoop版本为:hadoop-0.20.2

h1作为NameNode、JobTracker,其他2台作为DataNode、TaskTracker

1.2 用机器名Ping通机器

用root登录,修改NameNode和DataNode上的/etc/hosts文件,加入三台机器的IP地址和机器名,如下:

192.168.1.109  h1

192.168.1.100  h2

192.168.1.110  h3

设置好后验证下各机器间是否ping通,用机器名或是IP地址都可以,例如ping h2或ping 192.168.1.100

1.3 新建hadoop用户

Hadoop要求所有机器上hadoop的部署目录结构要相同并且有一个相同的用户名的帐户,我的默认路径为 /home/hadoop

注意:新建用户时使用 root@lenovo: adduser,

 否则只添加用户信息不全

1.4 ssh设置及关闭防火墙

ssh设置的目的:实现无密码登录

安装ssh服务:sudo apt-get install openssh-server自动安装ssh服务。

1)ubuntu装好后默认启动sshd服务,如果不确定的话可以查一下 [root@h1 hadoop]# service sshd status

如没有启动的话,

启动 [root@h1 hadoop]# service sshd start

启动:sudo /etc/init.d/sshstart

停止:sudo /etc/init.d/sshstop


建立ssh无密码登录,在NameNode上 [hadoop@h1 ~]$ ssh-keygen -t rsa

会在~/.ssh/生成两个文件:id_rsa和id_rsa.pub,这两是成对出现的,把id_rsa.pub文件追加到DataNode上的authorized_keys

[hadoop@h1 ~]$ scp id_rsa.pub h2:/home/hadoop/ (注意其中目标机器后面的:与要传到的文件路径之间没有空格,即h1:与/home/hadoop/之间没有空格)               scp id_rsa.pub h3:/home/hadoop/


登录到DataNode上,

[hadoop@h2 ~]$ cat id_rsa.pub >> ~/.ssh/authorized_keys

,其余一台一样,NameNode上也要追加。

修改 /etc/ssh/sshd_config   ssh的配置文件

其中#行指注释掉得

主要的几个:

Protocol 2 ←去掉#  修改后变为此状态,仅使用SSH2

ServerKeyBits 1024 ← 修改后变为此状态,将ServerKey强度改为1024比特

PermitRootLogin no  ← 修改后变为此状态,不允许用root进行登录,只能切换回非root用户才能登陆

PasswordAuthentication no ← 修改后变为此状态,不允许密码方式的登录,开始设置成yes也可以,就可以在服务器用ssh密码登陆到本机,将公钥认证文件复制过去然后添加到公钥本文件再传回来,再设置成 no

PubkeyAuthentication yes         ← 大家一定注意这个,非常关键,必须设置成yes,允许从公钥认证文件登录,搞了一下午加一晚上才整明白,这个文件里设置的东西太多,出现了 permission denied就改这个文件,无头苍蝇般,一会好用一会不好用,绝大多数不好用

关于密钥生成后权限配置

好像默认的id_rsa就是400,其他的就不知道了,大家可以玩玩看,反正最后的正确设置参考如下:

(1)id_rsa 400,即user只读,g o无权限
(2)id_rsa.pub rm 删除
(3)authorized_keys :u必须有r权限,g o必须没有w权限,其他的都随便,为安全考虑,最终将其设置成400,开始需要设置成600,如上所说,需要服务器传过来公钥本覆盖此文件,覆盖之后再设置成 400


最后别忘了,将公钥本覆盖了以后设置两个东西,

一个是 /etc/ssh/sshd_config的PasswordAuthentication no 然后重启ssh服务(前面说过);

chmod 400 ~/.ssh/authorized_keys 

随便输入 ssh localhost,哈哈

OK了,成功也安全了


注意:追加完后必须修改NameNode和DataNode上的.ssh和authorized_keys的权限,chmod命令,参数不确定,完成后测试下,例如ssh h2时不需要密码就可以登录,就可以知道ssh设置成功。

2)关闭防火墙(NameNode和DataNode都必须关闭,没用到)

[root@h1 ~]# service iptables stop

注意:每次重新开机启动hadoop前都必须关闭

1.5 安装jdk1.6(几台机子都一样)
在官网http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html下载jdk-6u41-linux-i586.bin,之后直接安装

[root@h1 java]#chmod +x jdk-6u41-linux-i586.bin [root@h1 java]# ./jdk-6u41-linux-i586.bin

我的安装路径为:/usr/lib/java/jdk1.6.0_41,安装后添加如下语句到/etc/profile中:

export JAVA_HOME=/usr/java/jdk1.6.0_41export JRE_HOME=/usr/java/jdk1.6.0_41/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH


1.6 安装hadoop

在官网http://apache.etoak.com//hadoop/core/下载hadoop-0.20.2.tar.gz

[hadoop@h1 ~]$ tar xzvf hadoop-0.20.2.tar.gz

将hadoop的安装路径添加到/etc/profile中:

export HADOOP_HOME=/home/hadoop/hadoop-0.20.2export PATH=$HADOOP_HOME/bin:$PATH


为了让/etc/profile生效,source一下 [hadoop@h1 ~]$ source /etc/profile

1.7 配置hadoop

其配置文件在/conf目录下

1)配置JAVA环境


[hadoop@h1 ~]$ vim hadoop-0.20.2/conf/hadoop-env.sh

末行加入

export JAVA_HOME=/usr/java/jdk1.6.0_41


2)配置conf/core-site.xml、conf/hdfs-site.xml、conf/mapred-site.xml文件

[hadoop@h1 ~]$ vim hadoop-0.20.2/conf/core-site.xml

<configuration><property>      <name>hadoop.tmp.dir</name>     <value>/home/hadoop/tmp</value>   </property><property>      <name>fs.default.name</name>     <value>hdfs://h1:9000</value>   </property></configuration>


[hadoop@h1 ~]$ vim hadoop-0.20.2/conf/mapred-site.xml

<configuration>   <property>      <name>mapred.job.tracker</name>        <value>hdfs://h1:9001</value> <!--注意:h1前能不能加hdfs://不太清楚,本人配了两个集群,一个加了一个不加都能用-->   </property></configuration>


[hadoop@h1 ~]$ vim hadoop-0.20.2/conf/hdfs-site.xml

<configuration>   <property>        <name>dfs.name.dir</name>        <value>/home/hadoop/name</value>   </property>    <property>        <name>dfs.data.dir</name>       <value>/home/hadoop/data</value>   </property>   <property>      <name>dfs.replication</name>       <value>3</value><!--注意:如果设为1,数据只有一个副本,假如其中一个datanode出问题,将会导致整个job失败-->   </property> </configuration>


3)

配置NameNode上的conf/masters和conf/slaves

masters:

    192.168.1.109

slaves:

    192.168.1.100    192.168.1.110



4)将NameNode上完整的hadoop拷贝到DataNode上,可先将其进行压缩后直接scp过去或是用盘拷贝过去 

    (1)将本地文件拷贝到远程:scp  文件名 用户名@计算机IP或者计算机名称:远程路径     (2)从远程将文件拷回本地:scp  用户名@计算机IP或者计算机名称:文件名本地路径    (3)将本地目录拷贝到远程:scp -r目录名   用户名@计算机IP或者计算机名称:远程路径    (4)从远程将目录拷回本地:scp-r   用户名@计算机IP或者计算机名称:目录名本地路径


1.8 运行hadoop

1)格式化文件系统

[hadoop@h1 hadoop-0.20.2]$ hadoop namenode -format


注意:格式化时要防止NameNode的namespace ID与DataNode的namespace ID的不一致,因为每格式化一次会产生Name、Data、tmp等临时文件记录信息,多次格式化会产生很多,会导致ID的不同,造成hadoop不能运行

2)启动hadoop

[hadoop@h1 hadoop-0.20.2]$ bin/start-all.sh

3)用jps命令查看进程,NameNode上的结果如下:

   25325          NameNode

   25550          JobTracker

   28210          Jps

   25478         SecondaryNameNode

4)查看集群状态

[hadoop@h1 hadoop-0.20.2]$ hadoop dfsadmin -report

确保运行的DataNode个数是正确的,我的是2个,这样可以查看哪个DataNode没有运行


5)用hadoop的web方式查看

       [hadoop@h1 hadoop-0.20.2]$ links  http://192.168.1.109(即为master):50070

1.9 运行Wordcount.java程序

1)先在本地磁盘上建立两个文件f1和f2

[hadoop@h1 ~]$ echo ”hello Hadoop goodbye hadoop” > f1    [hadoop@h1 ~]$ echo ”hello bye hadoop hadoop” > f2


2)在hdfs上建立一个input目录

[hadoop@h1 ~]$ hadoop dfs -mkdir input

3)将f1和f2拷贝到hdfs的input目录下

[hadoop@h1 ~]$ hadoop dfs -copyFromLocal /home/hadoop/f* input

4)查看hdfs上有没有input目录

[hadoop@h1 ~]$ hadoop dfs -ls


5)查看input目录下有没有复制成功f1和f2

[hadoop@h1 ~]$ hadoop dfs -ls input

6)执行wordcount(确保hdfs上没有output目录)

[hadoop@h1 hadoop-0.20.2]$ hadoop jar hadoop-0.20.2-examples.jar wordcount input output

7)运行完成,查看结果

    [hadoop@h1 hadoop-0.20.2]$ hadoop dfs -cat output/part-r-00000


原创粉丝点击