1.单节点redis
kk.sh
redis-cli -h 192.168.0.1 -p 6379 <<EOF
DEL kk_redis
exit
EOF
hive -f /home/kk/kk_redis.sql | grep -v "^WARN:" > /home/kk/kk_redis.txt
unix2dos /home/kk/kk_redis.txt
cat /home/kk/kk_redis.txt | grep -v "^NULL:" | redis-cli -h 192.168.0.1 -p 6379 --pipe
kk_redis.sql 核心生成redis协议的文件
set mapreduce.job.queuename=root.kk;
SELECT CONCAT(
"*4\r\n",
'$4\r\n',
'HSET\r\n',
'$', LENGTH('kk_redis'), '\r\n',
'kk_redis', '\r\n',
'$', LENGTH(key), '\r\n',
key, '\r\n',
'$', LENGTH(value), '\r\n',
value, '\r\n'
)
FROM (
SELECT id as key ,concat('{','"name":"',name,'",','"age":"',age,'"}') as value FROM kk_redis
) AS t;
2.集群方式
本身是不支持 redis-cli -c 模式导入数据的,但入数可以用主节点方式 不过不确定那个主节点可用。
如果方式可轻松玩起来
取能用的节点,$1为传入的 key,输出为 能用的节点。
gethost.sh
host=''
a=`redis-cli -h 192.168.0.1 -p 7000 <<EOF
DEL $1
exit
EOF`
result=$(echo $a | grep "MOVED")
if [[ -z "$result" ]];
then
host='redis-cli -h 192.168.0.1 -p 7000'
fi
b=`redis-cli -h 192.168.0.2 -p 7001 <<EOF
DEL $1
exit
EOF`
result=$(echo $b | grep "MOVED")
if [[ -z $result ]];
then
host='redis-cli -h 192.168.0.2 -p 7001'
fi
c=`redis-cli -h 192.168.0.3 -p 7002 <<EOF
DEL $1
exit
EOF`
result=$(echo $c | grep "MOVED")
if [[ -z $result ]];
then
host='redis-cli -h 192.168.0.3 -p 7002'
fi
echo $host
入数据 shell :
#!/bin/bash
a=`sh /home/kk/gethost.sh kk_redis`
hive -f /home/kk/kk_redis.sql | grep -v "^WARN:" > /home/kk/kk_redis.txt
unix2dos /home/kk/kk_redis.txt
cat /home/kk/kk_redis.txt | grep -v "^NULL:" | $a --pipe
echo 'import data to product culster '$a' success'
kk_redis.sql 如上。
如上测试 单节点和集群模式都 分钟内入数百w级,相对于java api 快的太多。当然能支持hive,其他的支持sql的组件一样可以适用,如mysql,oracle,impala,kylin ==。