hadoop环境的搭建(2.7.1版本)

来源:互联网 发布:vue.js 表单验证 编辑:程序博客网 时间:2024/05/07 16:35

1.首先呢,需要配置java环境,有两种java可以选择,建议选择oracle的版本。笔者使用的是ubuntu15.04:

  

  $ sudo add-apt-repository ppa:webupd8team/java

  $ sudo apt-get update

  $ sudo apt-get install oracle-java7-installer

  $ sudo update-java-alternatives -s java-7-oracle

 

  2.配置master和slave,需要修改两个地方。

  第一个: sudo vim /etc/hosts

  192.168.10.154 master

  192.168.10.8 slave01 #cool4

 192.168.10.3 slave02 #cool0

 192.168.10.6 slave03 #cool3

 需要注意的是机器名字不能有下划线,后来出错怎么都找不到原因,偶然发现是下划线的问题,下划线的问题,下划线的问题(重说三)“,似乎和java的编码规则有关。

 第二个:sudo vim /etc/hostname

 将主机名称改成相应的名字。(master/slave01等等)

 

 3.下载hadoop的最新版本,方法自己搜索一下,这里就不在多说。需要注意的是一开始slave上没有必要下载,现在master上配置好后,再打包scp给各个slave,这样可以避免重复配置。

最好将hadoop的目录放在/usr/local里,这样可以配合本教程的环境变量设置,方便微笑

 4.相互ssh登陆无密码设置。

 这里以在master上配置slave01为例:

 $ ssh-keygen -t rsa -P ""

 #Authorize the key to enable password less ssh 

 $ cat /home/<username>/.ssh/id_rsa.pub >> /home/<username>/.ssh/authorized_keys

 $ chmod 600 authorized_keys

 #Copy this key to slave01 to enable password less ssh

 $ ssh-copy-id -i ~/.ssh/id_rsa.pub slave01

 #Make sure you can do a password less ssh using following command.

 $ ssh slave01

 #如果以上这步可以无密码访问,则说明成功。之后要将master和剩下的slave设置好。而slave对master以及slave之间是不需要配置的。

   

 5.配置环境变量。也是有两个地方:

 一个是:vim ~/.bashrc

 在文件底部键入:


export HADOOP_PREFIX=/usr/local/hadoop

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

#HADOOP VARIABLES START

export HADOOP_INSTALL=/usr/local/hadoop

export PATH=$PATH:$HADOOP_INSTALL/bin

export PATH=$PATH:$HADOOP_INSTALL/sbin

export HADOOP_MAPRED_HOME=$HADOOP_INSTALL

export HADOOP_COMMON_HOME=$HADOOP_INSTALL

export HADOOP_HDFS_HOME=$HADOOP_INSTALL

export YARN_HOME=$HADOOP_INSTALL

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

#HADOOP VARIABLES END

 另一个是:vim <hadoop dir>/etc/hadoop/hadoop_env.sh

 

 将里面的java_home删掉或注释,改为:

export JAVA_HOME=/usr/lib/jvm/java-7-oracle


 

 6.配置集群/分布式环境

 集群/分布式模式需要修改 etc/hadoop 中的5个配置文件,后四个文件可点击查看官方默认设置值,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site    .xml、yarn-site.xml 。

6.1首先是slave文件了,这个是负责告诉hadoop有哪些机器在机群里,列出她们的名字(在刚才的/etc/hostname中):

  1. cd /usr/local/hadoop/etc/hadoop
  2. vim slaves

内容改为:

master

slave01

slave02

6.2 修改core-site.xml,这个文件负责hadoop核心的设置,这里主要是设置虚拟存储(就是一块大硬盘)的位置:

<property>    <name>fs.defaultFS</name>    <value>hdfs://Master:9000</value></property><property>    <name>hadoop.tmp.dir</name>    <value>file:/usr/local/hadoop/tmp</value>    <description>Abase for other temporary directories.</description></property>
更多的设置在这里

