Hadoop2.6.4搭建笔记

自己搭建一个Hadoop集群,小型的。我在台式机上新建了3台虚拟机,一台用于Master,两台用于Slave。系统用的Ubuntu14.04.系统准备好之后。

一、在UBuntu下创建hadoop用户和用户组

1. 首先新建hadoop用户组

[cpp] view plain copy

  1. sudoaddgrouphadoop

2. 创建hadoop用户

[cpp] view plain copy

  1. sudoadduser-ingrouphadoophadoop

3. 给hadoop用户添加权限,打开/etc/sudoers文件。

[cpp] view plain copy

  1. sudovim/etc/sudoers

按下回车,打开/etc/sudoers文件,给hadoop用户赋予与root用户同样的权限。在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL。


二、安装JDK

这里不写了

三、 修改机器名字

每当ubuntu安装成功时,我们的及其名字都是默认:ubuntu,但是为了以后集群中能够容易分辨各台服务器,需要给每台机器取一个不同的名字。机器名字由/etc/hostname文件决定。

1. 打开/etc/hostname

[cpp] view plain copy

  1. sudovim/etc/hostname


由于有3台机器,我们分别把机器名字修改为Master_00,Slave_00,Slave_01.

重启系统后才会生效。

四、安装ssh服务

1. 安装openssh_server

[cpp] view plain copy

  1. sudoapt-getinstallopenssh-server

五、 建立ssh无密码登录本机

ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。

1、 创建ssh-key,这里我们采用rsa方式,如图

首先把用户切换到hadoop用户下。

[cpp] view plain copy

  1. ssh-keygen-trsa-P""


回车后,会在当前用户目录下~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的

2、进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys授权文件的。

[cpp] view plain copy

  1. catid_rsa.pub>>authorized_keys

(完成后就可以无密码登录本机了)

3、登录localhost试试

[cpp] view plain copy

  1. sshlocalhost


第一次登录的时候需要输入yes.(注:当ssh远程登录到其他机器后,现在你控制的是远程的机器,需要执行退出命令才能重新控制本机器)

4. 执行退出命令

[cpp] view plain copy

  1. exit

5. 由于我有3台虚拟机,一个作为master,两台作为slave,master需要免密登录slave,所以需要把master生成的公钥复制到两台slave中,

[cpp] view plain copy

  1. scpid_rsa.pubhadoop@Slave_01:/home/hadoop/

期间可能需要输入密码,然后在slave机器上,把id_rsa.pub文件追加到authorized_keys授权文件

[cpp] view plain copy

  1. cat…/id_rsa.pub>>./authorized_keys

这样,master就可以免密登录slave了,你可以尝试以下。

小结: 登录的机子需要有私钥,被登录的机子需要登录机子的公钥.

六、 安装hadoop

我们采用的hadoop版本是:hadoop2.7.2 .

网址是:http://www-us.apache.org/dist/hadoop/common/

1. 假设hadoop在桌面,将它复制到目录下/usr/local下。

[cpp] view plain copy

  1. sudocp~/hadoop-2.6.4.tar.gz./

2. 解压hadoop-2.6.4.tar.gz

[cpp] view plain copy

  1. sudotarzxvfhadoop-2.6.4.tar.gz

3. 将解压出来的文件夹改名为hadoop


4. 将该hadoop文件夹的属主用户设为hadoop,如下图

[cpp] view plain copy

  1. sudochown-Rhadoop:hadoophadoop


5.打开hadoop/etc/hadoop/hadoop-env.sh文件。

[cpp] view plain copy

  1. vimhadoop-env.sh

