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,配置如下
打开/home/hadoop/software/hadoop/etc/hadoop/mapred-site.xml,配置如下
打开/home/hadoop/software/hadoop/etc/hadoop/hdfs-site.xml,配置如下
打开/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。也可以解决此错误。