kafka集群搭建,大数据都需要学什么?
kafka集群搭建,大数据都需要学什么?详细介绍
本文目录一览: Mac 使用 docker 搭建 kafka 集群 + Zookeeper + kafka-manager
这里我们用最简单的方式创建一个独立的Zookeeper节点,如果要考虑zookeeper的高可用,可以将其做成一个集群,最好是能有多台机器。
默认的,容器内配置文件在,/conf/zoo.cfg,数据和日志目录默认在/data 和 /datalog,需要的话可以将上述目录映射到宿主机的可靠文件目录下。
使用docker命令可快速在同一台机器搭建多个kafka,只需要改变brokerId和端口
中间两个参数的 192.168.0.102 改为 宿主机器 的IP地址,如果不这么设置,可能会导致在别的机器上访问不到 kafka。
或者可以通过 kafka-manager 创建
在kafka容器中的 opt/kafka_2.12-1.1.0/ 目录下输入
显示每个分区的Leader机器为broker0,在broker0和1上具有备份,Isr代表存活的备份机器中存活的。
当停掉kafka1后,
再查看topic状态,输出结果:
kafka-manager 有图形化UI,可以方便的监控集群状态,调整队列配置
容器启动以后访问主机的9000端口,0.0.0:9000
首次进入需要添加一个集群标识,如下图所示
配置好以后,通过Zookeeper该管理节点可以读取到整个Kafka集群的信息,并且我们可以通过JMX直接看到集群的健康状态
也可以看到主题的读写速度,偏移量等信息,如下图所示:
Brokers ,Partitions,Replicas 都能看到
以及 group:
https://blog.csdn.net/lblblblblzdx/article/details/80548157
https://blog.csdn.net/lblblblblzdx/article/details/80548294
原文地址: mac 使用 docker搭建 kafka集群 + Zookeeper + kafka-manager
「SpringCloud」(三十八)搭建ELK日志采集与分析系统
?一套好的日志分析系统可以详细记录系统的运行情况,方便我们定位分析系统性能瓶颈、查找定位系统问题。上一篇说明了日志的多种业务场景以及日志记录的实现方式,那么日志记录下来,相关人员就需要对日志数据进行处理与分析,基于E(ElasticSearch)L(Logstash)K(Kibana)组合的日志分析系统可以说是目前各家公司普遍的首选方案。
??作为微服务集群,必须要考虑当微服务访问量暴增时的高并发场景,此时系统的日志数据同样是爆发式增长,我们需要通过消息队列做流量削峰处理,Logstash官方提供Redis、Kafka、RabbitMQ等输入插件。Redis虽然可以用作消息队列,但其各项功能显示不如单一实现的消息队列,所以通常情况下并不使用它的消息队列功能;Kafka的性能要优于RabbitMQ,通常在日志采集,数据采集时使用较多,所以这里我们采用Kafka实现消息队列功能。 ??ELK日志分析系统中,数据传输、数据保存、数据展示、流量削峰功能都有了,还少一个组件,就是日志数据的采集,虽然log4j2可以将日志数据发送到Kafka,甚至可以将日志直接输入到Logstash,但是基于系统设计解耦的考虑,业务系统运行不会影响到日志分析系统,同时日志分析系统也不会影响到业务系统,所以,业务只需将日志记录下来,然后由日志分析系统去采集分析即可,Filebeat是ELK日志系统中常用的日志采集器,它是 Elastic Stack 的一部分,因此能够与 Logstash、Elasticsearch 和 Kibana 无缝协作。
软件下载:
??因经常遇到在内网搭建环境的问题,所以这里习惯使用下载软件包的方式进行安装,虽没有使用Yum、Docker等安装方便,但是可以对软件目录、配置信息等有更深的了解,在后续采用Yum、Docker等方式安装时,也能清楚安装了哪些东西,安装配置的文件是怎样的,即使出现问题,也可以快速的定位解决。
Elastic Stack全家桶下载主页: https://www.elastic.co/cn/downloads/
我们选择如下版本:
Kafka下载:
??安装前先准备好三台CentOS7服务器用于集群安装,这是IP地址为:172.16.20.220、172.16.20.221、172.16.20.222,然后将上面下载的软件包上传至三台服务器的/usr/local目录。因服务器资源有限,这里所有的软件都安装在这三台集群服务器上,在实际生产环境中,请根据业务需求设计规划进行安装。 ??在集群搭建时,如果能够编写shell安装脚本就会很方便,如果不能编写,就需要在每台服务器上执行安装命令,多数ssh客户端提供了多会话同时输入的功能,这里一些通用安装命令可以选择启用该功能。
新建/usr/local/java目录
将下载的jdk软件包jdk-8u64-linux-x64.tar.gz上传到/usr/local/java目录,然后解压
配置环境变量/etc/profile
在底部添加以下内容
使环境变量生效
备注:后续可通过此命令停止elasticsearch运行
??新建kafka的日志目录和zookeeper数据目录,因为这两项默认放在tmp目录,而tmp目录中内容会随重启而丢失,所以我们自定义以下目录:
修改如下:
在data文件夹中新建myid文件,myid文件的内容为1(一句话创建:echo 1 > myid)
kafka启动时先启动zookeeper,再启动kafka;关闭时相反,先关闭kafka,再关闭zookeeper。 1、zookeeper启动命令
后台运行启动命令:
或者
查看集群状态:
2、kafka启动命令
后台运行启动命令:
或者
3、创建topic,最新版本已经不需要使用zookeeper参数创建。
参数解释: 复制两份 --replication-factor 2 创建1个分区 --partitions 1 topic 名称 --topic test
4、查看已经存在的topic(三台设备都执行时可以看到)
5、启动生产者:
6、启动消费者:
添加参数 --from-beginning 从开始位置消费,不是从最新消息
7、测试:在生产者输入test,可以在消费者的两台服务器上看到同样的字符test,说明Kafka服务器集群已搭建成功。
Logstash没有提供集群安装方式,相互之间并没有交互,但是我们可以配置同属一个Kafka消费者组,来实现统一消息只消费一次的功能。
??Filebeat用于安装在业务软件运行服务器,收集业务产生的日志,并推送到我们配置的Kafka、Redis、RabbitMQ等消息中间件,或者直接保存到Elasticsearch,下面来讲解如何安装配置:
1、进入到/usr/local目录,执行解压命令
2、编辑配置filebeat.yml ??配置文件中默认是输出到elasticsearch,这里我们改为kafka,同文件目录下的filebeat.reference.yml文件是所有配置的实例,可以直接将kafka的配置复制到filebeat.yml
后台启动命令
停止命令
2、测试logstash是消费Kafka的日志主题,并将日志内容存入Elasticsearch
自动新增的两个index,规则是logstash中配置的
数据浏览页可以看到Elasticsearch中存储的日志数据内容,说明我们的配置已经生效。
Gitee: GitEgg: GitEgg 是一款开源免费的企业级微服务应用开发框架,旨在整合目前主流稳定的开源技术框架,集成常用的最佳项目解决方案,实现可直接使用的微服务快速开发框架。 GitHub: https://github.com/wmz1930/GitEgg
kafka原理
Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的 活动流数据 (Activity Stream)和 运营数据 处理管道(Pipeline)的基础。现在它已被多家公司作为多种类型的数据管道和消息系统使用。
Kafka通常用于应用中的两种广播类型:
由此可见,kafka给自身的定位并不只是一个消息系统,而是通过发布订阅消息这种机制实现了流平台。
Kafka和大多数消息系统一样,搭建好kafka集群后,生产者向特定的topic生产消息,而消费者通过订阅topic,能够准实时的拉取到该topic新消息,进行消费。如下图:
kafka主要有以下特性:
尤其是高吞吐量,是他的最大卖点。kafka之所以能够实现高吞吐量,是基于他自身优良的设计,及集群的可扩展性。
Kafka应用场景
一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它用来唯一标记某个分区内的一条消息。kafka并没有提供其它额外的索引机制来存储offset,因为在kafka中几乎不允许对消息进行“随机读写”。
Kafka和其它消息系统有一个不一样的设计,在consumer之上加了一层group。同一个group的consumer可以并行消费同一个topic的消息,但是同group的consumer,不会重复消费。这就好比多个consumer组成了一个团队,一起干活,当然干活的速度就上来了。group中的consumer是如何配合协调的,其实和topic的分区相关联,后面我们会详细论述。
如果同一个topic需要被多次消费,可以通过设立多个consumer group来实现。每个group分别消费,互不影响。
在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻),每个group中consumer消息消费互相独立,我们可以认为一个group是一个"订阅"者。一个Topic中的每个partions只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以同时消费多个partitions中的消息。
kafka只能保证一个partition中的消息被某个consumer消费时是顺序的。事实上,从Topic角度来说,,当有多个partitions时,消息仍不是全局有序的。
filebeat利用kafka进行日志实时传输
选择安装目录:例如安装在/usr/local/或者/opt/下都可以。
创建一个软链接:
filebeat的配置很简单,只需要指定input和output就可以了。
由于kafka server高低版本的客户端API区别较大,因此推荐同时使用高版本的filebeat和kafka server。 注意 高版本的filebeat配置使用低版本的kafka server会出现kafka server接受不到消息的情况。这里我使用的kafka server版本是:2.12-0.11.0.3,可参考 快速搭建kafka
编辑filebeat安装目录下 filebeat.yml 文件:
配置Filebeat inputs:
上面 /opt/test/*.log 是我要传输的日志,根据实际情况改成你自己的值。
配置Filebeat outputs:
"111.11.1.243:9092" 是我的单机kafka broker,如果你是kafka集群,请用 , 分隔。 test 是kafka topic,请改成你自己实际情况的值。另外以下这段需要删除:
因为我并没有用到Elasticsearch,所以有多个输出在启动filebeat时会报错。到这里filebeat配置kafka就完成了,是不是很简单,让我们启动它测试一下。
启动,进入filebeat的安装目录:
查看是否启动:
很好,已经启动了。如果没有启动,请查看启动日志文件nohup.out。
停止:
随机生成日志脚本:
执行这段python脚本,开启一个kafka消费者如果成功消费日志消息:
哈哈,大功告成。 注 上面这段脚本要适时手动停止,因为它是个死循环,如果忘记手动停止那么就杯具了,我就是这样把机器写宕机的。
Ansible部署系列续:(二)安装Kafka
由于之前的项目用到Kafka,在这里也记录一下。
ansible hosts 文件,broker_id从0开始
vars.yml 添加参数
因为搭建的是集群环境,因此都需要配置节点
具体含义是啥忘记了
具体含义是啥忘记了
启动脚本
新建topic,生产者发送消息,消费者消费消息
为什么要用kafka?kafka适用什么样的场景?
Apache Kafka 集群环境搭建 - - ITeye技术网站
http://bigcat2013.iteye.com/blog/2175880?utm_source=tuicool&utm_medium=referral
接下来是老生常谈的问题:为什么要用kafka?kafka适用什么样的场景?我先和大家分享一下自己再项目中的使用总结,有其他想法的同学欢迎补充:
使用kafka的理由:
1.分布式,高吞吐量,速度快(kafka是直接通过磁盘存储,线性读写,速度快:避免了数据在JVM内存和系统内存之间的复制,减少耗性能的对象创建和垃圾回收)
2.同时支持实时和离线两种解决方案(相信很多项目都有类似的需求,这也是Linkedin的官方架构,我们是一部分数据通过storm做实时计算处理,一部分到hadoop做离线分析)。
3.open source (open source 谁不喜欢呢)
4.源码由scala编写,可以运行在JVM上(笔者对scala很有好感,函数式语言一直都挺帅的,spark也是由scala写的,看来以后有空得刷刷scala)
使用场景:
笔者主要是用来做日志分析系统,其实Linkedin也是这么用的,可能是因为kafka对可靠性要求不是特别高,除了日志,网站的一些浏览数据应该也适用。(只要原始数据不需要直接存DB的都可以)
Golang kafka简述和操作(sarama同步异步和消费组)
一、Kafka简述
1. 为什么需要用到消息队列
异步:对比以前的串行同步方式来说,可以在同一时间做更多的事情,提高效率;
解耦:在耦合太高的场景,多个任务要对同一个数据进行操作消费的时候,会导致一个任务的处理因为另一个任务对数据的操作变得及其复杂。
缓冲:当遇到突发大流量的时候,消息队列可以先把所有消息有序保存起来,避免直接作用于系统主体,系统主题始终以一个平稳的速率去消费这些消息。
2.为什么选择kafka呢?
这没有绝对的好坏,看个人需求来选择,我这里就抄了一段他人总结的的优缺点,可见原文
kafka的优点:
1.支持多个生产者和消费者2.支持broker的横向拓展3.副本集机制,实现数据冗余,保证数据不丢失4.通过topic将数据进行分类5.通过分批发送压缩数据的方式,减少数据传输开销,提高吞高量6.支持多种模式的消息7.基于磁盘实现数据的持久化8.高性能的处理信息,在大数据的情况下,可以保证亚秒级的消息延迟9.一个消费者可以支持多种topic的消息10.对CPU和内存的消耗比较小11.对网络开销也比较小12.支持跨数据中心的数据复制13.支持镜像集群
kafka的缺点:
1.由于是批量发送,所以数据达不到真正的实时2.对于mqtt协议不支持3.不支持物联网传感数据直接接入4.只能支持统一分区内消息有序,无法实现全局消息有序5.监控不完善,需要安装插件6.需要配合zookeeper进行元数据管理7.会丢失数据,并且不支持事务8.可能会重复消费数据,消息会乱序,可用保证一个固定的partition内部的消息是有序的,但是一个topic有多个partition的话,就不能保证有序了,需要zookeeper的支持,topic一般需要人工创建,部署和维护一般都比mq高
3. Golang 操作kafka
3.1. kafka的环境
网上有很多搭建kafka环境教程,这里就不再搭建,就展示一下kafka的环境,在kubernetes上进行的搭建,有需要的私我,可以发yaml文件
3.2. 第三方库
github.com/Shopify/sarama // kafka主要的库*github.com/bsm/sarama-cluster // kafka消费组
3.3. 消费者
单个消费者
funcconsumer(){varwg sync.WaitGroup? consumer, err := sarama.NewConsumer([]string{"172.20.3.13:30901"},nil)iferr !=nil{? ? ? fmt.Println("Failed to start consumer: %s", err)return}? partitionList, err := consumer.Partitions("test0")//获得该topic所有的分区iferr !=nil{? ? ? fmt.Println("Failed to get the list of partition:, ", err)return}forpartition :=rangepartitionList {? ? ? pc, err := consumer.ConsumePartition("test0",int32(partition), sarama.OffsetNewest)iferr !=nil{? ? ? ? fmt.Println("Failed to start consumer for partition %d: %s\n", partition, err)return}? ? ? wg.Add(1)gofunc(sarama.PartitionConsumer){//为每个分区开一个go协程去取值formsg :=rangepc.Messages() {//阻塞直到有值发送过来,然后再继续等待fmt.Printf("Partition:%d, Offset:%d, key:%s, value:%s\n", msg.Partition, msg.Offset,string(msg.Key),string(msg.Value))? ? ? ? }deferpc.AsyncClose()? ? ? ? wg.Done()? ? ? }(pc)? }? wg.Wait()}funcmain(){? consumer()}
消费组
funcconsumerCluster(){? groupID :="group-1"config := cluster.NewConfig()? config.Group.Return.Notifications =trueconfig.Consumer.Offsets.CommitInterval =1* time.Second? config.Consumer.Offsets.Initial = sarama.OffsetNewest//初始从最新的offset开始c, err := cluster.NewConsumer(strings.Split("172.20.3.13:30901",","),groupID, strings.Split("test0",","), config)iferr !=nil{? ? ? glog.Errorf("Failed open consumer: %v", err)return}deferc.Close()gofunc(c *cluster.Consumer){? ? ? errors := c.Errors()? ? ? noti := c.Notifications()for{select{caseerr := <-errors:? ? ? ? ? ? glog.Errorln(err)case<-noti:? ? ? ? }? ? ? }? }(c)formsg :=rangec.Messages() {? ? ? fmt.Printf("Partition:%d, Offset:%d, key:%s, value:%s\n", msg.Partition, msg.Offset,string(msg.Key),string(msg.Value))? ? ? c.MarkOffset(msg,"")//MarkOffset 并不是实时写入kafka,有可能在程序crash时丢掉未提交的offset}}funcmain(){goconsumerCluster()}
3.4. 生产者
同步生产者
packagemainimport("fmt""github.com/Shopify/sarama")funcmain(){? config := sarama.NewConfig()? config.Producer.RequiredAcks = sarama.WaitForAll//赋值为-1:这意味着producer在follower副本确认接收到数据后才算一次发送完成。config.Producer.Partitioner = sarama.NewRandomPartitioner//写到随机分区中,默认设置8个分区config.Producer.Return.Successes =truemsg := &sarama.ProducerMessage{}? msg.Topic =`test0`msg.Value = sarama.StringEncoder("Hello World!")? client, err := sarama.NewSyncProducer([]string{"172.20.3.13:30901"}, config)iferr !=nil{? ? ? fmt.Println("producer close err, ", err)return}deferclient.Close()? pid, offset, err := client.SendMessage(msg)iferr !=nil{? ? ? fmt.Println("send message failed, ", err)return}? fmt.Printf("分区ID:%v, offset:%v \n", pid, offset)}
异步生产者
funcasyncProducer(){? config := sarama.NewConfig()? config.Producer.Return.Successes =true//必须有这个选项config.Producer.Timeout =5* time.Second? p, err := sarama.NewAsyncProducer(strings.Split("172.20.3.13:30901",","), config)deferp.Close()iferr !=nil{return}//这个部分一定要写,不然通道会被堵塞gofunc(p sarama.AsyncProducer){? ? ? errors := p.Errors()? ? ? success := p.Successes()for{select{caseerr := <-errors:iferr !=nil{? ? ? ? ? ? ? glog.Errorln(err)? ? ? ? ? ? }case<-success:? ? ? ? }? ? ? }? }(p)for{? ? ? v :="async: "+ strconv.Itoa(rand.New(rand.NewSource(time.Now().UnixNano())).Intn(10000))? ? ? fmt.Fprintln(os.Stdout, v)? ? ? msg := &sarama.ProducerMessage{? ? ? ? Topic: topics,? ? ? ? Value: sarama.ByteEncoder(v),? ? ? }? ? ? p.Input() <- msg? ? ? time.Sleep(time.Second *1)? }}funcmain(){goasyncProducer()select{? ? ? }}
3.5. 结果展示->
同步生产打印:
分区ID:0,offset:90
消费打印:
Partition:0,Offset:90,key:,value:Hello World!
异步生产打印:
async:7272async:7616async:998
消费打印:
Partition:0,Offset:91,key:,value:async:7272Partition:0,Offset:92,key:,value:async:7616Partition:0,Offset:93,key:,value:async:998
当kafka集群其中一台宕机后,会怎么样?
我们搭建好kafka集群后,对其进行性能测试。遇到这种场景:我搭建好了三台kakfa集群,然后停掉其中一台kafka,然后集群是否能正常工作呢?
kafka集群:
192.168.183.53 节点1
192.168.183.55 节点2
192.168.183.62 节点3
创建的主题是hw_data:
三个分区、三个副本
三个节点启动以后,集群正常工作,正常生产、正常消费。
但是当我们停掉其中一个节点后,发现集群不能正常工作了。
我的这个问题的凶手是:__consumer_offsets
首先查看系统的_offsets副本是几个?
我们看到 副本数为1,这就是导致我们当一个节点宕机后集群无法正常工作的原因!
__consumer_offsets这个topic是由kafka自动创建的,默认50个,但是都存在一台kafka服务器上,这是不是就存在很明显的单点故障?
经测试,如果将存储consumer_offsets的这台机器kill掉,所有的消费者都停止消费了。
__consumer_offsets是一个非常重要的topic,我们怎么能允许它只有一个副本呢?这样就存在单点故障,也就是如果该分区所在的集群宕机了的话,我们的消费者就无法正常消费数据了。
1.修改系统_offsets副本数为3
修改kafka的核心配置文件server.properties
将num.partitions参数(默认为1)修改为3,
另外需要添加auto.create.topics.enable=true ,如果没有对应的topic可以主动创建topic。
由于__consumer_offsets是kafka默认的主题,无法删除,我们可以删除zookeeper中的__consumer_offsets。 进入zookeeper/bin目录执行./zkCli.sh
先将集群停掉 在重新启动zookeeper和kafka 再次查看__consumer_offsets。发现副本数已经是3
在节点1修改__consumer_offsets后,在节点2和节点3查看__consumer_offsets发现副本数已经变为3,不需要再进行修改。
我的问题到这里就解决了: 启动kafka集群三个节点,然后停掉其中任意一个节点,集群是可以正常工作的。
查看创建的topic的副本数是否为1
进入zookeeper的bin目录,执行./zk.Cli.sh 删除brokers下的ids
重启kafka,应该就可以了。
我首先使用rmr /brokers/topics/topicname删除了zookeeper中的topic ,这样查看kafka中的topic时,显示已经没有了,
但是我又创建我刚刚删除的主题时,发现他已经显示被标记删除。
我的配置文件已经设置了删除topic为true,但是我删除的主题还是显示被标记删除,没有真正的删除
解决办法:
进入zookeeper的bin目录,执行./zk.Cli.sh
删除config、brokers、admin下的对应主题
大数据都需要学什么?
这要看你学到什么程度了,初级的大数据工程师,大数据开发工程师,大数据维护工程师啊,再往后发展大数据研发工程师,大数据架构师,数据分析师,大数据高级工程师,大数据分析师专家,大数据挖掘师,大数据算法师等;不管的研发,还是数据分析,还是运维,都要看以后的工作需要和发展,还有自我提升等,不同的方向分工又不太相同,大数据作为一门基础科学,无论在数据开发及分析、物联网和人工智能算法训练领域,都有着核心技术和职位诉求。具体学习大数据一般分为以下几个阶段:
第一阶段:大数据基础
Java基础——Java语法基础。掌握JAVA的开发环境搭建以及基础知识等.能够熟练使用逻辑语法进行代码编写
数据结构——数组、链表、栈、队列、排序、二分查找、散列表、哈希表、二叉树,红黑树、递归树,堆和栈。继续提升大家的计算机素养,掌握算法初步。
MySQL基础——mysql安装、基本SQL语句、SQL优化。掌握数据库的基本应用。
Javaweb——tomacat、servlet、JSP 、MVC。掌握web开发的相关内容,理解数据来源
高级java——面向对象、网络编程、反射、多线程。理解分布式程序运行原理,为以后阅读大数据框架打下基础。
linux基础——虚拟机安装、常用linux命令、shell脚本。学会使用linux操作系统,为部署大数据集群做准备。
第二阶段:大数据框架
Hadoop——分布式存储、分布式计算、公共通用接口。掌握部署大数据集群,熟练编写map-reduce程序。
Zookeeper——Zookeeper协调机制、选举机制。搭建高可用集群。
Hive——数据仓库搭建、数据导入和分析。初步掌握数据仓库的概念,为后续企业级数仓做准备。
Hbase——Hbase集群搭建、大数据数据库工作原理、列式存储、高吞吐量应用开发。掌握大数据数据库Hbase的应用,科学的行键设计,热点数据处理。
Kafka——理解消息队列、Kafka集群部署、高并发高可用数据采集框架搭建。掌握高可以高并发数据队列系统设计、能处理峰值问题。
Scala——Scala语法基础、常用算子、异步通信。掌握优秀的数据处理语言Scala
Spark——Spark集群搭建、离线数据处理、实时数据处理、机器学习、图计算。掌握一栈式解决方案Spark,它是大数据的核心模块。
常用辅助框架——Sqoop、Flume、Presto、impala、Phoenix、oozie、ElasticSearch、kylin、MongoDB、Redi、Druid。掌握常用工具和与大数据紧密相关的框架,提高工作效率,拓展框架功能。
第三阶段:机器学习
python基础——python基础语法、面向对象、Numpy。掌握python基础语法和机器学习相关的基础框架。
数学基础——线性代数、微积分、概率、凸优化。本部分内容理解即可,对优化模型很重要。
常用算法——回归、KNN、决策树、聚类、集成学习、SVM、多分类、贝叶斯、EM、隐马模型、深度学习。掌握常用计算器学习算法的原理,能够根据数据特性选择合适的模型,训练泛化能力强的模型。
第四阶段:项目实操
云和数据有大数据专业,可以详细了解一下,看看这个专业的职业发展。
随着大数据的发展,越来越多的人想要进入大数据行业,大数据技术体系巨大,包含的常识非常多。
对于零基础想要学习大数据的人,一开始入门可能不会太简单。学习大数据至少需要掌握一门计算机编程语言,计算机编程语言有很多,Java是目前使用的比较广泛的编程语言之一。所以,学习大数据,掌握好Java是必不可少的。
另外学习大数据必须要学习大数据中心常识,大数据技术体系很复杂,与物联网、移动互联网、人工智能、云核算等都有着精密的关系。所以,Hadoop生态体系;HDFS技术;HBASE技术;Sqoop运用流程;数据仓库东西HIVE;大数据离线剖析Spark、Python言语;数据实时剖析Storm等都是学习大数据需要了解和掌握的。
从事大数据工作,免不了要分析数据。如果从事数据剖析师,就需要了解一定的数学常识。需要有一定的公式核算能力,了解常用计算模型算法。而如果从事数据发掘工程师,就需要能够熟练运用各类算法,对数学的要求是很高的。
基础阶段:Linux、Docker、KVM、MySQL基础、Oracle基础、MongoDB、redis。hadoop mapreduce hdfs yarn:hadoop:Hadoop 概念、版本、历史,HDFS工作原理,YARN介绍及组件介绍。
大数据存储阶段:hbase、hive、sqoop。
大数据架构设计阶段:Flume分布式、Zookeeper、Kafka。
大数据实时计算阶段:Mahout、Spark、storm。
大数据数据采集阶段:Python、Scala。
大数据商业实战阶段:实操企业大数据处理业务场景,分析需求、解决方案实施,综合技术实战应用。
大数据(big data,mega data),或称巨量资料,指的是需要新处理模式才能具有更强的决策力、洞察力和流程优化能力的海量、高增长率和多样化的信息资产。 在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》中大数据指不用随机分析法(抽样调查)这样的捷径,而采用所有数据进行分析处理。大数据的5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值密度)、Veracity(真实性)。
大数据的5个“V”,或者说特点有五层面:
第一,数据体量巨大
从TB级别,跃升到PB级别。
第二,数据类型繁多
前文提到的网络日志、视频、图片、地理位置信息等等。
第三,价值密度低
以视频为例,连续不间断监控过程中,可能有用的数据仅仅有一两秒。
第四,处理速度快
1秒定律。最后这一点也是和传统的数据挖掘技术有着本质的不同。业界将其归纳为4个“V”——Volume,Variety,Value,Velocity。
物联网、云计算、移动互联网、车联网、手机、平板电脑、PC以及遍布地球各个角落的各种各样的传感器,无一不是数据来源或者承载的方式。
入行大数据需要掌握的两大基础就是JAVA和Linux,两者需要同时掌握,才可以继续大数据课程的学习。下面是具体需要掌握的技能。
1、学习Java的基础知识,在学习大数据课程之前,首先要学习一门计算机编程语言。Java是大数据学习所需要的编程语言的基础,因为大数据的开发是基于常用的高级语言。无论是学习hadoop还是数据挖掘,都需要有一门编程语言作为基础。因此,如果想学习大数据开发,掌握Java基础是必不可少的。
2、Hadoop生态系统;HDFS技术;HBASE技术;Sqoop使用流程;数据仓库工具箱;大数据Spark、Python语言离线分析等。
3、数学知识是数据分析师的基础知识,对于数据分析师来说,要理解一些与统计描述相关的内容,需要具备一定的公式计算能力,了解常用的统计模型算法。而对于数据挖掘工程师来说,各种算法也需要熟练运用,对数学的要求是最高的。
学大数据到一个专业的机构咨询一下,CDA数据认证中心就挺不错的。CDA认证,致力于打造全球数据人才考核行业标准,推动全球数人才发展。CDA认证考试委员会与持证人会员、企业会员(包括CDMS、Oracle、IBM、Big Data University、Pearson VUE、Meritdata、TalkingData、CDA INSTITUTE、Yonghong Tech、 法国布雷斯特商学院、CASICloud Deutschland GmbH等)以及行业知名第三方机构,共同合作并推进全球范围内的数据科学研究事业及人才发展,包括开发和整合国际数据科学领域的前沿技术及优质资源。
制定并完善数据科学行业人才标准与职业道德行为准则;编写和建立专业教材体系与题库;组织并实施命题审题、人才评定和考试服务;管理会员与提供行业咨询服务等事务。
对于零基础想要学习大数据的人,一开始入门可能不会太简单。学习大数据至少需要掌握一门计算机编程语言,计算机编程语言有很多,Java是目前使用的比较广泛的编程语言之一。所以,学习大数据,掌握好Java是必不可少的。
另外学习大数据必须要学习大数据中心常识,大数据技术体系很复杂,与物联网、移动互联网、人工智能、云核算等都有着精密的关系。所以,Hadoop生态体系;HDFS技术;HBASE技术;Sqoop运用流程;数据仓库东西HIVE;大数据离线剖析Spark、Python言语;数据实时剖析Storm等都是学习大数据需要了解和掌握的。
从事大数据工作,免不了要分析数据。如果从事数据剖析师,就需要了解一定的数学常识。需要有一定的公式核算能力,了解常用计算模型算法。而如果从事数据发掘工程师,就需要能够熟练运用各类算法,对数学的要求是很高的。
首先我们要了解Java语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。
大数据
Java :只要了解一些基础即可,做大数据不需要很深的Java 技术,学java SE 就相当于有学习大数据基础。
Linux:因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。
Hadoop:这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapReduce和YARN,HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapReduce是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。
Zookeeper:这是个万金油,安装Hadoop的HA的时候就会用到它,以后的Hbase也会用到它。它一般用来存放一些相互协作的信息,这些信息比较小一般不会超过1M,都是使用它的软件对它有依赖,对于我们个人来讲只需要把它安装正确,让它正常的run起来就可以了。
Mysql:我们学习完大数据的处理了,接下来学习学习小数据的处理工具mysql数据库,因为一会装hive的时候要用到,mysql需要掌握到什么层度那?你能在Linux上把它安装好,运行起来,会配置简单的权限,修改root的密码,创建数据库。这里主要的是学习SQL的语法,因为hive的语法和这个非常相似。
Sqoop:这个是用于把Mysql里的数据导入到Hadoop里的。当然你也可以不用这个,直接把Mysql数据表导出成文件再放到HDFS上也是一样的,当然生产环境中使用要注意Mysql的压力。
Hive:这个东西对于会SQL语法的来说就是神器,它能让你处理大数据变的很简单,不会再费劲的编写MapReduce程序。有的人说Pig那?它和Pig差不多掌握一个就可以了。
Oozie:既然学会Hive了,我相信你一定需要这个东西,它可以帮你管理你的Hive或者MapReduce、Spark脚本,还能检查你的程序是否执行正确,出错了给你发报警并能帮你重试程序,最重要的是还能帮你配置任务的依赖关系。我相信你一定会喜欢上它的,不然你看着那一大堆脚本,和密密麻麻的crond是不是有种想屎的感觉。
Hbase:这是Hadoop生态体系中的NOSQL数据库,他的数据是按照key和value的形式存储的并且key是唯一的,所以它能用来做数据的排重,它与MYSQL相比能存储的数据量大很多。所以他常被用于大数据处理完成之后的存储目的地。
Kafka:这是个比较好用的队列工具,队列是干吗的?排队买票你知道不?数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来,你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情。而不是你给的问题。当然我们也可以利用这个工具来做线上实时数据的入库或入HDFS,这时你可以与一个叫Flume的工具配合使用,它是专门用来提供对数据进行简单处理,并写到各种数据接受方(比如Kafka)的。
Spark:它是用来弥补基于MapReduce处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以操作它,因为它们都是用JVM的。