第二周 深圳模具- 搭建 hadoop 大数据集群 ,linux , 虚拟机

2021-04-20 21:14:23


深圳模具-搭建 hadoop 大数据集群



***电脑中要先有如下内容:

image.png

image.png

点击安装虚拟机

image.png


image.png

image.png

输入16位许可证码,按 《输入》

image.png

结束虚拟机安装, 接下来安装 Centos 操作系统。


在屏幕上点击虚拟机图标 :image.png  出现下面的封面


image.png


点击创建新的虚拟机

image.png

按 自定义  , 然后 下一步。

image.png


image.png

image.png

选择  Centos 64 bit

image.png


image.png


image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

按  完成  以后


image.png


image.png

点击后, 出现安装 centos 的界面, 完成后出现图形界面


image.png


选择 Otehr    ,   输入  root       hadoop  进入系统


image.png


至此, 前面的安装完成, 可以按  终端  进入  # 状态



1、准备linux环境

          1.1、修改主机名 # vi /etc/sysconfig/network

                                        HOSTNAME=hsmaster


           1.2、修改ip  

                          第一种方法:通过图形界面方式进行修改,

                          第二种方法通过命令进行修改:

                                    # vi /etc/sysconfig/network-scripts/ifcfg-eth0

                                        BOOPROTO="static"

                                        IPADDR=192.168.1.119

                                        GATEWAY=192.168.1.1


           1.3、修改主机名和ip的映射关系  

                                 # vi /etc/hosts

                                    192.168.1.119 hsmaster

                                    192.168.1.120 hsslave1

                                    192.168.1.121 hsslave2

                                    《如果有 10台电脑, 也是这样配置》


          1.4、关闭防火墙

                               # service iptables status

                                   image.png

                               # service iptables stop

                                  image.png

                               # chkconfig iptables off

                                  image.png


         1.5、重启linux

                               # reboot


2、安装jdk

         2.1、上传jdk文件       to      /bigdata/tools

         2.2、解压jdk  tar -zxvf jdk-7u79-linux-i586.tar.gz

         2.3、配置java环境变量

                               # vi /etc/profile

                                       export JAVA_HOME=/bigdata/tools/jdk1.7.0_79

                                       export PATH=$PATH:$JAVA_HOME/bin


3、配置ssh免登录

         1.1、 ssh-keygen -t rsa 一路回车生成密钥

         1.2、 id_rsa.pub 追加授权Key  cat ~/.ssh/id_rst.pub >> ~/.ssh/authorized_keys

         1.3、 修改权限

                   chmod   666  

         1.4、 将公共密钥复制到其它节点

                   还是需要修改权限 

         1.5、 重启ssh服务


         1.6、 检查配置文件

     

         1.7、 验证ssh免登录是否成功

                   # cat /etc/ssh/

                  image.png

  

4、搭建hadoop集群

         4.1、上传文件

                  窗口下可以拖拽进入虚拟机

         4.2、 解压hadoop文件

                  tar

         4.3、 配置hadoop-env.sh文件

                  修改绝对路径

         4.4、 配置core-site.xml文件


         4.5、 配置hdfs-site.xml文件


         4.6、 配置mapred-site.xml文件

                    

         4.7、 配置yarn-site.xml文件


         4.8、 配置环境变量


         4.9、 将文件复制到其它节点上


        4.10、 进行格式操作

                    # hdfs namenode -format

         4.11、 启动hadoop sbin/  ./start-all.sh


         4.12、 验证集群是否启动成功

                        # jps

                               NameNode

                               DataNode

                               NodeManager

                               ResourceManager

                               SecondaryNameNode

           4.13、 登录界面进行查看:

                       HDFS管理界面:                                       http://192.168.1.119:50070

                       MR管理界面:                                          htpp://192.168.1.119:8088




----------------------------------------------------------------下面是第三周

深圳模具-正式学习使用 hadoop 大数据集群


