搭建和配置 Hadoop, Zookeeper, Hbase
1 前言
最近负责公司测试环境的迁移,主要包括 Hbase+Mysql 存储集群的迁移,消息队列,缓存组件的迁移, 而我打算说说存储集群的迁移。因为公司的机器的Ip 和Host 不便在博文展示,所以我会用:
|
|
来代替公司的机器和域名。
2 搭建新环境
2.1 Hadoop 搭建流程
2.1.1 Hadoop 集群的架构
在配置 Hadoop 的主从节点(master/slave)之前,先来了解一下 Hadoop 集群的组件作用;
master
节点负责担任管理分布式文件系统以及进行相应的资源调度的角色:- NameNode: 管理分布式文件系统并且感知数据块在集群的存储位置
- ResourceManager: 管理
YARN
任务,并且负责在slave
节点调度和处理
slave
节点负责担任存储真实的数据并且提供运算YARN
任务的能力的角色:- DataNode: 负责物理存储真实的数据
- NodeManager: 管理在该节点
YARN
任务的具体执行。
master
和 slave
的角色不一定像上面划分得泾渭分明,比如 master
节点也可以是 dataNode
,这个就看具体配置了。
2.1.2 配置JDK
Hadoop 集群需要JAVA 环境,而Linux 的发行版本一般都是默认带有JDK 的,只是OpenJDK 而不是 Oracle JDK, 如果需要修改JDK 的版本,可以自行修改,网上已经有很多安装JDK 的教程,我就不一一讲解了。
2.1.3 修改host
因为需要不同的机器之间通信,所以需要先配置好Ip 和域名的映射。修改每台机器的 /etc/hosts
文件,加上以下内容:
|
|
2.1.4 新建 hadoop 用户
虽说我可以用我自己的登录名来配置和运行 hadoop, 但是出于安全的考虑,还是在每个节点创建一个专门用来运行 hadoop 集群的用户比较好。
|
|
2.1.5 SSH 免密码登录
因为在 Hadoop 集群中, node-master
节点会通过SSH连接和其他节点进行通信,所以需要为
Hadoop 集群配置免密码校验的通信。首先以 hadoop
用户身份登录到 node-master
节点,然后生成 SSH的公私钥:
|
|
然后把公钥复制到其他的节点,如果你想要把 node-master
也当作dataNote
的话,就需要把公钥也复制到
master
节点:
|
|
谨记:复制的是”公钥”,不是”私钥”.
2.1.6 安装hadoop 1. 下载hadoop 安装包,以 hadoop
登录node-master
,采用 wget命令下载:
wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.1.tar.gz
- 创建一个hadoop目录,将各个组件都安装在这个目录。
|
|
2.1.7 修改配置文件
所有修改的 hadoop配置文件都位于 ~/hadoop/etc/hadoop/ 目录
|
|
设置 NameNode 位置
vim core-site.xml
: 修改成以下内容:1 2 3 4 5 6 7 8 9 10 11 12 13 14
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node-master:19000</value> </property> <property> <name>fs.trash.interval</name> <value>10080</value> </property> <property> <name>fs.trash.checkpoint.interval</name> <value>10080</value> </property> </configuration>
设置 HDFS 路径
vim hdfs-site.xml
,修改内容为:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop/data/temp</value> </property> <property> <name>dfs.namenode.http-address</name> <value>node-master:50070</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>node1:50090</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.data.dir</name> <value>/home/hadoop/hadoop/data/hdfs</value> </property> </configuration>
将 YARN 设置成任务调度器(Job Scheduler)
1
cp mapred-site.xml.template mapred-site.xml
然后修改配置,将
yarn
设置成MapReduce
操作的默认框架:vim mapred-site.xml
:1 2 3 4 5 6 7 8 9 10 11 12 13 14
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>node-master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node-master:19888</value> </property> </configuration>
配置 YARN
vim yarn-site.xml
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<configuration> <property> <name>yarn.acl.enable</name> <value>0</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>node-master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
配置 master 节点
因为公司的机器内存较大,兼之机器数不多,所以我就把两台机器都都当作
master
:vim masters
修改文件为:1 2
node-master node1
配置 slave 节点
把全部节点都当作数据几点(dataNode):
vim slaves
:1 2 3
node-master node1 node2
修改 Hadoop 环境变量配置
这个配置是否修改就视情况而定了。
vim hadoop-env.sh
:1 2 3 4
#因为ssh的端口不是默认的22,需要重新指定 export HADOOP_SSH_OPTS="-p 9922" #如果报错java_home找不到,可在这里重新指定 #export JAVA_HOME=/usr/java/jdk1.8.0_161/
- 在其它的节点安装并且解压,不要修改配置文件
将配置文件同步到slave主机
1 2
scp -r -P 9922 /home/hadoop/hadoop/hadoop-2.6.0-cdh5.7.1/etc/hadoop/ node1:/home/hadoop/hadoop/hadoop-2.6.0-cdh5.7.1/etc scp -r -P 9922 /home/hadoop/hadoop/hadoop-2.6.0-cdh5.7.1/etc/hadoop/ node2:/home/hadoop/hadoop/hadoop-2.6.0-cdh5.7.1/etc
- 修改环境变量(所有节点都要配置)
编辑 `.bash_profile`:
`vim ~/.bash_profile`
加入:
```shell
export JAVA_HOME=/usr/java/jdk1.8.0_161/
export JRE_HOME=/usr/java/jdk1.8.0_161/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export HADOOP_HOME=/home/hadoop/hadoop/hadoop-2.6.0-cdh5.7.1
export HBASE_HOME=/home/hadoop/hadoop/hbase-1.2.0-cdh5.7.1
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HADOOP_HOME/bin
export PATH
```
然后加载 `~/.bash_profile`:
`source ~/.bash_profile`
- 格式化 HDFS
就像其它的文件系统那样,在使用之前需要格式化,HDFS 这个分布式文件系统也不例外。在 `node-master`,运行:
```nil
hdfs namenode -format
```
那么,到目前为止, Hadoop 就已经安装和配置好了。
2.1.8 运行和监控 HDFS
启动HDFS
在
node-master
的/home/hadoop/hadoop/sbin/
目录运行下面的命令以启动 HDFS:1
./start-dfs.sh
然后就会启动
NameNode
和SecondaryNameNode
, 然后继续启动DataNode
.
验证HDFS
可以在各个节点通过
jps
检查HDFS 的运行状态。比如在node-master
运行jps
:1 2 3 4
12243 NameNode 2677 ResourceManager 19593 Jps 15036 DataNode
node1
:1 2 3
30464 DataNode 13094 Jps 28589 SecondaryNameNode
停止HDFS
在
node-master
的/home/hadoop/hadoop/sbin/
目录运行下面的命令以停止HDFS:1
./stop-dfs.sh
监控HDFS
如果你在启动 HDFS 之后,想要获取关于 HDFS 的详细信息,你可以使用
hdfs dfsadmin -report
命令, 例如在node-master
运行hdfs dfsadmin -resport
, 输出如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
Configured Capacity: 1201169780736 (1.09 TB) Present Capacity: 1129442681745 (1.03 TB) DFS Remaining: 1129442358161 (1.03 TB) DFS Used: 323584 (316 KB) DFS Used%: 0.00% Under replicated blocks: 0 Blocks with corrupt replicas: 0 Missing blocks: 0 Missing blocks (with replication factor 1): 0 ------------------------------------------------- Live datanodes (3): Name: 192.168.2.3:50010 (node2) Hostname: node2 Decommission Status : Normal Configured Capacity: 400389926912 (372.89 GB) DFS Used: 102400 (100 KB) Non DFS Used: 24759164513 (23.06 GB) DFS Remaining: 375630659999 (349.83 GB) DFS Used%: 0.00% DFS Remaining%: 93.82% Configured Cache Capacity: 0 (0 B) Cache Used: 0 (0 B) Cache Remaining: 0 (0 B) Cache Used%: 100.00% Cache Remaining%: 0.00% Xceivers: 11 Last contact: Mon Mar 05 14:05:38 CST 2018 Name: 192.168.2.2:50010 (node1) Hostname: node1 Decommission Status : Normal Configured Capacity: 400389926912 (372.89 GB) DFS Used: 77824 (76 KB) Non DFS Used: 23483977479 (21.87 GB) DFS Remaining: 376905871609 (351.02 GB) DFS Used%: 0.00% DFS Remaining%: 94.13% Configured Cache Capacity: 0 (0 B) Cache Used: 0 (0 B) Cache Remaining: 0 (0 B) Cache Used%: 100.00% Cache Remaining%: 0.00% Xceivers: 7 Last contact: Mon Mar 05 14:05:38 CST 2018 Name: 192.168.2.1:50010 (node-master) Hostname: node-master Decommission Status : Normal Configured Capacity: 400389926912 (372.89 GB) DFS Used: 143360 (140 KB) Non DFS Used: 23483956999 (21.87 GB) DFS Remaining: 376905826553 (351.02 GB) DFS Used%: 0.00% DFS Remaining%: 94.13% Configured Cache Capacity: 0 (0 B) Cache Used: 0 (0 B) Cache Remaining: 0 (0 B) Cache Used%: 100.00% Cache Remaining%: 0.00% Xceivers: 7 Last contact: Mon Mar 05 14:05:39 CST 2018
或者可以使用更加友好的 Web 管理界面,在浏览器输入: http://node-master-ip:50070, 然后你就可以看到如下的监控界面:
使用 HDFS
既然 HDFS 可以跑起来了,现在就需要添加一点数据以测试 HDFS 了。 在HDFS 的根目录下新建一个
test
目录:1
hdfs dfs -mkdir /test
然后在本地创建一个
helloworld
文件,内容如下:1
Bye world!
接着把
helloworld
文件放置到HDFS的/test
目录下:1
hdfs dfs -put helloworld /test
最后查看文件是否存在:
1
hdfs dfs -ls /test
2.2 小结
至此,如果一切顺利的话, 那么Hadoop 集群就运行起来了。因为我是需要用Hbase 作存储集群,暂不需用Yarn
作计算,所以我就没有介绍启动 Yarn
的 流程了。
2.3 ZooKeeper 搭建流程
因为需要用 ZooKeeper 来管理集群,所以也需要安装 ZooKeeper. 而 ZooKeeper 的安装和 配置也是用 hadoop
用户进行操作的。
2.3.1 安装zookeeper (每个节点同样的操作) 1. 下载zookeeper安装包,登录主机,采用wget命令下载:
wget http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.7.1.tar.gz
- 解压安装到hadoop目录,将各个组件都安装在这个目录。
|
|
2.3.2 配置 ZooKeeper
修改zoo.cfg (所有机器一样的配置): vim /home/hadoop/hadoop/zookeeper-3.4.5-cdh5.7.1/conf/zoo.cfg
, 配置文件内容如下:
|
|
创建myid文件 (不同主机不同数字)
1 2
cd {data_dir} # 按照上面的配置,就应该是/home/hadoop/hadoop/zookeeper-3.4.5-cdh5.7.1/data vim myid
myid的数字要与zoo.cfg配置的一一对应。即要对应:
1 2 3
server.1=node-master:2888:3888 server.2=node1:2888:3888 server.3=node2:2888:3888
也就是
node-master
的myid
是1
,node1
的myid
是2
,依次类推。需要注意的 是,数字前后都不能有空格!
启动 ZooKeeper
在
node-master
的/home/hadoop/hadoop/zookeeper-3.4.5-cdh5.7.1
目录,运行以 下命令:1
sh bin/zkServer.sh start
其它相应的命令如下:
- 启动ZK服务:
sh bin/zkServer.sh start
- 查看ZK服务状态:
sh bin/zkServer.sh status
- 停止ZK服务:
sh bin/zkServer.sh stop
- 重启ZK服务:
sh bin/zkServer.sh restart
- 启动ZK服务:
验证 ZooKeeper
可以通过调用
jps
或者bin/zkCli.sh
来验证 Zookeeper 的运行情况:1
./zkCli.sh -server 192.168.2.1:2181
2.4 HBase 搭建流程
2.4.1 安装Hbase
- 下载hbase 安装包,登录主机,采用wget命令下载: wget http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.7.1.tar.gz 2、解压安装到hadoop目录(3台主机同样操作)
|
|
2.4.2 修改hbase的配置文件(所有主机一样的配置)
修改 hbase-1.2.0-cdh5.7.1/conf
目录下的文件: 1. 修改 hbase-site.xml
内容如下:
|
|
- 修改
hbase-env.sh
:
|
|
- 修改 =regionservers=(指定regionservers的主机地址):
|
|
2.4.3 启动 Hbase
在 node-master
的 /home/hadoop/hadoop/hbase-1.2.0-cdh5.7.1/bin
目录下运行:
|
|
2.4.4 监控 Hbase
可以在浏览器查看 HBase 集群的信息:
- HMaster web 管理信息:http://192.168.2.1:60010/master-status
- HregionServer 管理信息:http://192.168.2.1:60030/ http://192.168.2.2:60030/
3 结语
整个 Hbase 集群应该搭建完了,关于Mysql 搭建的文章就太多了,我也不赘言了。至此,所有存储的组件就已经安装完毕并已启用,但是都是没有数据的,接下来我们需要做的是如何将旧的测试环境的数据迁移到新的测试环境。考虑到这篇内容已经很长了,剩下的内容我就另外写一篇博文了。