搭建流程
说明
下载安装包
高可用完全分布式搭建
一. 集群规划
二. hadoop安装配置
三. zookeeper安装配置
四. 集群格式化
五. 启动, 操作, 关闭集群
六.访问NameNode的WebUI页面
七.搭建Hadoop的client
说明
搭建之前, 先根据(一)Linux环境搭建一文将集群的初始环境配置OK.
下载安装包
Apache-Hadoop 官网: https://hadoop.apache.org/
Apache-Hadoop各个版本下载地址: https://archive.apache.org/dist/hadoop/common/
点击想要的版本, 选择hadoop-x.x.x.tar.gz文件下载,本文使用hadoop-2.6.5
Zookeeper官网: http://zookeeper.apache.org/
Zookeeper下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
选择想要的版本进入下载, 本文使用zookeeper-3.4.10
高可用完全分布式搭建
一. 集群规划
NN(active)
NN(standby)
DN
ZK
ZKFC
JNN
node01
√
–
–
–
√
√
node02
–
√
√
√
√
√
node03
–
–
√
√
–
√
node04
–
–
√
√
–
–
二. hadoop安装配置
- 在node01节点上将上传的Hadoop压缩包解压
这里我将文件解压到/opt/software/hadoop文件夹下.tar -zxf hadoop-2.6.5.tar.gz -C /opt/software/hadoop
进入配置文件修改目录cd /opt/software/hadoop/hadoop-2.6.5/etc/hadoop/
- 修改hdfs-site.xml配置
vim hdfs-site.xml
编辑文件, 在configuration标签对中插入:
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 配置集群服务名 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
<!-- 配置集群两个namenode节点的本地位置 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:50070</value>
</property>
<!-- 配置集群两个namenode节点的网络位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<!-- 配置集群三个journalnode节点的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/sxt/hadoop/ha/jn</value>
</property>
<!-- 配置JNN生成文件存放地址 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置ZKFC代理 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 配置zookeeper进程对非本节点操作时的连接方式 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置上述ssh连接密钥所在位置 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置开启失败容错监控 -->
- 修改core-site.xml配置
vim core-site.xml
编辑文件, 在configuration标签对中插入
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
其中fs.defaultFS配置的是hdfs文件目录的前缀, 此处的mycluster为hdfs-site.xml中配置的集群服务名.
ha.zookeeper.quorum配置的是集群协调服务进程zookeeper.
修改slaves配置文件
vim slaves 删除localhost(如果有) 编辑slaves, 在文件中写入: node02 node03 node04
slaves中配置的是从节点(DataNode)主机名(hostname), 高可用完全分布式, 我们设计的是三个DN节点.
在编辑文件时, 要注意纵向写的格式, 主机名后也不可以带空格, 否则可能会导致主机解析失败.
- 安装包分发
根据上述步骤配置好之后, 需要将配置好的文件发到其他三个节点上.
cd /opt/software/hadoop 将hadoop下的hadoop-2.6.5包发送
scp -r hadoop-2.6.5 root@node02:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@node03:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@node04:/opt/software/hadoop/
或使用一种更简单的指令
scp -r hadoop-2.6.5 node02:`pwd`
scp -r hadoop-2.6.5 node03:`pwd`
scp -r hadoop-2.6.5 node04:`pwd`
发送时, 如果其他节点上没有/opt/software/hadoop/目录, 那么需要自己建立之后再发送. 发送完毕之后要保证所有节点的hadoop目录所在路径都是一致的.
- 修改hadoop-evn.sh文件
此步可先跳过, 该文件可以不修改. 当启动hdfs出现" JAVA_HOME cannot find or set" 类似的说明java_home没有配置的提示时, 可再手动配置(前提是执行java -version成功在显示器打印java版本).
vim hadoop-evn.sh
编辑文件, 找到export JAVA_HOME=${JAVA_HOME}那一行
将 = 后的内容改为JAVA_HOME的确切路径, 可使用 echo $JAVA_HOME查看
export JAVA_HOME=/usr/local/jdk1.8.0_181
修改完成之后还要使用scp命令将修改的文件发送到各个节点上:
scp hadoop-evn.sh node02:`pwd`
scp hadoop-evn.sh node03:`pwd`
scp hadoop-evn.sh node04:`pwd`
- 将hadoop配置到用户环境变量中
此处配置好后, 可以在任意位置使用hdfs的命令.
vim ~/.bashrc
在文件最后插入
export PATH=$PATH:/opt/software/hadoop/hadoop-2.6.5/bin:/opt/software/hadoop/hadoop-2.6.5/sbin
三. zookeeper安装配置
- 搭建zookeeper集群
zookeeper节点规划在node02, node03 ,node04 节点上
首先, 在 node02 上解压zookeeper的压缩包
tar -zxf zookeeper-3.4.10.tar.gz -C /opt/software/zookeeper
进入解压文件, 修改conf目录下的zoo_sample.cfg
cd /opt/software/zookeeper/zookeeper-3.4.10/conf
mv zoo_sample.cfg zoo.cfg 重命名
修改zoo.cfg文件
vim zoo.cfg
修改dataDir的值
dataDir=/var/qb/zookeeper 设置zookeeper目录, 路径任意, 需自己创建
在文件最后加入zookeeper节点的服务位置
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
发送安装包, 将zookeeper安装包发送到node03, node04节点上
cd /opt/software/zookeeper
scp -r zookeeper-3.4.10 node03:`pwd`
scp -r zookeeper-3.4.10 node04:`pwd`
在各个zookeeper节点设置的dataDir目录下创建myid文件, 修改文件内容
vim /var/qb/zookeeper/myid 在各个节点的myid中写入相应ID号
1 对应node02节点
2 对应node03节点
3 对应node04节点
最后, 启动zookeeper进程
cd /opt/software/zookeeper/zookeeper-3.4.10/bin
./zkServer.sh start
四. 集群格式化
- 格式化NameNode
在node01, node02, node03 上分别执行启动journalnode的命令.
hadoop-daemon.sh start journalnode
随便选一台NameNode(node01 || node02)作为active节点进行格式化.
hdfs namenode -format
hadoop-daemon.sh start namenode
另一台NameNode节点执行
hdfs namenode -bootstrapStandby
格式化ZKFC进程
hdfs zkfc -formatZK
五. 启动, 操作, 关闭集群
- 启动HDFS
关闭所有节点上的进程
stop-dfs.sh
启动HDFS
start-dfs.sh
查看启动进程
jps
操作HDFS文件系统
创建目录 hdfs dfs -mkdir -p /abc/cba 上传文件 hdfs dfs -D dfs.blocksize=1048576 -put text.txt ...
关闭HDFS
stop-dfs.sh 或 killall java
注:下次启动时, 要先启动zookeeper进程, 再启动hdfs
六.访问NameNode的WebUI页面
启动Ha集群之后, 在本地机打开一个浏览器, 在地址栏输入active 状态的namenode节点的ip地址+端口, 例如_192.168.75.133:50070_ , 也可在本地机中修改host文件, 配置域名node01, 就可以使用_node01:50070_ 来访问webUI的页面. 如图:
查看集群的状态:
点击Live Nodes查看各个DataNode节点的详细信息:
此处, 可通过web页面查看HDFS的文件目录结构以及文件的部分元数据信息.输入框中需要输入HDFS文件路径.
如果是一个文件, 点击可以显示该文件存在哪个block, ,blockId是多少, 以及各个备份所在的节点:
七.搭建Hadoop的client
客户端搭建十分简单, 只需将配置好的Hadoop安装包发送到client节点对应目录的位置上即可.
搭建好client之后, 启动集群, 就可以在client上操作HDFS或者提交MapReduce应用程序, 在client上的操作我们称之为集群外操作.
在集群内一台节点上操作称为集群内操作, 不建议使用集群内操作, 因为如果每一次操作都选择同一个节点, 就会导致该节点的磁盘以及网络IO负载超过其他节点, 久而久之这个节点的磁盘以及网卡性能将会下降, 最终导致数据倾斜问题. 数据倾斜是大数据开发中应当尽量避免的问题.