hadoop2.4.0
zookeeper3.4.6
说明:总共三个节点,namenode1、namenode2、datanode
一、集群配置ssh免密码登录:
在三台机器上都执行以下命令:
// 在namenode1节点生成SSH密钥对
[hadoop@namenode1 ~]$ cd /usr/bin/
[hadoop@namenode1 bin]$ ./ssh-keygen -t rsa
// 将公钥复制到集群所有节点机器上
[hadoop@namenode1 bin]$ ssh-copy-id namenode1
[hadoop@namenode1 bin]$ ssh-copy-id namenode2
[hadoop@namenode1 bin]$ ssh-copy-id datanode
// 测试是否可以免密码登录 namenode2,无需密码即可登录
[hadoop@namenode1 bin]$ ssh namenode2
二、zookeeper 安装
- 解压 zookeeper 到 /opt 下
- 建立软连接:$ln -s zookeeper-3.4.6 zookeeper
- 更改权限:$chown -R hadoop:hadoop zookeeper
$chown -R hadoop:hadoop zookeeper-3.4.6
- 切换到hadoop用户,进入目录:$cd /opt/zookeeper/conf/
- 复制配置文件并编辑:
$cp zoo_sample.cfg zoo.cfg
$vim zoo.cfg
dataDir=/opt/hadoopdata/zookeeperdata #zookeeper保存数据的目录
dataLogDir=/opt/hadoopdata/zookeeperdata/log #zookeeper日志存放目录
maxClientCnxns=200 #连接zookeeper客户端最大数量
#设置zookeeper节点
server.1=namenode1:2888:3888
server.2=namenode2:2888:3888
server.3=datanode:2888:3888
- 创建数据存放目录,并修改权限chown...
- 在/opt /hadoopdata/zookeeperdata 下创建文件myid 写入 数字1
- 配置IP与主机名的对应关系,root $vim /etc/hosts(每个节点都得配置)
192.168.0.202 namenode1
192.168.0.203 namenode2
192.168.0.204 datanode
- 将文件夹 hadoopdata 和 zookeeper-3.4.6 拷贝到另外的两个主机:
$scp -r hadoopdata zookeeper-3.4.6 datanode:/opt/
$scp -r 文件夹1 文件夹2 主机2名称或IP:目录
- 在另外的两个主机同样建立软连接,更改权限。
- 在主机namenode2中修改myid文件内容为 数字2,datanode 为3
到此,zookeeper集群安装完成。
- 启动集群:
$cd /opt/zookeeper/bin/
$./zkServer.sh start
$ ./zkServer.sh status # 查看zookeeper状态
二、安装hadoop
- 解压安装包:$ tar zxvf hadoop-2.4.0.tar.gz
- 建立软连接:$ln -s hadoop-2.4.0 hadoop
- 修改权限:$chown -R hadoop:hadoop hadoop
$chown -R hadoop:hadoop hadoop-2.4.0 - 切换到 hadoop 用户:$su - hadoop
- 配置 hadoop 环境脚本:$ cd /opt/hadoop/etc/hadoop/
$ vim hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_79
export HADOOP_HEAPSIZE=2048 #设置内存大小
export HADOOP_NAMENODE_OPTS="-Xmx1024m -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"
export HADOOP_PID_DIR=/opt/hadoop/pids
export HADOOP_LOG_DIR=/opt/hadoopdata/hadooplogs
- 配置 core-site.xml文件
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://educluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>namenode1:2181,namenode2:2181,datanode:2181</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<!-- 128K -->
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/mydisk/disk01/hadoopdata/tmp,file:/opt/mydisk/disk02/hadoopdata/tmp</value>
</property>
</configuration>
- hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>
educluster</value>
</property>
<property>
<name>dfs.ha.namenodes.
educluster</name>
<value>
nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.educluster.
nn1</name>
<value>namenode1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.educluster.nn2</name>
<value>namenode2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.educluster.nn1</name>
<value>namenode1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.educluster.nn2</name>
<value>namenode2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://namenode1:8485;namenode2:8485;datanode:8485/educluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.eduluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/mydisk/journaldata</value>
</property>
<!-- 启动自动故障转移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:/opt/hadoopdata/sname</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoopdata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/mydisk/disk01,file:/opt/mydisk/disk02</value>
</property>
<!-- 副本数 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>200</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>150</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/hadoop/etc/hadoop/excludes</value>
</property>
- 编辑salves,写入 DataNode的 hostname,即:datanode
- 在三个主机中的 /opt 下使用root建立目录 mydisk,并将权限给hadoop用户。
[hadoop@localhost ~]$ su
[root@localhost hadoop]# cd /opt/
[root@localhost opt]# mkdir mydisk
[root@localhost opt]# chown -R hadoop:hadoop mydisk
- 三个主机创建以下目录:
[root@localhost opt]# exit
[hadoop@localhost hadoop]$ cd /opt/mydisk/
[hadoop@localhost mydisk]$ mkdir -p disk01/hadoopdata/tmp
[hadoop@localhost mydisk]$ mkdir -p disk02/hadoopdata/tmp
[hadoop@localhost mydisk]$ mkdir journaldata
#namenode下-----------------------------
[hadoop@localhost opt]$ cd ../hadoopdata
[hadoop@localhost hadoopdata]$ mkdir sname
[hadoop@localhost hadoopdata]$ mkdir name
#---------------------------------------
[hadoop@localhost hadoopdata]$ cd /opt/hadoop/etc/hadoop/
[hadoop@localhost hadoop]$ touch excludes
- 在namenode1 中执行以下命令,将hadoop及其配置发送到namenode2和datanode中。
[hadoop@localhost opt]$ scp -r hadoop-2.4.0 root@namenode2:/opt/
[hadoop@localhost opt]$ scp -r hadoop-2.4.0 root@datanode:/opt/
- 在namenode2 和 datanode 中 建立软连接,并分配权限
[root@localhost opt]# ln -s hadoop-2.4.0 hadoop
[root@localhost opt]# chown -R hadoop:hadoop hadoop-2.4.0
[root@localhost opt]# chown -R hadoop:hadoop hadoop
- 配置环境变量,写入HADOOP_HOME,保存后记得 source ~/.bash_profile 使其生效。
[hadoop@localhost opt]$ vim ~/.bash_profile
export HADOOP_HOME=/opt/hadoop/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
[hadoop@localhost opt]$ source ~/.bash_profile
- 启动,在此之前 zookeeper 已经启动
1)三个主机启动 journalnode
[hadoop@localhost log]$ cd /opt/hadoop/sbin/
[hadoop@localhost sbin]$ ./hadoop-daemon.sh start journalnode
2)在namenode1上格式化 zkfc :
$ cd /opt/hadoop/bin/
$ ./hdfs zkfc -formatZK
格式化后 执行
$/opt/zookeeper/bin/zkCli.sh 再执行 ls / 看到下面的内容即成功。
3)在namenode1 上 格式化、启动 namenode
[hadoop@localhost sbin]$ cd /opt/hadoop/bin/
[hadoop@localhost bin]$ ./hadoop namenode -format
[hadoop@localhost sbin]$ ./hadoop-daemon.sh start namenode
4)在namenode2 上同步,并启动namenode
$ cd /opt/hadoop/bin/
$./hdfs namenode -bootstrapStandby
$cd ../sbin
$./hadoop-daemon.sh start namenode
5)在namenode1 上启动dfs:$./start-dfs.sh