一、HDFS相关命令:

       1、查看HDFS下目录结构及文件   hdfs dfs -ls -R /

       2、创建文件目录/tmp    hdfs dfs -mkdir /tmp

       3、删除/tmp目录   hdfs dfs -rm -r /tmp

       4、复制当前目录下a.txts到HDFS文件系统   hdfs dfs -put a.txt /inputFile

       5、列出/tmp目录   hdfs dfs -ls /tmp

       6、查看/inputFile/a.txt文件内容   hdfs dfs -cat /inputFile/a.txt

       7、查看HDFS状态   hdfs dfsadmin -report


        用这个命令可以快速定位出哪些节点down掉了,HDFS的容量以及使用了多少,

        以及每个节点的硬盘使用情况。当然NameNode有个http页面也可以查询,

        但是这个命令的输出更适合我们的脚本监控dfs的使用状况。


        下面是关于 YARN 的操作:      

         yarn.nodemanager.aux-service

                spark_shuffle

                mapreduce_shuffle    要引入对应的架包  

                yarn.nodemanager.aux-services.mapreduce_shuffle.class  

                                采用 FIFO的方式, 这个方式并不好 , 好的方式是 公平调度-Fair .

                org.apache.hadoop.mapred.ShuffleHandler


                yarn.nodemanager.aux-services.spark_shuffle.class

                org.apache.spark.network.yarn.YarnShuffleServic

                FairScheduler.xml

                yarn.scheduler.fair.user-as-default-queue false true

                yarn.scheduler.fair.preemption false true

               yarn.resourcemanager.scheduler

               org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

               spark.shuffle.service.port 7337



第四周   

              Hbase 。

              Hbase  -> Google bigtable 开源实现   ---2008年---->  apache hadoop 下面的项目   

                               采用的公司 :    Facebook           Intel       yahoo     baidu     alibaba      tencent   360  等等   nosql 数据库

                               

                           image.png


      image.png


                SQL (Structured Query Language) 数据库,指关系型数据库。

                                                                       主要代表:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)。

          NoSQL(Not Only SQL)泛指非关系型数据库。

                                                                       主要代表:MongoDB,Redis,CouchDB。 supersech      hbase , kylin ,  chiohouse   phesto


               关系型数据库的特点:    面向行的,    Nosql 是面向列的。  

               高并发状态下:      分库分表    读写分离   带来数据一致性问题 ,海量数据实现出来很复杂,后期迁移也很复杂。

               高可用,可靠性,可伸缩性的措施: 主备 、 主从 、 多主。   本身的可扩展性很差。   增加节点或者宕机要做迁移。  

               Hbase 首先是一个大表。


1.关系型数据库理论 - ACID

            ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,

                      所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、

                      隔离性(isolation,又称独立性)、持久性(durability)。

                      A – Atomicity – 原子性

                                             一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

                                             事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有被执行过一样。

                      C – Consistency – 一致性

                                             在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,

                                              这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

                      I – Isolation – 隔离性

                                             数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时

                                             由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、

                                             读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

                      D – Durability – 持久性

                                             事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

       关系型数据库严格遵循ACID理论。

       但当数据库要开始满足横向扩展、高可用、模式自由等需求时,需要对ACID理论进行取舍,不能严格遵循ACID。

       以CAP理论和BASE理论为基础的NoSQL数据库开始出现。

 

2.分布式系统理论

 

2.1 分布式系统介绍

 

分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式是NoSQL数据库的必要条件。

 

分布式系统由独立的服务器通过网络松散耦合组成的。每个服务器都是一台独立的PC机,服务器之间通过内部网络连接,内部网络速度一般比较快。因为分布式集群里的服务器是通过内部网络松散耦合,各节点之间的通讯有一定的网络开销,因此分布式系统在设计上尽可能减少节点间通讯。此外,因为网络传输瓶颈,单个节点的性能高低对分布式系统整体性能影响不大。比如,对分布式应用来说,采用不同编程语言开发带来的单个应用服务的性能差异,跟网络开销比起来都可以忽略不计。

 

因此,分布式系统每个节点一般不采用高性能的服务器,而是使用性能相对一般的普通PC服务器。提升分布式系统的整体性能是通过横向扩展(增加更多的服务器),而不是纵向扩展(提升每个节点的服务器性能)实现。

 

分布式系统最大的特点是可扩展性,它能够适应需求变化而扩展。企业级应用需求经常随时间而不断变化,这也对企业级应用平台提出了很高的要求。企业级应用平台必须要能适应需求的变化,即具有可扩展性。比如移动互联网2C应用,随着互联网企业的业务规模不断增大,业务变得越来越复杂,并发用户请求越来越多,要处理的数据也越来越多,这个时候企业级应用平台必须能够适应这些变化,支持高并发访问和海量数据处理。分布式系统有良好的可扩展性,可以通过增加服务器数量来增强分布式系统整体的处理能力,以应对企业的业务增长带来的计算需求增加。

 

2.2 分布式存储的问题 – CAP理论

 

如果我们期待实现一套严格满足ACID的分布式事务,很可能出现的情况就是系统的可用性和严格一致性发生冲突。在可用性和一致性之间永远无法存在一个两全其美的方案。由于NoSQL的基本需求就是支持分布式存储,严格一致性与可用性需要互相取舍,由此延伸出了CAP理论来定义分布式存储遇到的问题。

 

