各种部署方式及特点
- 单机模式:不能使用HDFS,只能使用MapReduce,所以单机模式最主要的目的是在本机调试MapReduce代码
- 伪分布式模式:用多个线程模拟多台真实机器,即模拟真正的分布式环境
- 完全分布式:用多台机器(或启动多个虚拟机)来完成部署集群
这里先用伪分布式来进行练习,仅用一台虚拟机
安装步骤如下
- 关闭防火墙
#执行:
service iptables stop
#这个指令关闭完防火墙后,如果重启,防火墙会重新建立
#所以,如果想重启后防火墙还关闭,
#需额外执行:
chkconfig iptables off
- 配置主机名
执行:
vim /etc/sysconfig/network
注意:主机名里不能有下滑线,或者特殊字符 #$,不然会找不到主机导致无法启动
这种方式更改主机名需要重启才能永久生效,因为主机名属于内核参数。
如果不想重启,可以执行:hostname hadoop01。但是这种更改是临时的,重启后会恢复原主机名。
所以可以结合使用。先修改配置文件,然后执行:hostname hadoop01 。可以达到不重启或重启都是主机名的目的
- 配置hosts文件
执行:
vim /etc/hosts
- 配置免秘钥登录
#在hadoop01节点执行:
#执行:
ssh-keygen
#然后一直回车
生成节点的公钥和私钥,生成的文件会自动放在/root/.ssh目录下
#然后把公钥发往远程机器,比如hadoop01向hadoop01发送
#执行:
ssh-copy-id root@hadoop01
#此时,hadoop02节点就是把收到的hadoop秘钥保存在
/root/.ssh/authorized_keys
#这个文件里,这个文件相当于访问白名单,
#凡是在此白名单存储的秘钥对应的机器,登录时都是免密码登录的。
#当hadoop01再次通过ssh远程登录hadoop01时,发现不需要输入密码了。
在hadoop02节点执行上述上述步骤,让hadoop02节点连接hadoop01免密码登录
- 配置自己节点登录的免密码登录
如果是单机的伪分布式环境,节点需要登录自己节点,
即hadoop01要登录hadoop01
但是此时是需要输入密码的,所以要在hadoop01节点上
#执行:
ssh-copy-id root@hadoop01
- 安装和配置jdk
#1)执行:
vi /etc/profile
#2)在尾行添加
##set java environment
JAVA_HOME=/usr/local/src/java/jdk1.8.0
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
#保存退出
#3)使更改的配置立即生效
source /etc/profile
#4)查看JDK版本信息。如显示1.8.0证明成功。
java -version
- 上传和解压hadoop安装包
#执行:
tar -xvf hadoop……
#目录说明:
#bin目录:命令脚本
#etc/hadoop:存放hadoop的配置文件
#lib目录:hadoop运行的依赖jar包
#sbin目录:启动和关闭hadoop等命令都在这里
#libexec目录:存放的也是hadoop命令,但一般不常用
#最常用的就是bin和etc目录
- 配置hadoop-env.sh
#这个文件里写的是hadoop的环境变量,主要修改hadoop的java_home路径
#切换到
etc/hadoop目录
#执行:
vim hadoop-env.sh
#修改java_home路径和hadoop_conf_dir 路径
#然后执行:
source hadoop-env.sh
#让配置立即生效
- 修改core-site.xml
#在etc/hadoop目录下
#执行:
vim core-site.xml
配置如下:
<configuration>
<!--用来指定hdfs的老大,namenode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000<value>
</property>
<!--用来指定hadoop运行时产生文件的存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.7.1/tmp</value>
</property>
</configuration>
- 修改 hdfs-site .xml
配置如下:
<configuration>
<!--指定hdfs保存数据副本的数量,包括自己,默认值是3-->
<!--如果是伪分布模式,此值是1-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--设置hdfs的操作权限,false表示任何用户都可以在hdfs上操作文件-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
- 修改 mapred-site.xml
<configuration>
<property>
<!--指定mapreduce运行在yarn上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<!--yarn是资源协调工具-->
- 修改yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<!--指定yarn的老大 resoucemanager的地址-->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<!--NodeManager获取数据的方式-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 配置slaves文件
- 配置hadoop的环境变量
JAVA_HOME=/home/software/jdk1.8
HADOOP_HOME=/home/software/hadoop-2.7.1
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export JAVA_HOME PATH CLASSPATH HADOOP_HOME
- 格式化namenode
#执行:
hadoop namenode -format
#如果不好使,可以重启linux
#当出现:successfully,证明格式化成功
启动hadoop
#切换到sbin目录,
#执行:
start-dfs.sh
#启动hadoop相关的服务
注:如果在启动时,报错:Cannot find configuration directory: /etc/hadoop
解决办法:
编辑 etc/hadoop下的 hadoop-env.sh 文件,添加如下配置信息:
export HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
然后执行 source hadoop-env.sh 使配置立即生效
执行:start-yarn.sh 启动yarn相关的服务
在浏览器访问:
192.168.234.21:50070来访问hadoop的管理页面
启动失败的解决办法
常见错误
1.执行Hadoop指令,比如格式化:hadoop namenode -format
报:command找不到错误
检查:/etc/profile的Hadoop配置
2.少HFDS相关进程,比如少namenode,datanode,
可以去Hadoop 安装目录下的logs目录,查看对应进程的启动日志文件。
解决方法:①先停止HDFS相关的所有的进程(stop-dfs.sh 或 kill -9)
②再启动HDFS(start-dfs.sh)
另外一种解决方式:①先停止HDFS相关的所有的进程 ②删除tmp(元数据目录)再创建一个新的 ③需要做一次格式化指令:hadoop namenode -format
④启动HDFS
关于Hadoop的伪分布式安装配置,如果有问题的小伙伴可以随时在评论区提问