大数据_搭建前的准备
在后台常用到数据的加工合并连接等操作形成新的表,里面会对应你想要的数据(维度等信息),在前台可以使用,一个月内的情况,近7天得情况等统计分析 。
1>.最初你可能想通过web端用Java写计算公式得出结果(会发现很慢)
2>.后期你方发现直接写一些脚本(linux或者oracle等等各种形式的脚本,让他定时执行或调用存在表中,前端的系统直接取结果(基本是正确 的思 想,但是发现数据量太大,计算总是差强人意的,也许承受不住压力或者时间太长,多几个请求就完蛋了)
3>.接着就是分布式的出现
4>.最后就是Hadoop的出现,Hadoop不仅能分布式、扩容、对机器的要求低,容错等等机制完美的解决了最初的需求,后来发现不行我想实时的出现结果,例如某个人的触发了某个操作,我要立刻处理,而不要等到第二天,又或者我浏览了某些商品,新闻,某类音乐,能立刻有相关的推荐等--》解决这种情景就需要实时处理(storm),或者微批处理(spark Streaming)
对于数据处理现在比较普遍的处理方式就是大数据相关组件间搭建处理流程
一、准备合适的虚拟机
云平台、本机(安装虚拟机,内存至少8g,最好I5以上)、linux服务器均可
二、了解大数据相关组件
三、主机名了解一下
在CentOS6及其以下版本一般通过修改配置文件的办法来修改主机名,此配置文件一般为/etc/sysconfig/network,但在CentOS7中,很多系统管理工具都被替换了。
例如想更改主机名,不能参考以前的方法了,新的配置文件已经更新为/etc/hostname,尽管修改/etc/sysconfig/network配置文件(此文件依然存在,只是是空的)可能起作用
CentOS7修改主机名的方法。
1>.在安装操作系统的时候设定好主机名
2>.直接使用文本编辑器修改/etc/hostname配置文件。
3>.使用hostnamectl命令,hostnamectl set-hostname name ,再通过hostname或者hostnamectl status命令查看更改是否生效。
四、多台虚拟机之间的免密码登陆
ssh 主机名
1>.生成密钥对
ssh-keygen -t rsa
2>.将公钥发送出去给其他的服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@主机名
3>.测试
ssh 主机名
******还会经常用到scp命令进行服务器间文件的拷贝*****
五、关闭防火墙(注意下Linux的版本)
六、创建用户,毕竟也不能一直在root用户下操作吧
adduser 用户名 --创建用户
passwd 密码 --密码
七、安装jdk
1>.解压jdk:
tar -zxvf jdk-8u102-linux-x64.tar.gz -C ~/bigdata/install/
2>.修改环境变量:
vim ~/.bash_profile
JAVA_HOME=/home/flume/bigdata/install/jdk1.8.0_102
export PATH=$JAVA_HOME/bin:$PATH
3>.生效: source ~/.bash_profile
********环境变量的几种配置方式**************
*1>>. ~/.bash_profile : 登录 *
*2>>. ~/.bashrc : 打开一个shell就会读取 *
*3>>. /etc/profile :root *
*4>>. 配置脚本 *
***************************************************
八、后面的各个组件的搭建,可以看官网,官网一般都是XX.apache.org
九、大数据相关组件介绍
九、大数据相关组件介绍
数据采集
所有我们认为存储在数据库里面的数据,结构其实最终都是以文件的形式存储的,Spark和Hadoop的所有计算都是基于hdfs(存储数据文件)计算的,同样所有要进行处理的数据文件最终都要导入到hdfs文件中(相当于统一货币,统一处理格式),那么统一的过程就涉及到 数据在哪的问题!
如果数据存储在文件中的例如log日志,可以读取相关的文件形成hdfs的文件,读取的过程又有可能是远程的,你可以cp的形式拷贝,但是可能出现卡机等一切意外,导致文件的丢失,另外多长时间拷贝一次,文件过大等问题,其实文件的读取flume可以做实时读取(分布式,扩容,容错,实时),还有其他的方式。
如果数据存储在数据库中可以通过sqoop等相关的插件将数据转换成hive或者hbase识别的数据形式存储在hdfs,再进行操作。
又或者在数据实时增加的情景中,可以通过flume获取接口,文件,数据库等获取实时数据
以上的描述涉及到三个词语:
-
sqoop
Sqoop是数据库ETL工具,用于将关系型数据库的数据导入到 Hadoop 及其相关的系统中,如 Hive和HBase。Sqoop 的核心设计思想是利用MapReduce 加快数据传输速度,也就是说 Sqoop 的导入和导出功能是通过 MapReduce 作业实现的,所以它是一种批处理方式进行数据传输,难以实现实时数据的导入和导出。
-
flume
Flume是高可用的,高可靠的,分布式的海量日志采集、 聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。(传输的方向都是通过配置文件设置)
-
hdfs
分布式文件存储(提供了海量数据的存储。多备份)
数据处理
直接操作文件,spark和hadoop都能直接操作,按行读取做操作,再结合一下算法(例如最常见的推荐算法,就用到矩阵的点乘等)也可以以数据 命令的形式做操作,例如hive他就是设置读取hdfs文件的形式,将读取的格式保存起来(叫表结构),数据存在hdfs但是我有了读取hdfs文件的方式(表结构),那么就可以以类似的sql的命令来操作hdfs的文件了,你可以建新表、连接、增删改查等操作,所有的操作都是有强大的hadoop等做支持是很快的。
-
Hadoop
用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。
设计核心: Mapreduce编程模型(提供了对数据的计算),HDFS分布式文件存储(提供了海量数据的存储。多备份),与YARN。
YARN:资源管理系统,包含一个全局的资源调度器ResourceManager和每个应用程序特有的应用程序管理器ApplicationMaster
-
Spark&storm
实时的处理,hadoop是批量处理,spark其实也是另一种微批处理,但是由于他落地到内存,hadoop落地到磁盘,所以spark更快,当然基于落后就要挨打的思想hadoop3.0早已经扭转了这种劣势
-
flink
离线实时都很强,站在巨人的肩膀上,就像猪站在风口上
-
Hive
Hive是构建在Hadoop上的数据仓库平台,设计目标是可以用传统SQL操作Hadoop上的数据,数据存储在hdfs上,利用Hadoop MapReduce来处理hive的命令,类似mysql和oracle等关系型数据库的操作方式
数据存储
数据操作完了,你可以存储成文件,或者存储在前端先要用的数据库中(hbase,mysql,oracle,ES等等),sqoop(转换工具,可以对接各种数据库,将数据读到非关系型数据库存在hdfs中,也可以将hdfs的数据读到各种关系型数据库)
数据存储完,前端使用就可以了。根据不用的场景使用批处理或者实时处理。
-
Hbase
高可靠、高性能、面向列、可伸缩的分布式存储系统,数据存储在hdfs上,利用Hadoop MapReduce来处理HBase中的海量数据
特点:大,面向列,稀疏(空列不占用空间),操作不像hive,但支持shell命令的形式以及Javaapi,支持的查询比较简单
但是支持大数据量高并发操作
其他流程控制的组件!!!!
-
Kafka
分布式发布订阅消息系统,我的理解就是可以存储消息的仓库减轻传递和接收方的压力
Broker:存储消息的地方
Topic:相当于消息的类别存储在broker 举一个不太恰当的例子,如果broker相当于map 那么topic相当于key,而实际的消息相当于value
Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition.
Producer:负责发布消息到Kafka broker,必然是需要指定主题的
Consumer:消息消费者,向Kafka broker读取消息的客户端。同样需要指定需要哪个主题
Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
网上发现一个非常经典的解释方式:妈妈蒸馒头给儿子吃,蒸花卷给女儿吃,为了不丢失给了篮子
妈妈:生产者(Producer),
篮子:(装花卷和馒头的位置)Broker
馒头:有Topic标签的message(馒头的Topic是馒头,花卷的Topic是花卷)
儿子:吃馒头的的Consumer
女儿:吃花卷的Consumer
-
zookeeper
高可用、高性能且一致的开源协调服务,分布式的,开放源码的分布式应用程序协调服务
ZooKeeper的基本运转流程:
1、选举Leader。
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限。
5、集群中大多数的机器得到响应并接受选出的Leader。 为了保证容错性,某个主节点挂掉,能快速恢复管理的机制。