Redis 安装与Spark集成

安装篇

下载

官网查看你要的版本下载(本文使用3.2.3)

1
wget http://download.redis.io/releases/redis-3.2.3.tar.gz

解压安装

1
2
3
tar xvzf redis-3.2.3.tar.gz
cd redis-3.2.3
make

make执行完后会出现src目录,进入src可以看见有redis-server、redis-cli等命令。

启动与测试

执行redis-server即可看到redis启动页面。
另开一个命令行界面执行redis-cli即可进去测试。-h 参数指定IP -p 参数可指定端口。

设置服务

如果想以服务的方式去启动redis,可以按照以下步骤来。

  • 首先复制redis子目录utils中的redis_init_script到/etc/init.d下,同时易名为redis。

    1
    cp redis-3.2.3/utils/redis_init_script  /etc/rc.d/init.d/redis
  • 修改脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #!/bin/sh
    #
    # chkconfig: 2345 80 90
    # Simple Redis init.d script conceived to work on Linux systems
    # as it does use of the /proc filesystem.

    REDISPORT=6379
    EXEC=/usr/local/bin/redis-server
    CLIEXEC=/usr/local/bin/redis-cli

    PIDFILE=/var/run/redis_${REDISPORT}.pid
    CONF="/etc/redis/${REDISPORT}.conf"

    case "$1" in
    start)
    if [ -f $PIDFILE ]
    then
    echo "$PIDFILE exists, process is already running or crashed"
    else
    echo "Starting Redis server..."
    $EXEC $CONF &
    fi
    ;;
    stop)
    if [ ! -f $PIDFILE ]
    then
    echo "$PIDFILE does not exist, process is not running"
    else
    PID=$(cat $PIDFILE)
    echo "Stopping ..."
    $CLIEXEC -p $REDISPORT shutdown
    while [ -x /proc/${PID} ]
    do
    echo "Waiting for Redis to shutdown ..."
    sleep 1
    done
    echo "Redis stopped"
    fi
    ;;
    *)
    echo "Please use start or stop as first argument"
    ;;
    esac

修改有两处:1、第三行为新增;2、第21行结尾处添加&,后台启动。

  • 将redis子目录src下的redis-server和redis-cli复制到/usr/local/bin/文件(脚本中第8/9行指示)

    1
    2
    cp redis-3.2.3/src/redis-server  /usr/local/bin/
    cp redis-3.2.3/src/redis-cli /usr/local/bin/
  • /etc目录下创建redis目录并复制配置到此目录(脚本文中第12行)

    1
    2
    mkdir /etc/redis
    cp redis-3.2.3/redis.conf /etc/redis/6379.conf
  • 注册服务

    1
    chkconfig --add redis
  • 启动服务

    1
    service redis start

以服务的方式启动已成功,即可使用,若需要停止,请看下一个步骤。

  • 停止服务
    1
    service redis stop

如需对外开放服务,请修改配置文件中的bind,配置对外服务机器的IP。

集成篇

当前只介绍Spark写数据到redis
导入jar

1
2
3
4
5
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import org.apache.spark.{SparkContext, SparkConf}
import redis.clients.jedis.Jedis
val conf = new SparkConf().setAppName(this.getClass.getSimpleName)
val sc = new SparkContext(conf)

val rdd = ... //要写入redis的数据,RDD[Map[String,String]]
rdd.foreachPartition{iter =>
val redis = new Jedis("10.10.40.111",6379,400000)
val ppl = redis.pipelined()//使用pipeline 更高效的批处理
iter.foreach{f=>
ppl.hmset(f("mid"),f)//当前采用的是Map类型,以mid为Key
}
ppl.sync()
}

热评文章