1. 基本概念
2. 基础配置
2.1 三台服务器(可以使用虚拟机)
系统:Ubuntu14.04 64位 Server版
Jdk版本:jdk1.7.0_79
Hadoop版本: 2.6.0
Zookeeper版本: 3.4.6
2.2 安装配置规划
主机名 | IP | 安装的软件 | 进程 |
---|---|---|---|
gvm39 | 192.168.3.141 | jdk、hadoop、zookeeper | NameNode、DFSZKFailoverController、DataNode、NodeManager、JournalNode、QuorumPeerMain |
gvm40 | 192.168.3.142 | jdk、hadoop、zookeeper | NameNode、DFSZKFailoverController、DataNode、NodeManager、JournalNode、QuorumPeerMain |
gvm41 | 192.168.3.143 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain、ResourceManager |
2.3 每台主机配置
创建hadoop用户
$ sudo adduser hadoop
# 提示输入密码,剩下的都是一直默认即可
将hadoop用户添加位sudo管理员组,编辑/etc/sudoer文件
$ sudo vim /etc/sudoers
将以下添加到”root ALL=(ALL:ALL) ALL”下面
hadoop ALL=(ALL:ALL) ALL
保存后退出
注销本用户,以hadoop用户身份登录。
2.4 SSH免密码登录
创建密钥对
$ ssh-keygen -t rsa -P ''
# 默认保存到/home/hadoop/.ssh/
查看”/home/hadoop/”下是否有”.ssh”文件夹,且”.ssh”文件下是否有两个刚生产的无密码密钥对。
$ ls /home/hadoop/.ssh/
把id_rsa.pub追加到授权的key里面去。
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在其他两台电脑上分别生成密钥对
分别将自己主机的公钥发给其他两台主机
$ scp .ssh/id_rsa.pub hadoop@192.168.3.142:/home/hadoop
$ scp .ssh/id_rsa.pub hadoop@192.168.3.143:/home/hadoop
将其他主机发过来的公钥加入到~/.ssh/authorized_keys中
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
以上配置完成,三台主机之间访问就不需要密码了。
3. 开始安装
注: 先在一台主机上安装
3.1 安装jdk
3.1.1 下载jdk
$ wget http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz
3.1.2 安装jdk
# 解压jdk-7u79-linux-x64.tar.gz
$ tar -zxvf jdk-7u79-linux-x64.tar.gz
# 拷贝解压后的文件夹jdk1.7.0_79移动到/usr/local/目录
$ sudo mv jdk1.7.0_79/ /usr/local/
3.1.3 配置jdk环境变量
编辑/etc/bash.bashrc文件
$ sudo vim /etc/bash.bashrc
将一下添加到bash.bashrc文件到最后
# set jdk
export JAVA_HOME=/usr/local/jdk1.7.0_79
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存后退出并执行以下命令,使刚才的配置文件生效
$ source /etc/bash.bashrc
查看jdk是否安装正确
$ java -version
将本主机的jdk安装目录通过scp拷贝到其他两台主机
$ scp -r /usr/local/jdk1.7.0_79/ root@192.168.3.142:/usr/local/
修改jdk环境变量配置文件,同第一台
参考: 3.1.3 配置jdk环境变量
3.2 安装Hadoop
3.2.1 下载Hadoop
$ wget http://apache.fayea.com/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
3.2.2 安装Hadoop
# 解压hadoop-2.6.0.tar.gz
$ tar -zxvf hadoop-2.6.0.tar.gz
# 拷贝解压后hadoop-2.6.0目录的文件移动到/usr/local/目录中,为了操作方便,将hadoop-2.6.0的目录名改为hadoop
$ sudo mv hadoop-2.6.0/ /usr/local/hadoop
3.2.3 配置Hadoop
进入/usr/local/hadoop/目录
$ cd /usr/local/hadoop/
创建tmp临时目录
$ mkdir tmp
1). 配置etc/hadoop/hadoop-env.sh文件,添加jdk安装位置到文件
$ vim etc/hadoop/hadoop-env.sh
# 添加如下代码到文件最后
export JAVA_HOME=/usr/local/jdk1.7.0_79
2). 配置vim etc/hadoop/core-site.xml文件
<configuration>
<!-- 指定 hdfs 的 nameservice 为 namenodeservice -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenodeservice</value>
</property>
<!-- 指定 hadoop 临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<!-- 指定 zookeeper 地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>gvm39:2181,gvm40:2181,gvm41:2181</value>
</property>
</configuration>
3). 配置vim etc/hadoop/hdfs-site.xml文件
<configuration>
<!--指定 hdfs 的 nameservice 为 namenodeservice,需要和 core-site.xml 中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>namenodeservice</value>
</property>
<!-- namenodeservice 下面有两个 NameNode,分别是 namenode1,namenode2 -->
<property>
<name>dfs.ha.namenodes.namenodeservice</name>
<value>namenode1,namenode2</value>
</property>
<!-- namenode1 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.namenodeservice.namenode1</name>
<value>gvm39:9000</value>
</property>
<!-- namenode1 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.namenodeservice.namenode1</name>
<value>gvm39:50070</value>
</property>
<!-- namenode2 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.namenodeservice.namenode2</name>
<value>gvm40:9000</value>
</property>
<!-- namenode2 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.namenodeservice.namenode2</name>
<value>gvm40:50070</value>
</property>
<!-- 指定 NameNode 的元数据在 JournalNode 上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://gvm39:8485;gvm40:8485;gvm41:8485/namenodeservice</value>
</property>
<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/journal</value>
</property>
<!-- 开启 NameNode 失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.namenodeservice</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置 sshfence 隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
4). 配置vim etc/hadoop/mapred-site.xml文件
<configuration>
<!-- 指定 mr 框架为 yarn 方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5). 配置vim etc/hadoop/yarn-site.xml文件
<configuration>
<!-- 指定 resourcemanager 地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>gvm41</value>
</property>
<!-- 指定 nodemanager 启动时加载 server 的方式为 shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
6). 配置vim etc/hadoop/slaves文件
gvm39
gvm40
gvm41
将本主机的zookeeper安装目录通过scp拷贝到其他两台主机
$ scp -r /usr/local/hadoop/ root@192.168.3.142:/usr/local/
$ scp -r /usr/local/hadoop/ root@192.168.3.143:/usr/local/
在另外两台主机上修改zookeeper文件夹及其子目录的权限
$ sudo chown -R hadoop:hadoop /usr/local/hadoop/
3.3 安装zookeeper
3.3.1 下载zookeeper
$ wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
3.3.2 安装zookeeper
# 解压zookeeper-3.4.6.tar.gz
$ tar -zxvf zookeeper-3.4.6.tar.gz
# 拷贝解压后zookeeper-3.4.6目录的文件移动到/usr/local/hadoop/目录中,为了操作方便,将zookeeper-3.4.6的目录名改为zookeeper
$ sudo mv zookeeper-3.4.6 /usr/local/hadoop/zookeeper
3.2.3 配置zookeeper
创建zookeeper临时文件
$ mkdir /usr/local/hadoop/zookeeper/tmp
配置/usr/local/zookeeper/conf/zoo.cfg
dataDir=/usr/local/hadoop/zookeeper/tmp
server.1=192.168.3.141:2888:3888
server.2=192.168.3.142:2888:3888
server.3=192.168.3.143:2888:3888
在/usr/local/hadoop/zookeeper/tmp/目录中创建myid,并写入1,保存后退出
$ vim /usr/local/hadoop/zookeeper/tmp/myid
将本主机的zookeeper安装目录通过scp拷贝到其他两台主机
$ scp -r /usr/local/hadoop/zookeeper/ root@192.168.3.142:/usr/local/
$ scp -r /usr/local/hadoop/zookeeper/ root@192.168.3.143:/usr/local/
在另外两台主机上修改zookeeper文件夹及其子目录的权限
$ sudo chown -R hadoop:hadoop /usr/local/hadoop/zookeeper/
在gvm40上修改vim /usr/local/zookeeper/tmp/myid文件,将1改为2
在gvm41上修改vim /usr/local/zookeeper/tmp/myid文件,将1改为3
4. 启动
4.1 启动zookeeper集群
在每台主机上执行
$ /usr/local/hadoop/zookeeper/bin/zkServer.sh start
查看主机zookeeper角色
$ /usr/local/hadoop/zookeeper/bin/zkServer.sh status
通过jps命令查看守护进程
$ jps
4.2 启动 journalnode
$ /usr/local/hadoop/sbin/hadoop-daemons.sh start journalnode
通过jps命令查看每台机器的守护进程中是否有JournalNode进程
4.3 格式化 HDFS
$ /usr/local/hadoop/bin/hdfs namenode -format
格式化后会在根据 core-site.xml 中的 hadoop.tmp.dir 配置生成个文件,配置的是/usr/local/hadoop/tmp
将/usr/local/hadoop/tmp拷贝到其他两台机器
$ scp -r /usr/local/hadoop/tmp/ hadoop@192.168.3.142:/usr/local/hadoop/
$ scp -r /usr/local/hadoop/tmp/ hadoop@192.168.3.143:/usr/local/hadoop/
4.4 格式化 ZK
在gvm39 上执行格式化命令
$ /usr/local/hadoop/bin/hdfs zkfc -formatZK
4.5 启动HDFS
在gvm39上执行
$ /usr/local/hadoop/sbin/start-dfs.sh
4.6 启动yarn
在gvm41上执行
$ /usr/local/hadoop/sbin/start-yarn.sh