根据项目需求我们搭建了一套Hadoop + Spark + Hbase + Hive的架构方案。目前服务器总共有六台,每台服务器有五块硬盘,大小分别是300G、300G、4T、4T、4T,各个服务器主机名分别为Cloud、Cloud2、Cloud3、Cloud4、Cloud5、Cloud6。具体使用情况分别如下表:
| Cloud | Cloud2 | Cloud3 | Cloud4 | Cloud5 | Cloud6 | |
|---|---|---|---|---|---|---|
300G |
系统 | 系统 | 系统 | 系统 | 系统 | 系统 |
300G |
软件 | 软件 | 软件 | 软件 | 软件 | 软件 |
4T |
存储数据 | 存储数据 | 存储数据 | 存储数据 | 存储数据 | 存储数据 |
4T |
存储数据 | 存储数据 | 存储数据 | 存储数据 | 存储数据 | 存储数据 |
4T |
备份 | 备份 | 备份 | 备份 | 备份 | 备份 |
每台服务器都是centos7的系统,配置完全相同。项目架构所需要安装的软件和各个服务器上所运行的服务具体情况如下表,由于学校不能申请过多的临时IP地址,所以这里先使用内网地址配置,后期会更改为正式IP。
| Cloud | Cloud2 | Cloud3 | Cloud4 | Cloud5 | Cloud6 | |
|---|---|---|---|---|---|---|
IP |
192.168.1.100 |
192.168.1.101 |
192.168.1.102 |
192.168.1.103 |
192.168.1.104 |
192.168.1.105 |
| 安装的软件 | jdk hadoop hbase spark hive | jdk hadoop spark hbase | jdk hadoop spark hbase | jdk hadoop zookeeper | jdk hadoop zookeeper | jdk hadoop zookeeper |
hadoop的服务 |
Namenode DFSZKFailoverController | Namenode DFSZKFailoverController | ResourceManager | DataNode NodeManager JournalNode | DataNode NodeManager JournalNode | DataNode NodeManager JournalNode |
hbase的服务 |
HMaster | HRegionServer | HRegionServer | |||
spark的服务 |
Master | Worker | Worker | |||
zookeeper的服务 |
QuorumPeerMain | QuorumPeerMain | QuorumPeerMain | |||
Tomcat的服务 |
项目后台 |
该项目中配置了HA机制,以保证项目的连续性解决方案。首先先说明下什么是HA。
HA意为High Available,高可用性集群,是保证项目连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。
Hadoop的HA机制需要zookeeper来配合使用。架构图如下

