目录
前言
一、 搭建环境
1.1集群规划
二、 集群的相关配置
2.1 新建用户hadoop
2.2 更改主机名
2.3 主机和IP做相关映射
2.4 SSH免密码登录
2.5 时间配置
2.6 整体安装目录安排
三、 Hadoop HA环境搭建
3.1 JDK配置
3.2 安装配置Zookeeper集群
3.3 安装配置hadoop HA集群
四、 Hive+MySQL 的安装与配置
4.1 Hive的安装部署
4.2 MySQL数据库安装配置
4.3 修改hive-site.xml
4.4 拷贝mysql驱动包到hive的lib目录下
五、 HBase完全分布式集群搭建
5.1 解压安装
5.2 修改hbase-site.xml
5.3 修改regionserver
5.4 将Hbase目录分发到其他节点
5.5 启动进程
六、 Flume安装部署
6.1 解压安装
6.2 修改flume-env.sh
6.3 配置文件拷贝
七、 Kafka安装部署
7.1 安装Scala
7.2 解压安装Kafka
7.3 修改配置文件
7.4 启动服务
八、 Sqoop安装部署
8.1 解压Sqoop
8.2 修改sqoop-env.sh
8.3 导入MySQL驱动包
8.4 测试连接数据库
前言
搭建基于CDH Hadoop高可用性的集群,主要框架有:HDFS HA、YARN HA、Zookeeper、HBase HA、Mysql、Hive、Sqoop、Flume-ng、kafka、安装,可用于批量数据的收集、转换、清洗、分析、存储、查询。
相关软件:
CentOS6.7 64位
jdk-7u80-linux-x64.tar.gz
hadoop-2.5.0-cdh5.3.6.tar.gz
zookeeper-3.4.5-cdh5.3.5.tar.gz
hbase-0.98.6-cdh5.3.5.tar.gz
flume-ng-1.5.0-cdh5.3.6-src.tar.gz
hive-0.13.1-cdh5.3.6.tar.gz
sqoop-1.4.5-cdh5.3.6.tar.gz
kafka_2.12-1.1.0.tgz
下载地址:http://archive-primary.cloudera.com/cdh5/cdh/5/
一 搭建环境
1.1集群规划
主机名 |
IP |
安装软件 |
运行的节点 |
hadoop01 |
192.168.60.121 |
JDK、Hadoop |
NameNode、 DFSZKFailoverController、 JournalNode、 |
hadoop02 |
192.168.60.122 |
JDK、Hadoop、Flume |
NameNode、 DFSZKFailoverController、 JournalNode、 |
hadoop03 |
192.168.60.123 |
JDK、Hadoop、Kafka、Flume |
ResourceManager、 JournalNode、 Kafka |
hadoop04 |
192.168.60.124 |
JDK、Hadoop、Kafka、Flume |
ResourceManager、 DataNode Kafka |
hadoop05 |
192.168.60.125 |
JDK、Hadoop、zookeeper、HBase、Kafka、Flume |
DataNode、 NodeManager、 QuorumPeerMain、 HMaster、HRegionServer、 Kafka |
hadoop06 |
192.168.60.126 |
JDK、Hadoop、zookeeper、HBase、Flume |
DataNode、 NodeManager、 QuorumPeerMain、 HMaster、HRegionServer |
hadoop07 |
192.168.60.127 |
JDK、Hadoop、zookeeper、HBase、Hive、MySQL、Sqoop |
DataNode、 NodeManager 、 QuorumPeerMain、 HRegionServer、 Runjar |
说明:
1、本次搭建,安排了两个NameNode节点,分别是1、2号机,两台NameNode,一台处于active状态,另一台处于standby状态。ActiveNameNode对外提供服务,Standby NameNode不对外提供服务,仅同步active namenode状态,以便能够在它失败时进行快速切换。
2、Hadoop 官方提供了两种 HDFSHA的解决方案,一种是NFS,另一种是QJM。在本次搭建中,使用QJK,主备NameNode通过JournalNode同步数据,只要成功写入多数JournalNode即认为写入成功,所以要配置奇数个JournalNode,我们配置了3个。
3、本次搭建上,配置了2个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
二、集群的相关配置
2.1 新建用户hadoop
在7台机器都新建hadoop的用户名,都以这个普通用户的权限进行操作,设置同样的口令
adduser hadoop
给用户hadoop设置sudo权限
vi /etc/sudoers
hadoop ALL=(ALL) ALL
2.2 更改主机名
集群所有的机器都要做这个操作。
输入 vim /etc/sysconfig/network
修改localhost.localdomain主机名称,每台名称都不一样
例如: HOSTNAME=hadoop01/2/3/4/5/6/7/
注: 名称更改了之后输入reboot重启才会生效。
2.3 主机和IP做相关映射
在01机器上操作,设置好无密码登录后,scp到其它6台机器上
vim /etc/hosts
添加所有主机映射
192.168.60.121 hadoop01
192.168.60.122 hadoop02
192.168.60.123 hadoop03
192.168.60.124 hadoop04
192.168.60.125 hadoop05
192.168.60.126 hadoop06
192.168.60.127 hadoop07
2.4 SSH免密码登录
首先在每台机器上都执行一遍生成秘钥文件
输入:ssh-keygen -t rsa
然后分别将hadoop01、hadoop02、hadoop03、hadoop04、hadoop05、hadoop06、hadoop07的公匙发送到hadoop01上,在hadoop01上的实现免密码登陆。
hadoop01上操作:ssh-coyp-id hadoop01
hadoop02上操作:ssh-coyp-id hadoop01
hadoop03上操作:ssh-coyp-id hadoop01
hadoop04上操作:ssh-coyp-id hadoop01
hadoop05上操作:ssh-coyp-id hadoop01
hadoop06上操作:ssh-coyp-id hadoop01
hadoop07上操作:ssh-coyp-id hadoop01
然后将hadoop01目录./.ssh下的authorized_keys文件scp到其他机器的 /root/.ssh 目录下
scp authorized_keys Hadoop02:/home/hadoop/.ssh
scp authorized_keys Hadoop03:/home/hadoop/.ssh
scp authorized_keys Hadoop04:/home/hadoop/.ssh
scp authorized_keys Hadoop05:/home/hadoop/.ssh
scp authorized_keys Hadoop06:/home/hadoop/.ssh
scp authorized_keys Hadoop07:/home/hadoop/.ssh
2.5 时间配置
本次搭建以hadoop01主机的时钟为准,hadoop01主机开通ntpd服务
查看当前系统ntpd服务是否开启:$ sudo service ntpd status
开启服务:$ sudo service ntpd start
设置开机启动:$ sudo chkconfig ntpd on
修改系统配置文件
$ sudo vi /etc/ntp.conf
第一处修改:修改成自己的网段
Restrict 192.168.60.121 mask 255.255.255.0 nomodify notrap
第二次修改:模拟内网环境,不需要连外网,注释掉下面参数
第三次修改:将本地服务注释去掉
修改完保存退出,重启ntpd服务生效
$ sudo service ntpd restart
每台机器都编写一个crontab定时任务,每十分钟执行一次
0-59/10 * * * * /usr/sbin/ntpdate hadoop01
2.6 整体安装目录安排
所有配置框架都安装在~/opt/modules/目录下
三、Hadoop HA环境搭建
3.1 JDK配置
在01机解压JDK安装包
$ tar –zxvf home/hadoop/opt/software/jdk-7u80-linux-x64.tar.gz –C home/hadoop/opt/modules
配置JAVA_HOME
$ sudo vi /etc/profile
export JAVA_HOME=/home/hadoop/opt/modules/jdk1.7.0_80
$ sudo source /etc/profile
3.2 安装配置Zookeeper集群
先再hadoop05机器上操作
解压Zookeeper到目录/opt/modules/下
修改zoo.cfg文件
指定本地数据存储目录:dataDir=/home/hadoop/opt/modules/zookeeper-3.4.5/data/zkData
指定所有ZK节点服务端的实例
servier.5=hadoop05:2888:3888
servier.6=hadoop06:2888:3888
servier.7=hadoop07:2888:3888
在/opt/modules/zookeeper-3.4.5/data/zkData下vi myid文件,写1,保存退出
将配置文件分发到其他节点
$ scp –r zookeeper-3.4.5/ hadoop06:/opt/modules/
$ scp –r zookeeper-3.4.5/ hadoop07:/opt/modules/
在06和07机器上修改分发好的myid文件,改成对应的编号:06对应6,07对应7
启动: $ bin/zkServer.sh start
查看状态: $ bin/zkServier.sh status
3.3 安装配置hadoop HA集群(在1号机上操作)
3.3.1、解压hadoop安装包到目录/opt/modules/下 (所机器全部统一这个目录)
3.3.2、指定JAVA_HOME目录
进入hadoop的配置目录/home/hadoop/hadoop-2.5.0/etc/hadoop
编辑hadoop-env.sh,指定JAVA_HOME目录
export JAVA_HOME=/home/hadoop/opt/modules/jdk1.7.0_80
3.3.3 编辑core-site.xml
<!-- Put site-specific propertyoverrides in this file. -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/opt/modules/hadoop-2.5.0/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>
</property>
</configuration>
3.3.4 编辑hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!--ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!—指定两个namenode的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoop01:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoop02:9000</value>
</property>
<!--指定两个namenode的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;node02:8485;node03:8485/ns1</value>
</property>
<!--指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/opt/modules/hadoop-2.5.0/journaldata</value>
</property>
<!--开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置隔离机制方法,本次使用SSH-->
<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>/home/hadoop/.ssh/id_rsa</value>
</property>
<!--配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
3.3.5 编辑mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>10</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>2</value>
</property>
</configuration>
3.3.6 编辑 yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop04</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>
</property>
</configuration>
3.3.7 修改slaves
[hadoop01]$ cat slaves
node05
node06
node07
[hadoop03]$ cat slaves
node05
node06
node07
3.3.8、将配置好的hadoop拷贝到其它节点
scp -r opt/modules/hadoop hadoop02:opt/modules/hadoop
scp -r opt/modules/hadoop hadoop03:opt/modules/hadoop
其它几个节点类似
同时也要把 /etc/profile /etc/hosts 两个文件复制到所有节点机上
3.3.9、 先启动05、06、07节点zookeeper
$ bin/zkServer.sh start
3.3.10、 再启动01、02、03节点的JournalNode
$ sbin/hadoop-daemon.sh start journalnode
3.3.11 hadoop格式化
在01号上执行 bin/hdfs namenode –format
3.3.12 同步元数据
启动01机器的namenode
切换到02机器上执行元数据同步
$ bin/hdfs namenode –bootstrapStandby
3.3.13 初始化ZKFC
先停掉两台namenode服务进程,执行
$ bin/hdfs zkfc –formatZK
进入ZK客户端,检查是否生成了hadoop-ha的节点目录
3.3.13 启动ZKFC监听器
在两台namenode所在的机器上分别启动ZKFC监听器
$ sbin/hadoop-daemon.sh start zkfc
3.3.14 测试
UI页面查看
上传产品到HDFS测试
运行WordCount测试
四、 Hive + MySQL 的安装与配置
4.1 Hive的安装部署 (在07机器上)
4.1.1 解压安装Hive到/opt/modules/目录下
tart –zxvf hive-0.13.1-cdh5.3.6.tar.gz –C ~/opt/modules
4.1.2 配置Hive数据存储目录
bin/hdfs dfs –mkdir /tmp
bin/hdfs dfs –mkdir /uer/hive/warehouse
bin/hdfs dfs –chmod g+w /tmp
bin/hdfs dfs –chmod g+w /user/hive/warehouse
4.1.3 修改hive-env.sh
# Set HADOOP_HOME
HADOOP_HOME=/opt/modules/hadoop-2.5.0
# Hive Configuration Directory
export HIVE_CONF_DIR=/opt/modules/hive-0.13.1-bin/conf
4.1.4 启动Hive
$ bin/hive
4.2 MySQL数据库安装配置
4.2.1 安装mysql (在07机器上)
查询系统中是否存在MySQL
$ sudo rpm –qa|grep mysql
卸载自带MySQL
$ sudo rpem –e –nodeps ……
yum安装MySQL
$ sudo yum –y insall mysql-server
查看MySQL是否开启
$ sudo service mysqld status
启动服务
$ sudo service mysqld start
设置开机启动MySQL
$ sudo chkconfig mysqld on
4.2.2 设置MySQL管理员root的密码
mysqladmin –u root passward `123456`
进入mysql –uroot –p
4.2.3 设置MySQL链接的权限
在mysql数据库user表中插入一条数据
GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY 123456 WITH GRANT OPTION;
删除表中的信息
delect from user where host=`127.0.0.1`
delect from user where host=`hadoop07`
delect from user where host=`localhost`
刷新并退出MySQL
flush privileges;
quit
sudo service mysqld restart
4.3 修改hive-site.xml
<propery>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://beifeng07:3306/metastore?createDateIfNotExist=true</value>
</propery>
<propery>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>con.mysql.jdbc.Driver</value>
</propery>
<propery>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</propery>
<propery>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</propery>
4.4 拷贝mysql驱动包到hive的lib目录下
$ cp –r mysql-connector-java-5.1.27-bin.jar /opt/modules/hive-0.13.1-bin/lib/
五 HBase完全分布式集群搭建
5.1 解压安装 (先在05机器上操作)
$ tar –zxvf hbase-0.98.6-cdh5.3.5.tar.gz –C ~/opt/modules/
5.2 修改hbase-site.xml
<propery>
<name>hbase.tmp.dir</name>
<value>/opt/modules/hbase-0.98.6-hadoop2/data/tmp</value>
</propery>
<propery>
<name>hbase.rootdir</name>
<value>hdfs://hadoop05:8020/hbase</value>
</propery>
<propery>
<name>hbase.cluster.distributed</name>
<value>true</value>
</propery>
<propery>
<name>hbase.zookeeper.quorum</name>
<value>hadoop05,hadoop06,hadoop07</value>
</propery>
5.3 修改regionserver,添加
hadoop05
hadoop06
hadoop07
5.4 将Hbase目录分发到其他节点
$ scp –r hbase-0.98.6-hadoop2/ hadoop06:/opt/modules/
$ scp –r hbase-0.98.6-hadoop2/ hadoop07:/opt/modules/
5.5 启动进程
5.5.1 分别启动hadoop各节点和zookeeper各节点
5.5.2 启动hadoop05和hadoop06机器Hmaseter
$ bin/hbase-daemon.sh start master
启动hadoop05、hadoop06、hadoop07机器HregionServer
$ bin/hbase-daemon.sh start regionserver
六 Flume安装部署
分别在hadoop02、hadoop03、hadoop04、hadoop05、hadoop06机器上操作
6.1 解压安装包到/opt/modules/目录下
$ tar –zxvf flume-ng-1.5.0-cdh5.3.6-src.tar.gz –C ~/opt/modules/
6.2 修改flume-env.sh
export JAVA_HOME=/home/hadoop/opt/modules/jdk1.7.0_80
6.3 配置文件拷贝
将hadoop的core-site.xml和hdfs-site.xml文件拷贝到flume/conf下
可通过5台机器部署扇出或扇入、高可用性操作
七 Kafka安装部署
在hadoop03、hadoop04、hadoop05机器上操作
7.1 安装Scala
7.2 解压安装Kafka
$ tar –zxf kafka_2.11-0.8.2.1.tgz –C ~/opt/modules/
7.3 修改配置文件
hadoop03上配置文件为 server3.properties,自定义配置如下
broker.id=3
port=9093
zookeeper.connect=hadoop03:2181,hadoop04:2181,hadoop05:2181/kafka
hadoop04上配置文件为 server4.properties,自定义配置如下
broker.id=4
port=9094
zookeeper.connect=hadoop03:2181,hadoop04:2181,hadoop05:2181/kafka
hadoop05上配置文件为 server5.properties,自定义配置如下
broker.id=5
port=9095
zookeeper.connect=hadoop03:2181,hadoop04:2181,hadoop05:2181/kafka
7.4 启动服务
先启动各zk服务
$ bin/zkServer.sh start
再启动kafka服务
$ bin/kafka-server-start.sh
八 Sqoop安装部署
8.1 解压Sqoop (在hadoop07主机上)
tar –zxf sqoop-1.4.5-cdh5.3.6.tar.gz –C ~/opt/modules/
8.2 修改sqoop-env.sh
指定各框架安装目录
export HADOOP_COMMON_HOME=
export HADOOP_MAPRED_HOME=
export HIVE_HOME=
export HBASE_HOME=
……
8.3 导入MySQL驱动包
将MySQL驱动包放到sqoop的lib目录下
8.4 测试连接数据库
bin/sqoop \
list-tables \
--connect jdbc:mysql://hadoop07:3306/metastore \
--username root \
--password 123456
原文地址:https://www.cnblogs.com/perfectdata/p/10065028.html