hadoop分布式集群搭建笔记

1、Hadoop运行模式

Hadoop有三种运行模式,分别如下:

单机(非分布式)模式

伪分布式(用不同进程模仿分布式运行中的各类节点)模式

完全分布式模式

注:前两种可以在单机运行,最后一种用于真实的集群环境,通常用在生产环境上。我们可以搭建本地的伪分布式模式来模拟分布式环境的执行。

 

2、Hadoop的安装及配置

环境:Ubuntu16.04LTS,Hadoop 2.5.2,

准备四台机器,ip及主机名如下:

192.168.184.158 master

192.168.184.167 slave1

192.168.184.168 slave2

192.168.184.169 slave3

 

安装步骤如下:

1、安装ssh和jdk:略

 

2、增加一个用户组用户,用于hadoop运行及访问。

root@ubuntu:~# sudo addgroup hadoop

root@ubuntu:~# sudo adduser –ingroup hadoop hadoop

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

sudo gedit /etc/sudoers

按回车键后就会打开/etc/sudoers文件了,给hadoop用户赋予root用户同样的权限。

在root   ALL=(ALL:ALL)   ALL下添加

hadoop   ALL=(ALL:ALL)  ALL,

 

 

 

3、配置多机无密码访问

 

sudo gedit /etc/hosts

分别在四台机上修改hosts文件为以下内容

 

127.0.0.1 localhost

192.168.184.158 master

192.168.184.167 slave1

192.168.184.168 slave2

192.168.184.169 slave3

 

在每台机生成SSH证书,配置SSH无密码登陆,详见:http://www.cnblogs.com/ycblus/p/5653123.html

将slave1,slave2,slave3的公钥分发至master,并分别将内容加入authorized_keys中:

三台机分别进入/home/hadoop/.ssh目录执行:

hadoop@slave1$: scp -r id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave1.txt

hadoop@slave2$: scp -r id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave2.txt

hadoop@slave3$: scp -r id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave3.txt

要使四台主机能够相互无密码访问,把master主机的合并后的authorized_keys分发至其他三台主机即可。,

进入/home/hadoop/.ssh目录执行:  

hadoop@master: scp -r authorized_keys hadoop@slave1:/home/hadoop/.ssh/

hadoop@master: scp -r authorized_keys hadoop@slave2:/home/hadoop/.ssh/

hadoop@master: scp -r authorized_keys hadoop@slave3:/home/hadoop/.ssh/

 

 

4、配置完成,测试一下:

hadoop@master:~$ ssh slave1

hadoop@slave1:~$ ssh master

 

首先是:下载,解压缩,分配权限。

hadoop-2.5.2.tar.gz下载后放在/home/hadoop/software下

执行

hadoop@master:/home/hadoop/software# tar zxzf hadoop-2.5.2.tar.gz

 

到此就安装完毕。

 

配置环境变量

4、在/home/hadoop/.bashrc文件中添加环境变量信息。

 

配置jdk+hadoop环境变量

sudo gedit ~/.bashrc

 

#HADOOP VARIABLES START

export JAVA_HOME=/opt/Java

export HADOOP_INSTALL=/home/hadoop/software

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

执行生效:

source ~/.bashrc

验证环境变量是否配置成功,如下:

export、echo $HADOOP_HOME、java -version

 

 

下面说说如何配置和启动:

基本思路是配置hadoop-env.sh、core-site.xml、mapred-site.xml、hdfs-site.xml、slave配置

首先建立一个用来存放数据的目录:mkdir /home/hadoop/ software/hadoop/hadoop-datastore

 

打开/home/hadoop/software/hadoop/etc/hadoop/core-site.xml,配置如下

 

<configuration>

  <property>

    <name>hadoop.tmp.dir</name>

    <value>/home/hadoop/software/hadoop/hadoop-datastore/tmp/</value>

  </property>

  <property>

   <!--fs.default.name指定NameNode的IP地址和端口号-->

    <name>fs.defaultFS</name>

    <value>hdfs://192.168.184.158:9000</value>

  </property>