CAP理论告诉我们:一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)、分区容错性(P:Partitiontolerance)这三个基本需求,并且最多只能满足其中的两项。

 

对于一个分布式系统来说,分区容错是基本需求,否则不能称之为分布式系统。因此架构师需要在C和A之间寻求平衡。

 


HBase 的物理存储

HBase 表中的所有行都是按照行键的字典序排列的。

因为一张表中包含的行的数量非常多,有时候会高达几亿行,所以需要分布存储到多台服务器上。

因此,当一张表的行太多的时候,HBase 就会根据行键的值对表中的行进行分区,每个行区间构成一个“分区(Region)”,

包含了位于某个值域区间内的所有数据,如图 1 所示。

HBase的Region存储模式图

                   图 1  HBase的Region存储模式图




Region 是按大小分割的,每个表一开始只有二个 Region,随着数据不断插入到表中,Region 不断增大,

当增大到一个阈值的时候,Region 就会等分为两个新的 Region。

当表中的行不断增多时,就会有越来越多的 Region,如图 2 所示。



 HBase的Region分裂示意
                                   图 2  HBase的Region分裂示意


Region 是 HBase 中数据分发和负载均衡的最小单元,默认大小是 100MB 到 200MB。

不同的 Region 可以分布在不同的 Region Server 上,但一个 Region 不会拆分到多个 Region Server 上。

每个 Region Server 负责管理一个 Region 集合。

如图 3 所示。



HBase的Region分布模式
                                                                图 3  HBase的Region分布模式



Region 是 HBase 在 Region Server 上数据分发的最小单元,但并不是存储的最小单元。

事实上,每个 Region 由一个或者多个 Store 组成,每个 Store 保存一个列族的数据。

每个 Store 又由一个 memStore 和 0 至多个 Store File 组成,如图 4 所示。

Store File 以 HFile 格式保存在 HDFS 上。


HBase的Region存储模式
                                                                       图 4  HBase的Region存储模式

HBase 的逻辑架构

在分布式的生产环境中,HBase 需要运行在 HDFS 之上,以 HDFS 作为其基础的存储设施。

HBase 的上层是访问数据的 Java API 层,供应用访问存储在 HBase 中的数据。

HBase 的集群主要由 Master、Region Server 和 Zookeeper 组成,

具体模块如图 5 所示。

HBase的系统架构

                                                                 图 5  HBase的系统架构



1)Master

Master 主要负责表和 Region 的管理工作。

表的管理工作主要是负责完成增加表、删除表、修改表和查询表等操作。

Region 的管理工作更复杂一些,Master 需要负责分配 Region 给 Region Server,协调多个 Region Server,检测各个 Region Server 的状态,并平衡 Region Server 之间的负载。

当 Region 分裂或合并之后,Master 负责重新调整 Region 的布局。如果某个 Region Server 发生故障,Master 需要负责把故障 Region Server 上的 Region 迁移到其他 Region Server 上。

HBase 允许多个 Master 结点共存,但是这需要 Zookeeper 进行协调。当多个 Master 结点共存时,只有一个 Master 是提供服务的,其他的 Master 结点处于待命的状态。

当正在工作的 Master 结点宕机时,其他的 Master 则会接管 HBase 的集群。



2)RegionServer

HBase 有许多个 Region Server,每个 Region Server 又包含多个 Region。Region Server 是 HBase 最核心的模块,负责维护 Master 分配给它的 Region 集合,并处理对这些 Region 的读写操作。

Client 直接与 Region Server 连接,并经过通信获取 HBase 中的数据。

HBase 釆用 HDFS 作为底层存储文件系统,Region Server 需要向 HDFS 写入数据,并利用 HDFS 提供可靠稳定的数据存储。

Region Server 并不需要提供数据复制和维护数据副本的功能。


3)Zookeeper

Zookeeper 的作用对 HBase 很重要。


首先,Zookeeper 是 HBase Master 的高可用性(High Available,HA)解决方案。

也就是说,Zookeeper 保证了至少有一个 HBase Master 处于运行状态。

Zookeeper 同时负责 Region 和 Region Server 的注册。

HBase 集群的 Master 是整个集群的管理者,它必须知道每个 Region Server 的状态。

HBase 就是使用 Zookeeper 来管理 Region Server 状态的。

每个 Region Server 都向 Zookeeper 注册,由 Zookeeper 实时监控每个 Region Server 的状态,并通知给 Master。


这样,Master 就可以通过 Zookeeper 随时感知各个 Region Server 的工作状态。