说明:
在hadoop2.x中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.x官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode,这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态。
整个架构搭建的具体过程
前期准备工作
前期准备工作需要在每台服务器都要去执行。
修改服务器主机名
为了不重启系统而是修改主机名生效,并且保证系统重启之后,不会丢失所做的修改,我们使用以下的方式来修改主机名。vi /etc/sysconfig/network //将 HOSTNAME 修改为 Cloud .... NETWORKING=yes NETWORKING_IPV6=yes HOSTNAME=Cloud然后在执行执行以下命令
// sysctl 是 centos7 以后才有的,请不要在 centos7 版本以下使用 sysctl kernel.hostname=Cloud执行上述命令之后,在当前终端会话并不会生效,需要重新打开新的会话才会生效。系统重启也不会失效。将上述的两条命令分别在其它的服务器上都执行一遍。
注意:需要将主机名更换vi /etc/sysconfig/network HOSTNAME=Cloud2 //分别也在另外四台服务器上设置 //分别为Cloud3、Cloud4、Cloud5、Cloud6新会话有效
sysctl kernel.hostname=Cloud2 //分别也在另外四台服务器上设置 //分别为Cloud3、Cloud4、Cloud5、Cloud6
修改
IP
具体的网卡名称依服务器上为准,一般是以ifcfg-开头,ifcfg-lo是LOOPBACK网络不用做任何设置。ip地址和网关依查到的为准,若是虚拟机安装的话,自行查看自己本地的地址和网关。vi /etc/sysconfig/network-scripts/ifcfg-* // 加入以下内容或者更新对应的内容 BOOTPROTO=static #dhcp改为static(修改) ONBOOT=yes #开机启用本配置,一般在最后一行(修改) IPADDR=192.168.1.100 #静态IP(增加) GATEWAY=192.168.1.1 #默认网关,虚拟机安装的话,通常是2,也就是VMnet8的网关设置(增加) NETMASK=255.255.255.0 #子网掩码(增加) DNS1=192.168.1.2 #DNS 配置,虚拟机安装的话,DNS就网关就行,多个DNS网址的话再增加(增加)使用同样的方法,分别在
Cloud2、Cloud3、Cloud4、Cloud5、Cloud6执行相同的操作。执行完毕后,可以需要重启网络才能生效。使用以下命令重启网络。service network restart重启之后,通过下面的命令查看是否配置成功,并进行验证各个服务器之间是否相同,如果要访问外网也同样需要进行验证,在没有设置
DNS之前,是不能访问外网的,所以这个时候只需要验证各个服务器之间是否相同即可。ip addr # 查看ip地址 # 在 Cloud 上验证其它是否能与其它机器互通 ping 192.168.1.102 #在分别与102、103、104、105、106进行验证修改
DNS
修改各个服务器的DNS使其能够访问外网,具体修改如下vi /etc/resolv.conf nameserver 8.8.8.8 nameserver x.x.x.x # 分配的dns直接加上就可以了修改
hostshosts文件是主机名和IP的映射关系,如果设置了hosts,可以使用主机名,而不需要在使用对应的冗长的IP地址了。具体修改如下,需要在每台服务器上都做如下修改。vi /etc/hosts 192.168.1.100 Cloud 192.168.1.102 Cloud2 192.168.1.103 Cloud3 192.168.1.104 Cloud4 192.168.1.105 Cloud5 192.168.1.106 Cloud6关闭防火墙
在关闭之前,需要先查看一下当前的状态,使用一下命令查看,该命令同样是在centos7下,centos7以下的版本根据对应的版本查看是如何关闭的。systemctl status firewalld使用下面命令禁用
systemctl disable firewalld systemctl stop firewalld关闭SELinux
# 临时关闭,不用重启机器 setenforce 0 # 永久关闭,以防止下次重启生效 vi /etc/sysconfig/selinux # 下面为 selinux 文件中需要修改的元素 SELINUX=disabled设置
NTP时间同步
设置时间同步之前,需要安装ntp,执行下面的命令安装,若没有yum命令,可以使用apt-get命令,在每台机器上都执行以下命令。yum -y install ntp or apt-get install ntp ntpdate 0.asia.pool.ntp.org # 手动同步配置
ssh免登录
先检查一下系统是否已经安装了ssh,若没有安装执行对应的命令进行安装,使用下面的命令可以检查是否已经安装。ssh # 回车,若提示找不到该命令,使用下一行的命令进行安装,每台服务器都执行相同的步骤 yum install openssh-server # 或着使用apt-get安装也可以为了集群安全,我们需要先创建一个用户,在该用户下配置免密钥登录,而不是在
root用户下配置免密钥登录,这点请注意,不然的话在hadoop用户去启动集群的时候,同样会提示让你输入密码。下面先创建对应的组和用户,注意:在每台服务上都需要创建。具体如下useradd -g hadoop hadoop # 创建hadoop用户,并且加入hadoop用户组,会自动创建hadoop组 passwd hadoop # 为hadoop用户创建密码组和用户添加之后,可以切换到
hadoop用户下面,在hadoop用户下执行下面的命令。su hadoop # 然后输入密码进入 cd ~ # 下面的两行命令需要在每台服务器都执行 ssh-keygen -t rsa # 回车会有提示,都按回车就可以 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys # 配置服务器本身公钥和密钥 # 同样下面的命令也需要在每台服务器上执行 # 实现每台服务器之间的无密钥登录,可以通过手动,也可以通过脚本实现 # 因为配置过hosts了,所以下面可以直接使用主机名 # 为了方便我们每台服务器之间都做无密钥登录 # 配置的时候,提示输入密码 ssh-copy-id -i ~/.ssh/id_dsa.pub Cloud2(主机名字) # 同样Cloud3及其它机器都要执行挂载分区和创建应用安装路径
先在hadoop用户根目录下创建3个文件夹,分别如下,所有的六台服务器都执行同样的操作。
mkdir software # 300G
mkdir -p software/app # 存放安装软件包
mkdir -p software/src # 解压之后的软件
mkdir data # 集群数据存放 4T
mkdir data2 # 预留 4T
mkdir backup # 备份数据 4T
文件夹创建之后,将分区挂载到对应的文件夹下,在挂载之前先将分区格式化一下,同样的每台服务器都需要执行下面的命令
mkfs -t ext4 /dev/sdb #具体是sdx,取决于系统,可以通过lsblk查看
mkfs -t ext4 /dev/sdc
mkfs -t ext4 /dev/sde
mkfs -t ext4 /dev/sdf
将对应的分区挂载到刚才创建的四个文夹上,每台服务器都要执行。执行下面的命令
mount /dev/sdb software # sdb分区挂载在software目录下
mount /dev/sdc data # sdc分区挂载在data目录下
mount /dev/sde data2 # sde分区挂载在data2目录下
mount /dev/sdf backup # sdf分区挂载在backup目录下
为了防止启动丢失信息,这里我们在永久写入一下。执行下面的命令
vi /etc/fstab # 在文件后面加入以下内容
/dev/sdb /home/hadoop/software ext4 defaults 0 0
/dev/sdc /home/hadoop/data ext4 defaults 0 0
/dev/sde /home/hadoop/data2 ext4 defaults 0 0
/dev/sdf /home/hadoop/backup ext4 defaults 0 0
说明:这个文件1第列就是具体的分区,第2列是分区挂载的目录,第3列是文件格式,第4列是挂载规则,第5列是备份;0为从不备份,或显示上次至今备份之天数;第7列是启动时fsck检查顺序,0为不检查, “/”永远为1;
环境变量约定
所有的环境变量设置均在hadoop用户下面配置,即在根目录下的.bashrc中设置,不需要在etc/profile中设置,所以hadoop用户不需要任何的root权限。 修改环境变量之后,不要忘记重新加载配置文件,不然环境变量不会生效。执行下面的命令生效source ~/.bashrc
以上就是执行完成以后,我们的准备工作就算完成了,下面可以开始我们的集群的搭建。
HADOO集群搭建
安装
jdkjdk使用jdk-8u151-linux-x64.tar.gz,下载好之后,将这个文件移动到/home/hadoop/software/app下。在windwos上下载的软件,可以通过工具上传到服务器上,上传之后做下面的配置安装。安装配置如下cd /software/app tar -zxvf jdk-8u151-linux-x64.tar.gz mv jdk-8u151-linux-x64 ../src cd ~ vi .bashrc # 在文件最后加入jdk的环境变量 export JAVA_HOME=/home/hadoop/software/src/jdk-8u151-linux-x64 export PATH=$PATH:$JAVA_HOME/bin source ~/.bashrc java -version # 验证是否设置成功将安装好的
jdk同步到其它的五台服务器上。命令如下cd /software/src/jdk-8u151-linux-x64 rm -rf /doc # 为了快速的同步,将不要的帮助文档删掉 cd .. scp -r /jdk-8u151-linux-x64 hadoop@Cloud2:/home/hadoop/software/src scp -r /jdk-8u151-linux-x64 hadoop@Cloud3:/home/hadoop/software/src scp -r /jdk-8u151-linux-x64 hadoop@Cloud4:/home/hadoop/software/src scp -r /jdk-8u151-linux-x64 hadoop@Cloud5:/home/hadoop/software/src scp -r /jdk-8u151-linux-x64 hadoop@Cloud6:/home/hadoop/software/src scp ~/.bashrc hadoop@Cloud2:/home/hadoop/ scp ~/.bashrc hadoop@Cloud3:/home/hadoop/ scp ~/.bashrc hadoop@Cloud4:/home/hadoop/ scp ~/.bashrc hadoop@Cloud5:/home/hadoop/ scp ~/.bashrc hadoop@Cloud6:/home/hadoop/到此
jdk配置完成。安装配置
zookeeper集群
我们使用zookeeper版本如下zookeeper-3.4.8.tar.gz,下载地址如下
点击进入下载页面,下载之后都样将其移动到/software/app这个目录下。具体安装配置如下# 执行下面的操作之前,确保已经将文件上传至服务器上 # 若不是在windows下载的,也可以通过wget命令直接下载到服务器上,但是要确保能访问外网 cd /software/app tar -zxvf zookeeper-3.4.8.tar.gz mv zookeeper-3.4.8 ../src cd ../src cd zookeeper-3.4.8 mkdir data cd conf/ mv zoo_sample.cfg zoo.cfg vi zoo.cfg # 修改并添加如下内容 dataDir=/home/hadoop/software/src/zookeeper-3.4.8/data server.4=Cloud4:2888:3888 # 以下内容是需要添加的 server.5=Cloud5:2888:3888 server.6=Cloud6:2888:3888 ESC键 :wq # 保存并退出 cd ../data echo "4" > myid将配置好的
zookeeper同步Cloud5和Cloud6服务器上。cd ~ scp -r /software/src/zookeeper-3.4.8 hadoop@Cloud5:/home/hadoop/software/src scp -r /software/src/zookeeper-3.4.8 hadoop@Cloud6:/home/hadoop/software/src将
Cloud5和Cloud6上的zookeeper/data目录下myid文件内容进行更改,这是因为zookeeper集群不能重复。# 在Cloud5上 cd /software/src/zookeeper-3.4.8/data echo "5" > myid # > 符号表示写入mydi文件并覆盖原来的内容 # 在Cloud6上 cd /software/src/zookeeper-3.4.8/data echo "6" > myid配置完成之后,分别在三台服务器上启动
zookeeper# 在Cloud4上 cd ~ cd /software/src/zookeeper-3.4.8a/ ./zkServer.sh start # 在Cloud5上 cd ~ cd /software/src/zookeeper-3.4.8/ ./zkServer.sh start # 在Cloud6上 cd ~ cd /software/src/zookeeper-3.4.8/ ./zkServer.sh start #分别在Cloud4,Cloud5,Cloud6上执行,下面命令查看是否启动成功。 ./zkServer.sh status #若其中两个是follower,一个是leader,则说明成功。将
zookeeper添加到环境变量中cd ~ vi .bashrc # 在文件最后加入jdk的环境变量 export ZK_HOME=/home/hadoop/software/src/zookeeper-3.4.8 export PATH=$PATH:$ZK_HOME/bin # 同步其它两台配置文件 scp ~/.bashrc hadoop@Cloud5:/home/hadoop/ scp ~/.bashrc hadoop@Cloud6:/home/hadoop/安装配置
hadoop集群
使用hadoop的这个版本hadoop-2.8.2.tar.gz,下载地址如下
点击进入下载页面,下载之后都样将其移动到/software/app这个目录下。具体安装配置如下#解压 cd /software/app tar -zxvf hadoop-2.8.2.tar.gz mv hadoop-2.8.2 ../src cd ../src cd hadoop-2.8.2/etc/hadoop3.1 修改
hadoop-env.shexport JAVA_HOME=/home/hadoop/software/src/jdk-8u151-linux-x643.2 修改
core-site.xml<configuration> <!-- 指定hdfs的nameservice为ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop临时目录 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/software/src/hadoop-2.8.2/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>Cloud4:2181, Cloud5:2181, Cloud6:2181</value> </property> </configuration>3.3 修改
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> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>Cloud:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>Cloud:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>Cloud2:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value> Cloud2:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://Cloud4:8485; Cloud5:8485; Cloud6:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/hadoop/software/src/hadoop-2.8.2/journal</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> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--> <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.4 修改
mapred-site.xml<configuration> <!-- 指定mr框架为yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>3.5 修改
yarn-site.xml<configuration> <!-- 指定resourcemanager地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>Cloud3</value> </property> <!-- 指定nodemanager启动时加载server的方式为shuffle server --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
3.6 创建对应的文件夹
cd hadoop-2.8.2/
mkdir tmp
mkdir journal
3.7 修改slaves文件slaves是指定子节点的位置,因为要在Cloud上启动HDFS、在Cloud3启动yarn,所以Cloud上的slaves文件指定的是datanode的位置,Cloud3上的slaves文件指定的是nodemanager的位置
vi slaves
Cloud4
Cloud5
Cloud6
3.8 将配置好的hadoop拷贝到其它节点上
cd ~
cd /software/src/
scp -r hadoop-2.8.2/ hadoop@Cloud2:/home/hadoop/software/src
scp -r hadoop-2.8.2/ hadoop@Cloud3:/home/hadoop/software/src
scp -r hadoop-2.8.2/ hadoop@Cloud4:/home/hadoop/software/src
scp -r hadoop-2.8.2/ hadoop@Cloud5:/home/hadoop/software/src
scp -r hadoop-2.8.2/ hadoop@Cloud6:/home/hadoop/software/src
*3.8* 配置环境变量
cd ~
vi .bashrc
#添加如下内容
export HADOOP_HOME=/home/hadoop/software/src/hadoop-2.8.2
export PATH=$PATH:$HADOOP_HOME/bin
#在其它五台节点上也执行同样的操作,因为前面配置zookeeper环境变量了
#所以这里不能在直接拷贝过去,需要手动在每台节点上添加环境变量
验证
hadoop和zookeeper4.1 启动
zookeeper
若之前启动的zookeeper进程还活着,并且正常运行,可以直接进行下面的操作,若服务不正常,可以将其关掉并重新启动。4.2 启动
journalnode
在Cloud上启动所有journalnode注意:是调用的hadoop-daemons.sh这个脚本,注意是复数s的那个脚本。cd /software/src/hadoop-2.8.2 sbin/hadoop-daemons.sh start journalnode #在Cloud4,Cloud5,Cloud6上运行jps命令查看是否启动 #若存在JournalNode进程,即成功4.3 格式化
HDFS
在Cloud上执行下面命令hdfs namenode -format格式化后会在根据
core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/home/hadoop/software/src/hadoop-2.8.2/tmp,然后将/home/hadoop/software/src/hadoop-2.8.2/tmp拷贝到Cloud2的/home/hadoop/software/src/hadoop-2.8.2/下。scp -r hadoop-2.8.2/tmp/ hadoop@Cloud2:/home/hadoop/software/src/hadoop-2.8.2/4.4 格式化
zookeeperhdfs zkfc -formatZK4.5 启动
HDFS(在Cloud上)sbin/start-dfs.sh4.6 启动
YARN
注意::是在Cloud3上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动。sbin/start-yarn.sh
到此hadoop集群配置完毕,可以对其测试。
验证
hdfs HA机制
验证上传文件成功之后,手动杀掉一个namenode,在查看该文件看是否存在。验证
YARN
运行一下hadoop提供的demo中的WordCount程序hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /xxx /xxx
Hbase集群搭建
Hbase使用hbase-1.2.6-bin.tar.gz,下载地址传送门。下载好之后,将这个文件移动到/home/hadoop/software/app下。在windwos上下载的软件,可以通过工具上传到服务器上,上传之后做下面的配置安装。安装配置如下1.2 修改
hbase-env.sh文件cd ~ cd /software/app/ tar -zxvf hbase-1.2.6-bin.tar.gz mv hbase-1.2.6 ../src cd ../src/hbase-1.2.6 #修改配置文件 vi hbase-env.sh export JAVA_HOME=/home/hadoop/software/src/jdk-8u151-linux-x64 # 如果jdk路径不同需要单独配置 export HBASE_CLASSPATH=/home/hadoop/software/src/hadoop-2.8.2/etc/hadoop/ export HBASE_MANAGES_ZK=false # 不使用hbase自带的zk1.3 修改
hbase-site.xml<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://Cloud:9000/hbase</value> </property> <property> <name>hbase.master</name> <value>Cloud</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>zookeeper.session.timeout</name> <value>120000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>Cloud4,Cloud5,Cloud6</value> </property> <property> <name>hbase.tmp.dir</name> <value>/home/hadoop/software/src/hbase-1.2.6/hbasedata</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration>1.4 创建对应的文件夹
cd hbase-1.2.6/ mkdir hbasedata1.5 修改
regionservers文件Cloud2 Cloud31.6 修改环境变量
cd ~ vi .bashrc export HBASE_HOME=/hoem/hadoop/software/src/hbase-1.2.6/ export PATH=$PATH:$HBASE_HOME/bin #将上面的环境变量同样在Cloud2、Cloud3上执行。1.7 将
hbase拷贝到Cloud2,Cloud3节点上cd /software/src scp -r hbase-1.2.6 hadoop@Cloud2:/home/hadoop/software/src scp -r hbase-1.2.6 hadoop@Cloud3:/home/hadoop/software/src1.8 启动
hbase
在启动hbase之前,请确保zookeeper和hadoop都已经启动,并且正常。#在Cloud上执行 cd software/src/hbase-1.2.6 bin/start-hbase.sh #启动完成后,分别在Cloud、Cloud2、Cloud3上执行jps命令 #Cloud上会多出一个HMaster进程 #Cloud2上会多出一个HRegionServer进程 #Cloud3上会多出一个HRegionServer进程
Spark集群搭建
Spark使用spark-2.2.0-bin-hadoop2.7.tgz,下载地址传送门。下载好之后,将这个文件移动到/home/hadoop/software/app下。在windwos上下载的软件,可以通过工具上传到服务器上,上传之后做下面的配置安装。因为
Spark需要使用scala,所以我们先安装scala。下载地址传送门,下载之后,移动到software/app/目录下。cd software/app tar -zxvf scala-2.12.4.tgz tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz mv scala-2.12.4 ../src mv spark-2.2.0-bin-hadoop2.7 ../src2.1 配置环境变量
cd ~ vi .bashrc export SCALA_HOME=/home/hadoop/software/src/scala-2.12.4 export PATH=$PATH:$SCALA_HOME/bin export SPARK_HOME=/home/hadoop/software/src/spark-2.2.0-bin-hadoop2.7 export PATH=$PATH:$SPARK_HOME/bin # 将上面的环境变量在Cloud2和Cloud3上同样添加配置
Spark
3.1 修改spark-env.shcd software/src/spark-2.2.0-bin-hadoop2.7/conf cp spark-env.sh.template spark-env.sh # 在末尾加入 vi spark-env.sh export JAVA_HOME=/home/hadoop/software/src/jdk-8u151-linux-x64 export SCALA_HOME=/home/hadoop/bigdata/src/scala-2.12.4 export SPARK_WORKER_MEMORY=2g export SPARK_MASTER_IP=192.168.1.100 #Master对应的ip export HADOOP_CONF_DIR=/home/hadoop/software/src/hadoop-2.8.2 export SPARK_JAR=/home/hadoop/software/src/spark-2.2.0-bin-hadoop2.7/jars3.2 修改
slaves文件cd software/src/spark-2.2.0-bin-hadoop2.7/conf cp slaves.template slaves # 添加work节点 vi slaves Cloud2 Cloud33.3
spark集群复制cd ~ cd software/src/ scp -r scala-2.12.4/ hadoop@Cloud2:/home/hadoop/software/src/ scp -r scala-2.12.4/ hadoop@Cloud3:/home/hadoop/software/src/ scp -r spark-2.2.0-bin-hadoop2.7/ hadoop@Cloud2:/home/hadoop/software/src/ scp -r spark-2.2.0-bin-hadoop2.7/ hadoop@Cloud2:/home/hadoop/software/src/3.4
spark集群启动cd software/src/spark-2.2.0-bin-hadoop2.7 sbin/start-all.sh #在Cloud、Cloud2、Cloud3上使用jps命令查看是否配置成功 #Cloud上会多出一个Master进程 #Cloud2和Cloud3上会多出一个Worker进程
hive集群搭建
Hive使用apache-hive-2.2.0-bin.tar.gz,下载地址传送门。下载好之后,将这个文件移动到/home/hadoop/software/app下。具体配置如下cd ~ cd software/app tar -zxvf apache-hive-2.2.0-bin.tar.gz mv apache-hive-2.2.0-bin ../src #配置环境变量 cd ~ vi .bashrc export HIVE_HOME=/home/hadoop/software/src/apache-hive-2.2.0-bin export PATH=$PATH:$HIVE_HOME/bin #最后 source .bashrc对
hive进行配置cd ~ cd software/src/apache-hive-2.2.0-bin/conf cp hive-env.sh.template hive-env.sh #加入以下内容 vi hive-env.sh export JAVA_HOME=/home/hadoop/software/src/jdk-8u151-linux-x64 export HADOOP_HOME=/home/hadoop/software/src/hadoop-2.8.2 export HIVE_HOME=/home/hadoop/bigdata/src/apache-hive-2.2.0-bin export HIVE_CONF_DIR=/home/hadoop/bigdata/src/apache-hive-2.2.0-bin/conf修改
hbase-site.xml文件cd software/src/apache-hive-2.2.0-bin/conf touch hive-site.xml vi hive-site.xml <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hive:3306/hive?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive<value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> </configuration>jdbc驱动下载wget http://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.36.tar.gz cp mysql-connector-java-5.1.33-bin.jar apache-hive-2.2.0-bin/lib/