一、Hadoop运行模式html
Hadoop有三种运行模式,分别以下:java
单机(非分布式)模式node
伪分布式(用不一样进程模仿分布式运行中的各种节点)模式ubuntu
彻底分布式模式bash
注:前两种能够在单机运行,最后一种用于真实的集群环境,一般用在生产环境上。咱们能够搭建本地的伪分布式模式来模拟分布式环境的执行。ssh
二、Hadoop的安装及配置分布式
环境:Ubuntu16.04LTS,Hadoop 2.5.2,oop
准备四台机器,ip及主机名以下:测试
192.168.184.158 master日志
192.168.184.167 slave1
192.168.184.168 slave2
192.168.184.169 slave3
安装步骤以下:
一、安装ssh和jdk:略
二、增长一个用户组用户,用于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,
三、配置多机无密码访问
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/
四、配置完成,测试一下:
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
到此就安装完毕。
配置环境变量
四、在/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。也能够解决此错误。