需要搭建 ZooKepper 集群 , 采取奇数作为基础, 要不断选取出唯一的领导者 。


然后在搭建 Hbase 集群。



image.png

image.png



Hlog = Mysql 中的 bingLog

image.png



Hbase 逻辑架构

image.png


image.png



安装 Hbase


1、下载软件从   hbase.apache.com   

2、上传到 \bigdata\tools

3、tar -zxvf hbase-1.2.3tar.gz

4、cd /bigdata/tools/hbase1.2.3/config

5、vi hbase-env.sh

      export ...


6、vi  hbase-site.xml



image.png

image.png

image.png


image.png

我们上课说的:    start-hbase.sh

              查看:     jsp                         或者      http://192.168.1.119:16030


              安装一个插件 Phoenix , 就可以用 mysql 数据库的命令看了   , 等于是一个 shell .

              API可以在 Java后端做软件查看 。

              

           

第四周, 卢老师笔记--------------------------------------------------------------------------------------------------


HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。

利用PC搭建大规模的结构化存储集群。


HBase -> Google Bigtable开源实现。GFS <- HDFS 2006 powerset jim

2008  Apache Hadoop 


Facebook

Intel

Yahoo

baidu

alibaba

tencent

360


回顾一下传统关系型数据库

1、有事务的保障 ACID 原子性、一治性、隔离性、持久性

2、丰富的数据类型和sql操作

3、严格的数据类型,及行式存储


关系型数据库在高并发、大数据应对方式:

高并发:

措施:分库分表 、读写分离

带来数据一致性问题

海量数据:

措施:分库分表

实现复杂,后期迁移复杂

路由自定义

高可用、可靠、可伸缩、

措施:主备、主从、多主

本身扩展性差,增加节点宕机需要做数据迁移


HBase特点:

大表:一个表有上亿行,上百万列

面向列:面向列族的存储,列族独立检索

稀疏:对于空(null)的列,不占用空间

。。。



分布式数据库hbase特点:

基于列式高效存储

强一致数据访问

高可靠

高性能

可伸缩,自由切分、迁移

Schema free


RowKey

:与nosql数据库一样,row key是用来检索记录的主键。

而且可以访问hbase table中行,只有三方法:

1、通过单个row key进行访问

2、通过row key的range进行访问

3、全表扫描

row key行键,64kb,实际应用长度一般10~100ytes,在hbase内部,row key保存为字节数组。存储时,数据按row key的字典顺序排序存储。



Columns family

列族:

hbase表中的每个列,都归属于某个列族。

列族是表的schema的一部分,而列不是,必须在使用表之前进行定义。

列名都以列族作为前缀。

courses:history, courses:math都属于courses这个列族。



Time Stamp

时间戳:

hbase中通过row和columns确定的为一个存储单元:cell

每个cell都保存着同一份数据的多个版本。版本通过时间戳来做索引。时间戳的类型是64位整型。

时间戳也可以由hbase系统进行赋值,可以精确到毫秒,当然也可以由客户显示赋值。

每个cell中,不同版本的数据按时间倒序排序,最新的数据排在最前面。为了避免数据存在过多版本造成的管理负担,hbase提供两种回收方式,一是保存数据最后的n个版本,二保存最近一段时间内版本(比如最近7天),用户可以针对每个列族进行设置。




Cell

由row key + column ,version唯一确定单元,cell中的数据是没有类型的,全是字节码形式存储。

Cell的内容是不可分割的字节数组。

无类型、字节码。



物理存储

在hbase table中所有的行都按row key的字典序排列。

table在行的方向上分割为多个hregion


Region按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一定阀值时候,Hregion就会分成两个新hregion



HRegion是Hbase中分布式存储和负载均衡的最小单元,最小单元就表示不同的Hregion可以分布在不同的hregion server上,但一个hregion是不会折分到多个server


Store:

Hregion虽然是分布式存储的最小单元,但并不是存储的最小元,在下层还有store,而store是以hfile的格式保存在hdfs上。





HFile:

1、Data Block

保存表中的数据,这部分可以被压缩。


2、Meta Block

保存用户自定义的kv对,可以被压缩


3、Data Block Index

Data Block索引,每条索引的key是被索引的block的第一条记录的key


4、Meta Block Index

Meta Block索引.


5、Trailer

是定长的,保存每一段的偏移量。在读取一个hfile时,会首先读取Trailer,Trailer保存了每个段的起始位置,然后,DataBlockIndex会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需要从内存中找到key所在的blok,通过一次磁盘io,可以将整个block读取到内存中,再找到需要的key。DataBlockInde采用LRu机制淘汰。

