1.1 框架介绍
Hadoop是一个开源的框架,可编写和运行分不是应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为key/value,key/value是基本数据单元。 HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.所谓非结构化数据存储就是说HBase是基于列的而不是基于行的模式,这样方面读写你的大数据内容。 HBase是介于Map Entry(key & value)和DB Row之间的一种数据存储方式。不仅仅是简单的一个key对应一个 value,你很可能需要存储多个属性的数据结构,但没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。 简单来说,在HBase中的表创建的可以看做是一张很大的表,而这个表的属性可以根据需求去动态增加,在HBase中没有表与表之间关联查询。只需要告诉数据存储到Hbase的那个column families 就可以了,不需要指定它的具体类型:char,varchar,int,tinyint,text等等。但是需要注意HBase中不包含事务此类的功能。 Apache HBase 和Google Bigtable 有非常相似的地方,一个数据行拥有一个可选择的键和任意数量的列。表是疏松的存储的,因此用户可以给行定义各种不同的列,对于这样的功能在大项目中非常实用,可以简化设计和升级的成本。 Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法
2.1 前期准备
在搭建集群开始前,要先做好以下操作
1.更改每个节点的hosts文件并配置免密登录,便于集群节点互相通信
2.下载好相应的jar包
3.配置每个节点的环境变量
4.更改相关文件的权限
2.1.1 配置hosts
#在每个节点/etc/hosts中加入本机ip和其他节点ip vim /etc/hosts#添加以下内容: 127.0.0.1 localhost 192.168.2.11 master 192.168.2.12 slave1 192.168.2.13 slave2
2.1.2 配置免密登录
#在master节点 cd .ssh/ ssh-keygen -t rsa -P ‘’ #一路回车#在.ssh/文件夹中运行shell命令 cat id_rsa.pub >> authorized_keys ssh-copy-id –i id_rsa.pub vagrant@slave1 ssh-copy-id –i id_rsa.pub vagrant@slave2
2.1.3 下载资源
1.下载JDK http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html 2.下载Hadoop https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.6.5/ 3.下载 HBase https://mirrors.tuna.tsinghua.edu.cn/ apache/hbase/1.3.1/ 4.下载Zookeeper https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.11/ 5.下载Spark https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.2.1/2.1.4 解压文件
解压命令:tar –zxvf ****.gz –C /opt/文件夹 将jdk1.8.0_144文件夹更名为jdk 将hadoop-2.6.5 文件夹更名为hadoop 将hbase-1.3.1 文件夹更名为hbase 将zookeeper-3.4.11 文件夹更名为 zookeeper 将spark-2.2.1-bin-hadoop2.7文件夹更名为spark2.1.5 配置环境变量
在每个节点配置环境变量vim /etc/profile export JAVA_HOME=/opt/jdk export HADOOP_HOME=/opt/hadoop export ZOOKEEPER_HOME=/opt/zookeeper export HBASE_HOME=/opt/hbase export SPARK_HOME=/opt/spark export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$HBASE_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
#使环境变量生效 source /etc/profile
2.1.6 更改目录权限
#更改所属用户和组 sudo chown -R vagrant:vagrant /opt/
2.2 配置ZooKeeper
2.2.1 创建数据存放目录和日志存放目录
#在每个节点创建数据存放目录和日志存放目录 sudo mkdir -p /usr/local/zkData mkdir -p /opt/zookeeper/logs#更改文件夹权限 sudo chown -R vagrant:vagrant /usr/local/zkData #在master节点运行shell命令 echo 1 >> /usr/local/zkData/myid #在slave1 节点运行shell命令 echo 2 >> /usr/local/zkData/myid #在slave2 节点运行shell命令 echo 3 >> /usr/local/zkData/myid
2.2.2 配置zoo.cfg
vim /opt/zookeeper/conf/zoo.cfg ……# the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. # 将此处改为原先创建好的目录 dataDir=/usr/local/zkData # the port at which the clients will connect clientPort=2181 server.1=0.0.0.0:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888 #注意此处(3个虚拟机要分别配置) # 在slave1节点,将此处配置为 server.1=master:2888:3888 server.2=0.0.0.0:2888:3888 server.3=slave2:2888:3888 # 在slave2节点,将此处配置为 server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=0.0.0.0:2888:3888 # the maximum number of client connections. ……
2.2.3 配置zkEnv.sh
vim /opt/zookeeper/bin/zkEnv.sh#找到 if [ "x${ZOO_LOG_DIR}" = "x" ] then ZOO_LOG_DIR="/var/log " fi #将ZOO_LOG_DIR的值改为/opt/zookeeper/logs
2.2.4 将配置文件发送到其他节点
scp –r /opt/zookeeper/ vagrant@slave1:/opt scp –r /opt/zookeeper/ vagrant@slave2:/opt
2.2.5 启动Zookeeper集群
#在每个节点运行shell命令 zkServer.sh start#节点会随机选举leader #用zkServer.sh status查看
2.3 配置Hadoop
2.3.1 创建Hadoop相关文件夹并添加相应的jar包
#在每个节点执行以下操作:#该文件夹存放Hadoop的元数据信息和临时文件 sudo mkdir -p /us