6. 配置hadoop-env.sh(找打#export JAVA_HOME=……,去掉#。然后加上本机jdk路劲)


Hadoop单机模式

hadoop默认模式为非分布式,无须进行其他配置即可运行。非分布式的hadoop既单java进程,方便进行调试。现在已经配置完成了,现在我们可以执行例子来感受一下hadoop的运行。hadoop附带了很多例子(运行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar可以看到所有例子)。包括wordcount、terasort、join、grep等。

在此,我们选择运行grep例子,我们将input文件夹中的所有文件作为输入,筛选当中符合正则表达式dfs[a-z.]+的单词并统计出现的次数,最后输出结果到out文件夹中。

[cpp] view plain copy

  1. cd/usr/local/hadoop
  2. mkdir./input
  3. cp./etc/hadoop/*.xml./input/
  4. ./bin/hadoopjar./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jargrep./input./output’dfs[a-z.]+’
  5. cat./output/*

执行结束后,输出了作业的相关信息,输出结果是符合正则的单词dfsadmin出现了一次


注意:hadoop默认不会覆盖结果文件,因此在此运行上面的实例会提示出错,需要先将./output删除。

[cpp] view plain copy

  1. rm-rf./output

Hadoop伪分布式配置

Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行。节点既作为Nameode也作为Datanode,同时,读取的是HDFS中的文件。

Hadoop的配置文件位于/usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2和配置文件core-site.xml和hdfs-site.xml。Hadoop的配置文件是xml格式,每个配置以声明property的name和value的方式来实现。

修改配置文件core-site.xml。将当中的

[cpp] view plain copy

修改为以下配置:

[cpp] view plain copy

  1. hadoop.tmp.dir
  2. file:/usr/local/hadoop/tmp
  3. Abaseforothertemporarydirectories.
  4. fs.defaultFS
  5. hdfs://localhost:9000

配置文件hdfs-site.xml修改为:

[cpp] view plain copy

  1. dfs.replication
  2. 1
  3. dfs.namenode.name.dir
  4. file:/usr/local/hadoop/tmp/dfs/name
  5. dfs.datanode.data.dir
  6. file:/usr/local/hadoop/tmp/dfs/data

配置完成后,执行namenode格式化

[cpp] view plain copy

  1. ./bin/hdfsnamenode-format


出现Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted和Exiting with status 0 说明成功。

接着开启NameNode和DataNode守护进程。

[cpp] view plain copy

  1. ./sbin/start-dfs.sh


启动完成后,可以通过命令jps来判断是否成功启动,若成功启动则会列出如下进程:NameNode、DataNode和SecondaryNode。(如果SecondaryNode没有启动,请运行sbin/stop-dfs.sh关闭进程,然后再次尝试,如果NameNode和DataNode没有启动,请仔细检查之前的步骤)

[cpp] view plain copy

  1. hadoop@Master_00:/usr/local/hadoop$jps


成功启动后,可以访问Web界面http://localhost:50070来查看Hadoop的信息。由于我的Hadoop部署在一台虚拟机上,所以我的访问地址是http://92.168.76.130:50070

Hadoop伪分布式实例-WordCount

上面的单机模式,WordCount读取的是本地数据,伪分布式读取的是HDFS上的数据.要使用HDFS,首先需要创建用户目录

[cpp] view plain copy

  1. ./bin/hdfsdfs-mkdir-p/usr/local/hadoop/input

-p表示如果会逐级新建目录.

接着将/etc/hadoop中的文件作为输入文件复制到分布式文件系统中,即将/usr/local/hadoop/etc/hadoop中的xml文件复制到分布式文件系统中的/usr/local/hadoop/input中.上一步已经新建好了文件夹.

[cpp] view plain copy

  1. ./bin/hdfsdfs-put./etc/hadoop/*.xmlinput

复制完成后,可以通过如下命令查看文件列表:

[cpp] view plain copy

  1. ./bin/hdfsdfs-lsinput


伪分布式运行MapReduce作业的方式跟单机模式相同,区别在于伪分布式读取的是DHFS中的文件(可以将单机步骤中创建的本地input文件夹删掉来验证这一点).

[cpp] view plain copy

  1. ./bin/hadoopjar./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jargrepinputoutput’dfs[a-z.]+’


出现如上图结果.然后查看运行结果命令(查看的是位于HDFS中的输出结果)

[cpp] view plain copy

  1. ./bin/hdfsdfs-catoutput/*


Hadoop运行程序时,默认输出目录不能存在,因此再次运行需要执行如下命令删除output文件夹:

[cpp] view plain copy

  1. ./bin/hdfsdfs-rm-routput


删除output文件夹.

伪分布式的文件是以HDFS的格式存储在本机上,但是具体存储位置是哪,存储格式是啥.现在还不知道,这部分以后有待补充,to be continued…

完全分布式搭建

以上Hadoop搭建是单机模式和伪分布式模式,下面介绍完全分布式搭建.前面我们的虚拟机有3个,分别是Master和两个slave.

主要涉及的配置文件有7个:都在/usr/local/hadoop/etc/hadoop文件夹下

[cpp] view plain copy

  1. hadoop-env.sh
  2. yarn-env.sh
  3. slaves
  4. core-site.xml
  5. hdfs-site.xml
  6. mapred-site.xml.template
  7. yarn-site.xml

1. 配置core-site.xml

[cpp] view plain copy

  1. hadoop.tmp.dir
  2. file:/usr/local/hadoop/tmp
  3. Abaseforothertemporarydirectories.
  4. fs.defaultFS
  5. hdfs://Master00:9000

fs.defaultFS是NameNode的URI.hdfs://主机名:端口/

hadoop.tmp.dir:Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可.不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令.

2. 配置mapred-site.xml

[cpp] view plain copy

  1. mapreduce.framework.name
  2. yarn
  3. mapreduce.jobhistory.address
  4. Master00:10020
  5. mapreduce.jobhistory.webapp.address
  6. Master00:19888

mapred.job.tracker是JobTracker的主机(或者IP)和端口.主机:端口.其中/usr/local/hadoop/tmp目录需要提前创建,并且注意用chown -R 命令来修改目录权限
3. 配置hdfs-site.xml

[cpp] view plain copy

  1. dfs.namenode.secondary.http-address

  2. Master00:50090

  3. dfs.replication

  4. 2

  5. dfs.namenode.name.dir

  6. file:/usr/local/hadoop/dfs/name

  7. dfs.datanode.data.dir

  8. file:/usr/local/hadoop/dfs/data

dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径.当这个值是一个逗号分割的目录列表时,nametable数据将会复制到所有目录中作冗余备份.

dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错.

此处的name和data等目录不能提前创建,如果提前创建会出问题.

4. 配置master和slaves主从节点

[cpp] view plain copy

  1. vimmasters

修改为

Master00

[cpp] view plain copy

  1. vimslaves

修改为

Slave00
Slave01

5. 配置yarn-site.xml

[cpp] view plain copy

  1. yarn.resourcemanager.hostname

  2. Master00

  3. yarn.nodemanager.aux-services

  4. mapreduce_shuffle

然后在每台机器上执行格式化

[cpp] view plain copy

  1. hdfsnamenode-format

然后

[cpp] view plain copy

  1. ./sbin/start-all.sh

启动服务.

通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程

在 Slave 节点可以看到 DataNode 和 NodeManager 进程

缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令

[cpp] view plain copy

  1. hdfsdfsadmin-report

查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功

也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://Master00:50070/。如果不成功,可以通过启动日志排查原因。

伪分布式、分布式配置切换时的注意事项

1. 从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件;
2. 在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次 hdfs namenode -format,再次启动试试。

执行分布式实例

执行分布式实例过程与伪分布式模式一样,首先创建 HDFS 上的用户目录:

[cpp] view plain copy

  1. hdfsdfs-mkdir-p/user/hadoop

将 /usr/local/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中:

[cpp] view plain copy

  1. hdfsdfs-mkdirinput
  2. hdfsdfs-put/usr/local/hadoop/etc/hadoop/*.xmlinput

通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中,如下图所示:

接着就可以运行 MapReduce 作业了:

[cpp] view plain copy

  1. hadoopjar/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jargrepinputoutput’dfs[a-z.]+’

运行时的输出信息与伪分布式类似,会显示 Job 的进度。

可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。

同样可以通过 Web 界面查看任务进度 http://Master00:8088/cluster,在 Web 界面点击 “Tracking UI” 这一列的 History 连接,可以看到任务的运行信息,如下图所示:

执行完毕后的输出结果:

关闭 Hadoop 集群也是在 Master 节点上执行的:

[cpp] view plain copy

  1. stop-all.sh

此外,同伪分布式一样,也可以不启动 YARN,但要记得改掉 mapred-site.xml 的文件名。

./mr-jobhistory-daemon.sh stop historyserver

停止JobHistoryServer服务

./mr-jobhistory-daemon.sh start historyserver

附带一个拷贝文件的脚本:

[cpp] view plain copy

  1. scp-r/usr/local/hadoop/etc/hadoop/core-site.xmlSlave00:/usr/local/hadoop/etc/hadoop/core-site.xml

  2. scp-r/usr/local/hadoop/etc/hadoop/slavesSlave00:/usr/local/hadoop/etc/hadoop/slaves

  3. scp-r/usr/local/hadoop/etc/hadoop/hdfs-site.xmlSlave00:/usr/local/hadoop/etc/hadoop/hdfs-site.xml

  4. scp-r/usr/local/hadoop/etc/hadoop/mapred-site.xmlSlave00:/usr/local/hadoop/etc/hadoop/mapred-site.xml

  5. scp-r/usr/local/hadoop/etc/hadoop/yarn-site.xmlSlave00:/usr/local/hadoop/etc/hadoop/yarn-site.xml

  6. scp-r/usr/local/hadoop/etc/hadoop/mastersSlave00:/usr/local/hadoop/etc/hadoop/masters

  7. scp-r/usr/local/hadoop/etc/hadoop/core-site.xmlSlave01:/usr/local/hadoop/etc/hadoop/core-site.xml

  8. scp-r/usr/local/hadoop/etc/hadoop/slavesSlave01:/usr/local/hadoop/etc/hadoop/slaves

  9. scp-r/usr/local/hadoop/etc/hadoop/hdfs-site.xmlSlave01:/usr/local/hadoop/etc/hadoop/hdfs-site.xml

  10. scp-r/usr/local/hadoop/etc/hadoop/mapred-site.xmlSlave01:/usr/local/hadoop/etc/hadoop/mapred-site.xml

  11. scp-r/usr/local/hadoop/etc/hadoop/yarn-site.xmlSlave01:/usr/local/hadoop/etc/hadoop/yarn-site.xml

  12. scp-r/usr/local/hadoop/etc/hadoop/mastersSlave01:/usr/local/hadoop/etc/hadoop/masters

参考:

http://www.powerxing.com/install-hadoop-cluster/

http://www.cnblogs.com/syveen/archive/2013/05/08/3068044.html

http://blog.csdn.net/lichangzai/article/details/8206834

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值