HFile的DataBlock,MetaBlock通常采用压缩方式进行存储,压缩后可以减少磁盘io,相应的cpu的开支也会减少。


6、File Info

是HFile的元信息,不被压缩,用记可以在这一段添加自己的元信息。


目前HFile的压缩支持两种方式:GZip、Lzo


Hlog:

Hlog类似于mysql 中的binlog,用来做灾难恢复,hlog记录了所有数据的变更,一但数据修改,都可以在log里面进行恢复。


注意:每个Region Server维护一个Hlog,而不是每个Region一个


这样不同的Region的日志会混合在一起,这样做的目的,是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数。所以可以提高对table的写的性能。


Hlog 文件就是一个hadoop squence file ,squence file的key是hlogkey的对象,hlogkey记录了写入数据的归属信息。除了table和region名字之外,同时还包括sequence number和time stamp,time stamp是写入时间,sequence number和的起始值为0,或者是最近一次存储文件 系统的sequence number。



Client:

访问hbase接口,维护着region位置的缓存信息。


Zookeeper:

保证任何时候,集群中只有一个master

存储所有Region的寻址入口。

实时监控Region Server的状态,将上下线信息通知master

存储hbase的schema,包括有哪些table,每个table有哪些column family


Master

为Region Server分配region

负载region server的负载均衡

发现失效的region server并重新分析其上的region

GFS上的垃圾文件回收

处理schema更新请求。




Region Server

维护master分配给它的region,处理io请求

负责切分过大的region,可以看到client访问hbase上数据的过程并不需要master参与。



HBase安装部署与配置:

单机、集群

1、上传hbase安装包

2、解压hbase文件  tar -zxvf hbase-1.2.3.tar.gz

3、cd /bigdata/tools/hbase1.2.3/conf

4、修改hbase-env.sh

export JAVA_HOME=/bigdata/tools/jdk1.7

export HBASE_CLASSPATH=/bigdata/tools/hbase1.2.3/conf

export HBASE_MANAGERS_ZK=true


5、修改hbase-site.xml

hbase.rootdir

hdfs://192.168.1.119:9000/hbase



hbase.cluster.distributed

true




6、配置region servers文件及hbase环境变量

regionservers文件增加集群节点ip

192.168.1.119

192.168.1.120

192.168.1.121


配置hbase环境变量

export HBASE_HOME=/bigdata/tools/hbase1.2.3/

export PATH=$PATH:/bigdata/tools/hbase1.2.3/bin


source /etc/profile



7、启动hbase  

start-hbase.sh


8、查看hbase进程

jsp

DataNode

SecondaryNamenode

NameNode

ResourceManger

NodeManager

HRegionServer

Hmaster

JobTracker

TaskTracker

QuorumpeerMain


9、通过http页面进行查看

http://192.168.1.119:16030


hbase shell基本用法:

1、建立一个表scores,有两个列族,grad和courese

create 'scores','grade','courese'


2、查看hbase中的所有的表:

list


3、查看表结构:

describe 'scores'


4、按设计的表结构插入值:

put 'scores','tom','grade','5'

put 'scores','tom','courese:math','97'

put 'scores','Jim','courese:art','87'

put 'scores','Jim','grade','4'


5、根据键值查询数据

get 'scores','Jim'

get 'scores','Jim','grade'


6、查看表中所有数据

scan 'scores'


7、删除指定数据

delete 'scores','Jim','grage'



8、修改表结构

disable 'scores'

alter 'scores', NAME=>'info'

enable 'scores'


9、统计行数

count 't1'


10、删除表

disable 'scores'

drop 'scores'



API


1、初始化配置

publice class HBaseTest{

private static Configuration conf = null;

Cinfuguration HBASE_CONF = new Configuration()

HBASE_CONF.set('hbase.master','192.168.1.119:60000')

HBASE_CONF.set('hbase.zookeeper.quorum','hsslave1,hsslave2,hsslave3')

.set('hbase.zookeeper.property.clientport','2181')

conf = HBaseconfiguration.create(HBASE_CONF)


}


2、创建一张表



public static void createTable(String tableName,String[] familys)throws Exception{

HBaseAdmin admin = new HBaseAdmin(conf)

HTableDescripor tableDes = new HTbaleDescriptor(tableName)

tableDes.addFamily(new HColumnDescriptor(familys[i]))

admin.createTable(tableDes)

}



3、插入一条数据


4、删除一行数据


5、查询一条记录


6、查询所有数据


3、删除一张表


-------------------------------------------------------------------------------------------

  



首页
产品
新闻
联系