目录java
前言node
1、 搭建环境mysql
1.1集群规划linux
2、 集群的相关配置web
2.1 新建用户hadoopsql
2.2 更改主机名shell
2.3 主机和IP作相关映射数据库
2.4 SSH免密码登陆apache
2.5 时间配置bootstrap
2.6 总体安装目录安排
3、 Hadoop HA环境搭建
3.1 JDK配置
3.2 安装配置Zookeeper集群
3.3 安装配置hadoop HA集群
4、 Hive+MySQL 的安装与配置
4.1 Hive的安装部署
4.2 MySQL数据库安装配置
4.3 修改hive-site.xml
4.4 拷贝mysql驱动包到hive的lib目录下
5、 HBase彻底分布式集群搭建
5.1 解压安装
5.2 修改hbase-site.xml
5.3 修改regionserver
5.4 将Hbase目录分发到其余节点
5.5 启动进程
6、 Flume安装部署
6.1 解压安装
6.2 修改flume-env.sh
6.3 配置文件拷贝
7、 Kafka安装部署
7.1 安装Scala
7.2 解压安装Kafka
7.3 修改配置文件
7.4 启动服务
8、 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、安装,可用于批量数据的收集、转换、清洗、分析、存储、查询。
相关软件:
下载地址: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 |
说明:
一、本次搭建,安排了两个NameNode节点,分别是一、2号机,两台NameNode,一台处于active状态,另外一台处于standby状态。ActiveNameNode对外提供服务,Standby NameNode不对外提供服务,仅同步active namenode状态,以便可以在它失败时进行快速切换。
二、Hadoop 官方提供了两种 HDFSHA的解决方案,一种是NFS,另外一种是QJM。在本次搭建中,使用QJK,主备NameNode经过JournalNode同步数据,只要成功写入多数JournalNode即认为写入成功,因此要配置奇数个JournalNode,咱们配置了3个。
三、本次搭建上,配置了2个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
2、集群的相关配置
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
而后分别将hadoop0一、hadoop0二、hadoop0三、hadoop0四、hadoop0五、hadoop0六、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/目录下
3、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.一、解压hadoop安装包到目录/opt/modules/下 (所机器所有统一这个目录)
3.3.二、指定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.八、将配置好的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.九、 先启动0五、0六、07节点zookeeper
$ bin/zkServer.sh start
3.3.十、 再启动0一、0二、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测试
4、 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
启动hadoop0五、hadoop0六、hadoop07机器HregionServer
$ bin/hbase-daemon.sh start regionserver
六 Flume安装部署
分别在hadoop0二、hadoop0三、hadoop0四、hadoop0五、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安装部署
在hadoop0三、hadoop0四、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