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的算法
在搭建集群开始前,要先做好以下操作
1.更改每个节点的hosts文件并配置免密登录,便于集群节点互相通信
2.下载好相应的jar包
3.配置每个节点的环境变量
4.更改相关文件的权限
#在每个节点/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
#在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
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
#更改所属用户和组 sudo chown -R vagrant:vagrant /opt/
#在每个节点创建数据存放目录和日志存放目录 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
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. ……
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
scp –r /opt/zookeeper/ vagrant@slave1:/opt scp –r /opt/zookeeper/ vagrant@slave2:/opt
#在每个节点运行shell命令 zkServer.sh start#节点会随机选举leader #用zkServer.sh status查看
#在每个节点执行以下操作:#该文件夹存放Hadoop的元数据信息和临时文件 sudo mkdir -p /usr/local/hadoop #更改所属用户和组 sudo chown -R vagrant:vagrant /usr/local/hadoop #将 SPARKHOME/yarn目录下的spark−2.2.1−yarn−shuffle.jar复制到 S P A R K H O M E / y a r n 目 录 下 的 s p a r k − 2.2.1 − y a r n − s h u f f l e . j a r 复 制 到 HADOOP_HOME/share/hadoop/yarn/lib目录下
#在里面配置Java环境变量# The java implementation to use. export JAVA_HOME=/opt/jdk
dfs.namenode.secondary.http-address slave1:50090 SecondaryNamenode 的web地址和端口 dfs.namenode.name.dir file:/usr/local/hadoop/dfs/name Namenode元数据目录 dfs.datanode.data.dir file:/usr/local/hadoop/dfs/data Datanode元数据目录 dfs.replication 2 备份数目 dfs.webhdfs.enabled true 开启webUI dfs.permissions false 权限检查
fs.defaultFS hdfs://master:9000 默认文件系统 io.file.buffer.size 131072 读写文件时使用的缓存大小 hadoop.tmp.dir file:/usr/local/hadoop/tmp Hadoop的临时目录 ha.zookeeper.quorum master,slave1,slave2 配置Zookeeper节点
mapreduce.framework.name yarn 使用yarn进行调度 mapreduce.jobhistory.address master:10020 MapReduce Jobhistory Server地址 mapreduce.jobhistory.webapp.address master:19888 MapReduce Jobhistory webUI地址
#若没有就创建,该文件作用为指定secondary namenode slave1
slave1 slave2
yarn.nodemanager.resource.memory-mb 1024 内存大小 yarn.nodemanager.resource.cpu-vcores 1 CPU个数 yarn.nodemanager.aux-services mapreduce_shuffle,spark_shuffle NodeManager上运行时的附属服务,配置mapreduce_shuffle才可以运行MapReduce程序,由于搭建Spark on Yarn模式需要配置spark_shuffle yarn.nodemanager.aux-services.spark_shuffle.class org.apache.spark.network.yarn.YarnShuffleService Yarn集群启动spark_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler YARN集群有多个节点时用于指定Shuffle Server yarn.resourcemanager.address master:8032 ResourceManager地址和端口 yarn.resourcemanager.scheduler.address master:8030 调度器的地址和端口 yarn.resourcemanager.resource-tracker.address master:8031 NodeManager通过该地址向ResourceManager汇报心跳等 yarn.resourcemanager.admin.address master:8033 管理员通过该地址向ResourceManager发送命令 yarn.resourcemanager.webapp.address master:8088 ResourceManager的webUI地址 yarn.resourcemanager.hostname master ResourceManager的Hostname
scp –r /opt/jdk/ vagrant@slave1:/opt scp –r /opt/jdk/ vagrant@slave2:/opt scp –r /opt/hadoop/ vagrant@slave1:/opt scp –r /opt/hadoop/ vagrant@slave2:/opt
#在master节点运行shell命令 hadoop namenode –format #return 0,则格式化正常
start-all.sh
#更改Java环境变量 export JAVA_HOME=/opt/jdk
hbase.rootdir hdfs://master:9000/hbase 集群中所有RegionServer共享目录 hbase.cluster.distributed true 集群的模式 hbase.zookeeper.quorum master,slave1,slave2 zookeeper集群的URL配置 hbase.master master 指定master zookeeper.session.timeout.ms 180000 客户端与zookeeper的通讯超时时间 hbase.regionserver.handler.count 100 RegionServer处理IO请求的线程数 hbase.hregion.max.filesize 2147483648 RegionServer发生Split的阔值 hbase.client.scanner.timeout.period 120000 租约时间管理
slave1 slave2
scp –r /opt/hbase/ vagrant@slave1:/opt scp –r /opt/hbase/ vagrant@slave2:/opt
#在master节点运行以下命令 start-hbase.sh
#该目录用于存放worker信息和日志 sudo mkdir –p /usr/local/spark #更改权限 sudo chown vagrant:vagrant /usr/local/spark
#在文件中加入以下配置信息 export JAVA_HOME=/opt/jdk export SCALA_HOME=/opt/scala export HADOOP_HOME=/opt/hadoop export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop export SPARK_MASTER_IP=master export SPARK_MASTER_HOST=master export SPARK_LOCAL_IP=master export SPARK_WORKER_MEMORY=1g export SPARK_WORKER_CORES=1 export SPARK_WORKER_DIR=/usr/local/spark/worker export SPARK_LOG_DIR=/usr/local/spark/logs export SPARK_HOME=/opt/spark #在slave节点上,将SPARK_LOCAL_IP改为对应的IP地址或者Hostname
#在文件中加入以下配置信息 spark.master spark://master:7077 spark.eventLog.enabled true spark.eventLog.dir hdfs://namenode:8021/directory spark.serializer org.apache.spark.serializer.KryoSerializer spark.driver.memory 5g spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
#在文件中加入配置信息 slave1 slave2
#在Hadoop集群启动的情况下运行以下命令 /opt/spark/sbin/start-all.sh