安装前的准备
这里给出JKD1.8.0的下载地址:https://www.cnblogs.com/xiximayou/p/12377900.html
Hadoop2.6.0的下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.6.0/
环境
主机的测试环境为:
- Ubuntu 16.04
- Hadoop 2.6.0
- JDK 1.8.0
一. 创建Hadoop用户
$ sudo useradd -m hadoop -s /bin/bash #创建hadoop用户,并使用/bin/bash作为shell
$ sudo passwd hadoop #为hadoop用户设置密码,之后需要连续输入两次密码
$ sudo adduser hadoop sudo #为hadoop用户增加管理员权限
$ su - hadoop #切换当前用户为用户hadoop
$ sudo apt-get update #更新hadoop用户的apt,方便后面的安装
二. 安装SSH并设置SSH免密码登录
SSH(Secure Shell)是一种建立在应用层和传输层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性的协议。
$ sudo apt-get install openssh-server #安装SSH server
$ ssh localhost #登陆SSH,第一次登陆输入yes
$ exit #退出登录的ssh localhost
$ cd ~/.ssh/ #如果没法进入该目录,执行一次ssh localhost
$ ssh-keygen -t rsa #生成 RSA密钥
输入完 ssh-keygen -t rsa
之后系统提示 “Enter file in which to save the key(home/hadoop/.ssh/id_rsa)” 时,连续按三次回车键,其中第一次回车是让KEY存于默认位置,方便后续输出,第二第三次是为了确定passphrase,如图所示:
当三次回车之后会出现下图,即安装成功:
接着再输入如下代码,如果没有提示密码登录,表示免密码登录成功:
$ cat ./id_rsa.pub >> ./authorized_keys #加入授权
$ ssh localhost #若没有要求输入密码登录,表示免密码登录成功
三. 安装JDK1.8
在这里可以根据自己电脑配置选择jdk的版本,我选择的是版本是 jdk-8u11-linux-x64.tar.gz,其他版本也可以到oracle官网下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html 。
接下来是安装与配置:
$ mkdir /usr/lib/jvm #创建jvm文件夹
$ sudo tar zxvf jdk-7u80-linux-x64.tar.gz -C /usr/lib/jvm #/ 解压到/usr/lib/jvm目录下
$ cd /usr/lib/jvm #进入该目录
$ mv jdk1.7.0_80 java #重命名为java
注: 其中如果权限不够,无法在相关目录下创建jvm文件夹,那么可以使用 $ sudo -i
语句进入root账户来创建文件夹。
接着使用 vim 对jdk进行环境变量配置(此时的地址在 /usr/local/hadoop):
$ sudo vim ~/.bashrc #给JDK配置环境变量
如果没有vim,可以使用 $sudo apt-get install vim
进行下载。
打开 .bashrc 之后,在末尾添加如下代码,如图所示(后面都一样,都是在文件末尾添加):
export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
修改完文件后,输入代码:
$ source ~/.bashrc #使新配置的环境变量生效
$ java -version #检测是否安装成功,查看java版本
当输入 java -version
后出现下图内容,即为安装成功:
四. 安装Hadoop2.6.0
先对Hadoop进行安装:
$ sudo tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local #解压到/usr/local目录下
$ cd /usr/local
$ sudo mv hadoop-2.6.0 hadoop #重命名为hadoop
$ sudo chown -R hadoop ./hadoop #修改./hadoop文件所有者为hadoop
接着使用 vim 对 hadoop 进行环境配置(此时的地址在 /usr/local/hadoop)
:
$ sudo vim ~/.bashrc
同样地,在末尾添加如下代码:
export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改完 ~/.bashrc 文件后,输入代码使其激活:
$ source ~/.bashrc
$ hadoop version
当输入 hadoop version
之后出现如下图内容,即为安装成功:
五.伪分布式配置
Hadoop有三种运行方式:
1. Local(Standalone)Mode(本地模式,Hadoop的默认运行模式): 在该模式下所有程序都运行在同一个JVM(Java Virtual Machine,Java虚拟机)里。MapReduce直接使用Linux的本地文件系统存储数据,而不使用HDFS系统。该模式主要用于测试和调试MapReduce程序,适合开发阶段使用。
2. Rseudo-Distribution Mode(即伪分布模式): 在该模式下,Hadoop的守护进程在本地机器上。该模式模拟一个分布式集群,数据存储于分布式文件系统HDFS,而不保存于Linux的本地文件系统。同时,该模式通过创建不同的JVM实例来实现程序的分布式运行。这种模式主要是考虑用户没有足够的机器去部署一个完全分布式的环境。
3. Fully-Distribution Mode(即完全分布模式): 在该模式下,Hadoop在集群中的每个节点上启动一个守护进程,系统依靠HDFS实现数据的分布式存储,MapReduce程序中的Map任务和Reduce任务通过调度机制并发地运行于不同的节点之中,实现数据的就近处理。
而今天所要安装的是第二个模式——伪分布模式。Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/
中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。
首先将jdk1.7的路径添加到hadoop-env.sh文件(此时的地址在 /usr/local/hadoop
):
$ sudo vim etc/hadoop/hadoop-env.sh
接着在文件末尾添加代码:
export JAVA_HOME=/usr/lib/jvm/java #将jdk的路径添加到hadoop-env.sh中
接下来修改配置文件 core-site.xml,用来定义NameNode进程的URI:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>namenode工作时的临时文件夹.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<description>HDFS的URI,localhost为主节点的名字.</description>
</property>
</configuration>
再修改配置文件 hdfs-site.xml,用来设置HDFS的NameNode和DataNode两大进程的重要参数:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>副本个数,默认值是3.</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
<description>NameNode上的HDFS命名空间元数据的存储位置.</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
<description>DateNode数据块的存储位置.</description>
</property>
</configuration>
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(可参考官方教程),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,执行对NameNode的格式化:
$ ./bin/hdfs namenode -format #格式化
启动NameNode和DataNode进程,并查看启动结果:
$ ./sbin/start-dfs.sh
$ jps
当输入结果后显示如下图,则表示启动成功:
成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
至此,Hadoop配置成功!
六、 配置YARN
进入 /usr/local/hadoop
目录中,输入:
$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
配置MapReduce应用程序以及JobHistory服务的重要参数,打开 mapred-site.xml:
sudo vim etc/hadoop/mapred-site.xml
在文件末尾添加代码:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
接着打开 yarn-site.xml,设置ResourceManager和NodeManager两大进程的重要配置参数:
sudo vim etc/hadoop/yarn-site.xml
在文件末尾添加代码:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
最后启动资源管理器查看结果:
$ ./sbin/start-yarn.sh
$ ./sbin/mr-jobhistory-daemon.sh start historyserver #查看历史任务
$ jps
当输入jps
后显示如下图,则说明启动成功:
至此,YARN配置成功!
七、结束
当使用结束时,关闭资源管理器:
$ ./sbin/stop-all.sh
$ ./sbin/mr-jobhistory-daemon.sh stop historyserver