</configuration>

 

打开/home/hadoop/software/hadoop/etc/hadoop/mapred-site.xml,配置如下

 

<configuration>

<property>

  <name>mapred.job.tracker</name>

  <value>http://192.168.184.158:9001</value>

</property>

    <property>

            <name>mapreduce.framework.name</name>

            <value>yarn</value>

    </property>

    <property>

       <name>mapreduce.map.java.opts</name>

       <value>-Xmx512m -Ddb2.jcc.charsetDecoderEncoder=3</value>

       </property>

</configuration>

 

打开/home/hadoop/software/hadoop/etc/hadoop/hdfs-site.xml,配置如下

 

<configuration>

       <property>

<!--block的副本数,默认为3;你可以设置为1 这样每个block只会存在一份。-->

                <name>dfs.replication</name>

                <value>3</value>

  </property>

       <property>

      <name>dfs.namenode.name.dir</name>

      <value>file:/home/hadoop/software/hadoop/hadoop-datastore/tmp/dfs/name</value>

  </property>

  <property>

      <name>dfs.datanode.data.dir</name>

      <value>file:/home/hadoop/software/hadoop/hadoop-datastore/tmp/dfs/data</value>

  </property>

       <property>

              <name>dfs.permissions</name>

              <value>false</value>

       </property>

</configuration>

 

打开/home/hadoop/software/hadoop/etc/hadoop/hadoop-env.sh,添加JAVA_HOME的配置:如:

export JAVA_HOME=/home/hadoop/software/jdk1.6.0_31

 

打开/home/hadoop/software/hadoop/etc/hadoop/slaves,修改如下,表示datanode节点

slave1

slave2

slave3

 

最后,将master上配置好的hadoop文件分发至另外三台机器,ok,配置完毕。

 

格式化HDFS:

hadoop@master:~$ /home/hadoop/software/hadoop/bin/hadoop namenode -format

 

启动HDFS和MapReduce

hadoop@master: start-all.sh

 

停止服务:

hadoop@master:~ stop-all.sh

 

通过jps查看进程是否启动成功

hadoop@master: jps

9544 NameNode

9905 ResourceManager

33096 Jps

9747 SecondaryNameNode

 

出现如上信息,表示hadoop启动成功。

 

netstat -at|grep 50030

netstat -at|grep 50070

查看端口是否正常

 

注意:有时候有些启动不成功,可以在/home/hadoop/software/hadoop/logs/查看日志信息进行诊断。

 

访问http://master:50070可以看到NameNode以及整个分布式文件系统的状态,浏览分布式文件系统中的文件以及日志等。

 

4.问题:

1.hadoop 启动后页面访问看不到节点信息:

Hadoop集群所有的DataNode都启动不了解决办法

正确的处理方法是,到你的每个Slave下面去,找到.../usr/hadoop/tmp/dfs/  -ls

会显示有: data这里需要把data文件夹删掉。接着直接在刚才的目录下启动hadoop

 

2:使用不同的用户启动hadoop后出现hdfs无法启动的情况:查日志发现错误如下:java.io.FileNotFoundException: /home/hadoop/software/hadoop/hadoop-datastore/tmp/dfs/name/in_use.lock (Permission denied)

这有两种场景出现,

  1):在原来正常的时候,有一次突然使用了原来不同的用户启动了一次hadoop。这种场景会产生一个in_use.lock 文件夹在你设置的目录中,这时候可以删除这个文件夹直接,然后重新启动

  2):在格式化hadoop的时候和当期启动的用户不是同一个,也会导致该问题。这个时候可以使用格式化hadoop的那个用户重新启动hadoop。也可以解决此错误。

posted @ 2016-07-22 10:56  ycblus  阅读(297)  评论(0编辑  收藏  举报