安装过程中,hostname 为 YARN。liunx用户为yarn。
为了方便配置,在第七步之前,都是用root用户进行配置。第七步之后改为yarn用户配置。
1. 安装JDK
Hadoop是用Java语言编写的,因此需要在Java环境下工作。
Hadoop2.0版本以上要求JDK版本在1.6及以上。从官网下载发布的最新JDK安装包(jdk-8u111-linux-i586.tar.gz)。
我们以CentOS6.4的Linux系统为例,系统已经预安装了开源的JDK版本,用以下方式卸载。
rpm -qa | grep ‘jdk’
rpm -e --nodeps 文件名
安装JDK
cd /usr/local
tar -xzvf jdk-8u51-linux-i586.tar.gz
配置JAVA_HOME环境变量
# 打开配置文件
vi /etc/profile
# 在profile最后添加以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_51
export JRE_HOME=/usr/local/jdk1.8.0_51/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASS_PATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
# 重新运行profile文件,使配置文件生效
source /etc/profile
2. 配置ssh免密码登录
单机模式下,没有Hadoop守护进程,所以不需要配置SSH。在伪分布式和完全分布式情况下必须启动Hadoop守护进程,然而启动Hadoop守护进程的前提是已经成功安装了SSH。Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候无需输入密码,因此需要安装配置SSH,这样NameNode使用SSH无密码登录并启动其它节点上的DataNode进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode报告节点运行情况。
安装ssh服务
# 查看是否安装了ssh服务
rpm -qa | grep openssh
# 如果没有安装ssh服务,则安装ssh
yum install ssh
ssh配置无密码登录
# 生成密钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa
# 将生成的公钥添加到authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 测试无密码登录
ssh localhost
3.配置hosts文件
向hosts文件中添加ip和主机名
# 打开hosts文件
vi /etc/hosts
# 向文件中添加
127.0.0.1 YARN
4.下载hadoop安装包并安装
从hadoop官网上下载的tar包(hadoop-2.7.0.tar.gz),也可以下载别的,配置步骤大致一样。
解压安装包
# 将安装包下载到路径:/usr/local
# 转到/usr/local
cd /usr/local/
# 解压安装包
tar -zxvf hadoop-2.7.0.tar.gz
# 将解压出来的文件夹重命名为hadoop
mv hadoop-2.7.0 hadoop
5.配置hadoop环境变量
# 打开配置文件
vi /etc/profile
# 在profile最后添加以下内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export CLASS_PATH=$CLASS_PATH:$HADOOP_HOME/lib
6.创建一些用到的文件夹和文件
# 进入hadoop文件夹中
cd /usr/local/hadoop
# 创建文件
mkdir -p data/namenode
mkdir -p data/snamenode
mkdir -p data/datanode
mkdir logs
mkdir -p tmp/mapred/local
7.更改hadoop目录的所有用户
系统文件已经全部配置完成,剩下的都可以用yarn用户配置完成,所以更改hadoop的所用用户为yarn,并切换用户为yarn.
# 修改hadoop所有用户
chown -R yarn:yarn /usr/local/hadoop
# 切换用户
su yarn
8.配置hadoop文件
配置一些基本且必须的文件,如果想要调优可以进一步研究。
切换到配置文件夹
cd /usr/local/hadoop/etc/hadoop
开始配置文件,小标题为要配置的文件名。
a.Hadoop-env.sh
# 配置JAVA_HOME环境变量和HADOOP的类路径
export JAVA_HOME=/usr/local/jdk1.8.0_51
export HADOOP_CLASSPATH=.
b. mapred-env.sh
# 配置JAVA_HOME环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_51
# 配置hadoop的日志文件夹
export HADOOP_MAPRED_LOG_DIR="/usr/local/hadoop/logs"
c. yarn-env.sh
# 配置JAVA_HOME环境变量,这个可以不配,
export JAVA_HOME=/usr/local/jdk1.8.0_51
d.core-site.xml
# 将配置内容放到<configuration>和</configuration>中间
<property>
<name>fs.defaultFS</name>
<value>hdfs://YARN:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>yarn</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>60</value>
</property>
e. hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:/usr/local/hadoop/data/snamenode</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:/usr/local/hadoop/data/snamenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/data/datanode</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>YARN:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>YARN:50090</value>
</property>
f.mapred-site.xml
这个文件在文件夹中没有,但是有一个叫做mapred-site.xml.template的文件,可以复制并重命名出一个mapred-site.xml文件
cp mapred-site.xml.template mapred-site.xml
配置内容
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/mapred</value>
</property>
<property>
<name>mapreduce.cluster.local.dir</name>
<value>file:/usr/local/hadoop/tmp/mapred/local</value>
</property>
9.格式化HDFS
在启动Hadoop服务之前,需要初始化一个新的HDFS文件系统,初始化过程会创建目录和创建NameNode持久化数据结构的初始版本。形成一个空的文件系统。因为HDFS分布式文件系统的NameNode服务要管理和追踪文件系统中所有的元数据。需要注意的是初始化过程不涉及DataNode,因为DataNode可以动态的加入集群和脱离集群。所以用户不需要关心文件系统的规模或大小,因为DataNode的数量决定文件系统的规模并且在文件系统初始化后按需要增加或减少。格式化进程将会把在hdfs-site.xml配置文件中配置的dfs.namenode.name.dir属性的值(目录)中的原有的数据内容删除并创建目录和数据结构的初始版本。
执行命令
hadoop namenode -format
10.启动服务
HDFS格式化成功后就可以启动HDFS服务和YARN服务了。
有两种启动方式:
第一种是直接启动所有服务
# 开启所有服务的命令
start-all.sh
# 关闭所有服务的命令
stop-all.sh
第二种是依次开启服务
# 启动NameNode服务,NameNode是元数据服务器,也是中心服务器
hadoop-daemon.sh start namenode
# 启动secondarynamenode服务,SecondaryNameNode是NameNode的数据检查备份节点
hadoop-daemon.sh start secondarynamenode
# 启动DataNode服务,DataNode是存放数据的节点
hadoop.daemon.sh start datanode
# 启动ResourceManager服务
yarn-daemon.sh start resourcemanager
# 启动NodeManager服务
yarn-daemon.sh start nodemanager
# 停止NodeManager服务,resourcemanager类似
yarn-daemon.sh stop nodemanager
# 停止datanode服务。namenode类似
hadoop-daemon.sh stop datanode
11.测试是否启动成功
使用jsp命令,可以查看启动的java服务。正常情况下控制台应该显示五个服务和Jps服务。分别是:
Jps
SecondaryNameNode
NameNode
DataNode
ResourceManager
NodeManager