- redis快速上手
- 简介
redis是一个基于内存的 nosql框架(数据库)。
redis中也是存储key-value形式的数据
Redis存储的数据类型有五种:字符(string)、散列(hash)、列表(list)、集合(set)、有序集合(sorted set)
这里的5种数据结构,指的key-value中的value。
-
- 安装
- 解压redis压缩包
[root@hdp-04 ~]# tar -zxvf redis-3.2.8.tar.gz -C apps/
- 编译解压缩之后的redis文件
[root@hdp-04 ~]# cd apps/redis-3.2.8
[root@hdp-04 redis-3.2.8]# make
安装命令:
[root@hdp-03 redis-3.2.8]# yum -y install gcc gcc-c++
如果报错
# make MALLOC=libc
安装: 指定安装目录
[root@hdp-03 redis-3.2.8]# make install PREFIX=/usr/local/redis
-
- 启动:
- 前台启动:
- 启动:
-
-
- 后台启动
-
以守护进程存在
查看进程的状态:
拷贝redis.conf
[root@hdp-03 redis-3.2.8]# cp redis.conf /usr/local/redis/bin/
修改bin/redis.conf配置文件:
bind 192.168.8.13 127.0.0.1 daemonize yes |
新的启动命令,必须加上 配置后的redis.conf文件。
[root@hdp-03 bin]# ./redis-server redis.conf
测试:
[root@hdp-03 bin]# ./redis-cli 127.0.0.1:6379> ping PONG |
-
- redis的客户端
- 自带的客户端 redis-cli
- java客户端
- redis的客户端
<!-- 导入redis的客户端API jedis--> |
基本的命令:
keys * 查看所有的keys数据
flushdb : 禁用
127.0.0.1:6379> keys * 1) 127.0.0.1:6379> flushdb |
连接池的工具类:
object JedisUtils {
|
-
- redis的数据结构
具体的命令,参考《Redis.docx》
redis可视化工具:
下载路径:https://redisdesktop.com/download
安装:
直接双击,一路next即可。
安装之后,打开后的界面:
配置redis:
- 基于redis做checkpoint
使用哪一种数据结构?
wordcount
(word,cnts)
应该选择哪一种数据结构,存储wordcount的历史数据。
键: streamingwc values
hash
代码实现:
val conf = new SparkConf() |
- sparkStreaming数据源,接收器
输入 DStreams 是代表输入数据是从流的源数据(streaming sources)接收到的流的 DStream. 在 一个入门示例 中, lines 是一个 input DStream, 因为它代表着从 netcat 服务器接收到的数据的流. 每一个 input DStream(除了 file stream 之外, 会在本章的后面来讨论)与一个 Receiver (Scala doc,Java doc) 对象关联, 它从 source(数据源)中获取数据,并且存储它到 Sparl 的内存中用于处理.
Spark Streaming 提供了两种内置的 streaming source(流的数据源).
- Basic sources(基础的数据源): 在 StreamingContext API 中直接可以使用的数据源. 例如: file systems 和 socket connections.
- Advanced sources(高级的数据源): 像 Kafka, Flume, Kinesis, 等等这样的数据源. 可以通过额外的 utility classes 来使用. 像在 依赖 中讨论的一样, 这些都需要额外的外部依赖.
在本节的后边,我们将讨论每种类别中的现有的一些数据源.
请注意, 如果你想要在你的流处理程序中并行的接收多个数据流, 你可以创建多个 input DStreams(在 性能优化 部分进一步讨论). 这将创建同时接收多个数据流的多个 receivers(接收器). 但需要注意,一个 Spark 的 worker/executor 是一个长期运行的任务(task),因此它将占用分配给 Spark Streaming 的应用程序的所有核中的一个核(core). 因此,要记住,一个 Spark Streaming 应用需要分配足够的核(core)(或线程(threads),如果本地运行的话)来处理所接收的数据,以及来运行接收器(receiver(s)).
要记住的几点
- 当在本地运行一个 Spark Streaming 程序的时候,不要使用 “local” 或者 “local[1]” 作为 master 的 URL. 这两种方法中的任何一个都意味着只有一个线程将用于运行本地任务. 如果你正在使用一个基于接收器(receiver)的输入离散流(input DStream)(例如, sockets ,Kafka ,Flume 等),则该单独的线程将用于运行接收器(receiver),而没有留下任何的线程用于处理接收到的数据. 因此,在本地运行时,总是用 “local[n]” 作为 master URL ,其中的 n > 运行接收器的数量(查看 Spark 属性 来了解怎样去设置 master 的信息).
- 将逻辑扩展到集群上去运行,分配给 Spark Streaming 应用程序的内核(core)的内核数必须大于接收器(receiver)的数量。否则系统将接收数据,但是无法处理它.
-
-
- Receiver Reliability(接收器的可靠性)
-
可以有两种基于他们的 reliability可靠性 的数据源. 数据源(如 Kafka 和 Flume)允许传输的数据被确认. 如果系统从这些可靠的数据来源接收数据,并且被确认(acknowledges)正确地接收数据,它可以确保数据不会因为任何类型的失败而导致数据丢失. 这样就出现了 2 种接收器(receivers):
- Reliable Receiver(可靠的接收器) - 当数据被接收并存储在 Spark 中并带有备份副本时,一个可靠的接收器(reliable receiver)正确地发送确认(acknowledgment)给一个可靠的数据源(reliable source).
- Unreliable Receiver(不可靠的接收器) - 一个不可靠的接收器( unreliable receiver )不发送确认(acknowledgment)到数据源。这可以用于不支持确认的数据源,或者甚至是可靠的数据源当你不想或者不需要进行复杂的确认的时候.
-
- 文本数据源
Spark Streaming 将监控dataDirectory 目录并且该目录中任何新建的文件 (写在嵌套目录中的文件是不支持的). 注意
- 文件必须具有相同的数据格式.
- 文件必须被创建在 dataDirectory 目录中, 通过 atomically(原子的) moving(移动) 或 renaming(重命名) 它们到数据目录.
- 一旦移动,这些文件必须不能再更改,因此如果文件被连续地追加,新的数据将不会被读取.
对于简单的文本文件,还有一个更加简单的方法 streamingContext.textFileStream(dataDirectory). 并且文件流(file streams)不需要运行一个接收器(receiver),因此,不需要分配内核(core)。
val conf = new SparkConf() |
- sparkStreaming中的时间调度
- 设置的批次的时间。 2s
使用Spark自带的Web UI就能满足大部分的监控需求。对于Spark Streaming来说,以下两个度量指标尤为重要(在Batch Processing Statistics标签下):新版本中(1.4+)新增的可视化界面,可以查看两个延迟
Scheduling Delay : 调度延迟时间
每一个批次的业务,会等待多长时间才能被执行到。
Processing Time: 任务运行时间
没一个批次的数据,执行消耗的时间。
Total Delay:
总的延迟时间
Total Delay = Scheduling Delay + Processing Time
如果前端一直产生批次任务,但是启动的任务都没有被处理完。
输入的数据速率:
数据的运行时间, 5条数据, 2s
尽可能让自己的每个批次的任务运行时间,在批次的调度时间之内完成。
合理设置任务的batch时间。
快速产生大量数据的命令:
[root@hdp-03 ~]# nc -lk 9999 < /dev/urandom
- kafka
- 简介:
Apache Kafka是分布式发布-订阅消息系统(消息中间件)。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。
MQ: message queue
传统消息中间件服务RabbitMQ、Apache ActiveMQ(免费)等。IBMMQ (收费)
Apache Kafka与传统消息系统相比,有以下不同:
- 它是分布式系统,易于向外扩展;
- 它同时为发布和订阅提供高吞吐量;
- 它支持多订阅者,当失败时能自动平衡消费者;
- 它将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。
-
- kafka中的术语
术语 | 解释 |
Broker | Kafka集群包含一个或多个服务器,这种服务器被称为broker |
Topic
| 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处) |
Partition | Partition是物理上的概念,每个Topic包含一个或多个Partition. |
Producer | 负责发布消息到Kafka broker |
Consumer | 消息消费者,向Kafka broker读取消息的客户端 |
Consumer Group | 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group) |
replica | partition 的副本,保障 partition 的高可用 |
leader | replica 中的一个角色, producer 和 consumer 只跟 leader 交互 |
follower | replica 中的一个角色,从 leader 中复制数据 |
controller | Kafka 集群中的其中一个服务器,用来进行 leader election 以及各种 failover |
-
- kafka集群部署:
http://kafka.apache.org/downloads
给定3台机器:hdp-01, hdp-02,hdp-03
[root@hdp-01 ~]# tar -zxvf kafka_2.11-0.10.2.1.tgz -C apps/
修改conf/server.properties配置文件:
broker.id=0 listeners=PLAINTEXT://hdp-01:9092 log.dirs=/root/kafkadata num.partitions=3 zookeeper.connect=hdp-01:2181,hdp-02:2181,hdp-03:2181 |
kafka中的消息保留时长:
分发安装包:
cd /root/apps
[root@hdp-01 apps]# for i in 2 3 ;do scp -r kafka_2.11-0.10.2.1 hdp-0$i:$PWD ;done
分发完成之后,必须修改其他机器上的配置:
[root@hdp-02 config]# cat server.properties | grep -v "^#"
kafka安装完成
-
- kafka的集群启停:
在bin目录下的启动命令:
修改环境变量:
for i in 2 3;do scp /etc/profile hdp-0$i:/etc/ ;done
启动kafka集群的命令:
[root@hdp-01 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
想要使用kafka,必须先把zookeeper启动。否则报错如下:
启动所有的zookeeper:
/root/apps/zookeeper-3.4.6/bin/zkServer.sh start
重新启动kafka集群:
[root@hdp-03 ~]# cd apps/kafka_2.11-0.10.2.1/bin/
[root@hdp-03 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@hdp-01 ~]# kafka-server-start.sh -daemon /root/apps/kafka_2.11-0.10.2.1/config/server.properties
修改kafka-server-stop.sh脚本。
-
- kafka客户端命令操作:
-
-
- 主题相关的操作:
-
在server.properties中,把 下面的配置的文件设置为true,才能成功的删除主题。
delete.topic.enable=true
副本的数量,必须不能大于broker的数量。但是分区的数量,不受broker数量的限制。
正确创建主题:
参数都是必须被设置的。
[root@hdp-01 bin]# kafka-topics.sh --create --topic "helloTopic" --zookeeper hdp-01:2181,hdp-02:2181,hdp-03:2181 --partitions 2 --replication-factor 3 Created topic "helloTopic". |
查看主题列表: (所有的主题)
[root@hdp-01 bin]# kafka-topics.sh --list --zookeeper hdp-01:2181,hdp-02:2181,hdp-03:2181 helloTopic
查看一个主题的详情:
[root@hdp-01 bin]# kafka-topics.sh --describe --topic helloTopic --zookeeper hdp-01:2181,hdp-02:2181,hdp-03:2181 |
分区的编号
Leader: 0 2 表示brokerID。
Replicas:
Isr: in sync replicas 活着的副本。
-
-
- 生产者和消费者都有命令
-
生产者:
生产者在生产数据的时候,默认会平均写到不同的分区中去。
消费者:
kafka-console-consumer.sh --bootstrap-server hdp-01:9092,hdp-02:9092 --topic helloTopic
kafka-console-consumer.sh --bootstrap-server hdp-01:9092,hdp-02:9092 --topic helloTopic --from-beginning
该参数指定从头开始消费。
消费的数据,分区内的数据,是有序的,但是分区间的数据,是无序的。
可以通过 –partition 来指定消费哪一个分区。
[root@hdp-02 ~]# kafka-console-consumer.sh --bootstrap-server hdp-01:9092,hdp-02:9092 --topelloTopic --from-beginning --partition 1
如果没有指定groupid,默认,那么每次都生成一个新的组。
消费时,指定组id
[root@hdp-02 ~]# kafka-console-consumer.sh --bootstrap-server hdp-01:9092,hdp-02:9092 --topelloTopic --from-beginning --consumer-property group.id=abc
偏移量 ,offSet
客户端的API:
- 今日总结:
redis 环境搭建 redis的命令操作
spark streaming 利用redis checkpoint
kafka:
- 理解好几个角色。
- kafka的集群必须搭建 --- zookeeper 时间同步
- kafka的客户端API
- kakfa JAVA客户端 代码