6.3 修改mapred-site.xml,这个文件就是map和reduce(就是分工作,再整合)的关键啦,这个先做一个最简单的设置:

<property>    <name>mapreduce.framework.name</name>    <value>yarn</value></property>
更多的可以看这里

6.4 修改hdfs-site.xml,hdfs全称是Hadoop Distributed File System,类似于NTFS,EXT4,我们可以把她理解成为一种磁盘格式,负责文件的存取,管理等,特别注意的是于datanode相关的设置都在这里面哦

<property>    <name>dfs.namenode.secondary.http-address</name>    <value>Master:50090</value></property><property>    <name>dfs.namenode.name.dir</name>    <value>file:/usr/local/hadoop/tmp/dfs/name</value></property><property>    <name>dfs.datanode.data.dir</name>    <value>file:/usr/local/hadoop/tmp/dfs/data</value></property><property>    <name>dfs.replication</name>    <value>3</value></property>
这里dfs.repliction的value是机器的个数。更多设置看这里

6.5 修改yarn-site.xml,yarn的作用类似于daemon,是守护进程,而且他还负责任务的分配和机群的管理。

<property>    <name>yarn.resourcemanager.hostname</name>    <value>Master</value></property><property>    <name>yarn.nodemanager.aux-services</name>    <value>mapreduce_shuffle</value></property>

更多设置看这里

7 接着就是将hadoop打包然后分发到各个slave上了

  1. cd /usr/local
  2. rm -./hadoop/tmp
  3. sudo tar -zcf ./hadoop.tar.gz ./hadoop
  4. scp ./hadoop.tar.gz slave01:/home/hadoop

然后再slave01的机器上:

  1. sudo tar -zxf ~/hadoop.tar.gz -/usr/local
  2. sudo chown -R joseph:joseph /usr/local/hadoop

这里多说一下,就是一定要将hadoop文件夹的权限改成当前用户的哦(joseph:joseph)不然到时候结点会变成unhealthy,从而无法正常工作。
8 终于可以执行了
在master机器上,保险期间,先执行:
stop.all.sh
然后:
  1. cd /usr/local/hadoop/
  2. hdfs namenode -format
  3. start-dfs.sh
  4. start-yarn.sh

你可以看到datanode和nodemanager在每个机器上都启动了说明就正常了。
你还可以通过master上的浏览器输入localhost:50070验证datanode,输入master:8088验证nodemanager的正确性
另外,hdfs dfsadmin -report也是一种很好的查看status的方法

9 小试牛刀

跟我做:
hdfs dfs-mkdir-p/input
hdfs dfs-put etc/hadoop /input
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep /input/hadoop /output 'dfs[a-z.]+'
看到运行了吗?并没有是吧?然后:
hdfs dfs-cat /output/*
看到了吗?得意

一路碰到的问题:

1.原来我的机器名字叫slave_01。。。于是怎么都编不过去,而且有各种诡异的问题,如(Does not contain a valid host:port authority: )就是下划线的问题。
2.在master.8088中点击history找不到页面
mr-jobhistory-daemon.sh start historyserver
即可
3.总是卡在 INFO mapreduce.Job: map 0% reduce 0%的情况
因为没有任何可用的机器啊,要不就是设置不对,要不就是机器都是unhealthy。
如何解决unhealthy:
一种可能是hadoop的权限不对,参考我上面的chown那个命令
另一种可能就是你的机器剩余空间太小了,或是比例小于5%
4.怎么感觉总是只有一台机器在被往死里用,完全没有map和reduce的快感啊?
这个首先你:
hadoop job -list-active-trackers
确定有哪些机器是参加运算的,然后就是复杂的mapreduce设置了,这里先不涉及感兴趣的可以参考这里和这里
主要是这几个参数:

mapreduce.job.ubertask.enable

mapreduce.job.ubertask.maxmaps

mapreduce.job.ubertask.maxreduces

mapreduce.job.ubertask.maxbytes

先到这里吧,希望能帮到大家!微笑

0 0
原创粉丝点击