0%

开源项目学习记录

  1. Twemproxy
    -简介:应用于redis代理服务,做客户端与服务端实例代理,数据自动分片,在redis cluster不成熟前被业界大量使用。
    -地址:https://github.com/twitter/twemproxy
  2. divlote collector
    -简介:用来收集web用户点击行为数据,并将数据发送到kafka,hadoop中,高效简单便捷。
    -地址:http://divolte.io/
  3. cachecloud
    -简介: CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功能、减少运维成本和误操作,提高机器的利用率,提供灵活的伸缩性,提供方便的接入客户端。
    -地址:https://github.com/sohutv/cachecloud
  4. ElasticSearch+Kibanna+Packetbeat
    -简介:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎。Kibanna是针对ElasticSearch一个界面UI。Packetbeat是监控网络数据包一个工具,分布式wireshar。
    -地址:https://www.elastic.co/downloads/beats

一、注解解释

  1. @controller 控制器(注入服务)
  2. @service 服务(注入dao)
  3. @repository dao(实现dao访问)
  4. @component (把普通pojo实例化到spring容器中,相当于配置文件中的

@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。
下面写这个是引入component的扫描组件

1
<context:component-scan base-package=”com.mmnc”>   

其中base-package为需要扫描的包(含所有子包)

  • @Service用于标注业务层组件
  • @Controller用于标注控制层组件(如struts中的action)
  • @Repository用于标注数据访问组件,即DAO组件.
  • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

Shell学习

1.流程控制

  • for
    使用格式如下:
    1
    2
    3
    4
    for loop in 1 2 3 4 5
    do
    echo "The value is: $loop"
    done
    其中需要循环的数据用空格分离开
  • while
    1
    2
    3
    4
    5
    6
    int=1
    while(( $int<=5 ))
    do
    echo $int
    let "int++"
    done
  • if/else
    以下实例判断两个变量是否相等:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    a=10
    b=20
    if [ $a == $b ]
    then
    echo "a 等于 b"
    elif [ $a -gt $b ]
    then
    echo "a 大于 b"
    elif [ $a -lt $b ]
    then
    echo "a 小于 b"
    else
    echo "没有符合的条件"
    fi

2.数组

  • 数组定义
    1
    array_name=(value1 ... valuen)
    数组用括号来表示,元素用”空格”符号分割开
  • 读取数组
    1
    ${array_name[index]}
  • 数组长度
    1
    ${#my_array[*]}
  • 遍历数组
    1
    2
    3
    4
    5
    arr=(1 2 3 4 5)
    for var in ${arr[@]};
    do
    echo $var
    done
    循环输出
    1
    2
    3
    4
    5
    for j in $(seq 7000 7005)
    do
    echo $j
    done

3.函数

  • 函数传参
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #/bin/sh
    function addslots()
    {
    for i in `seq $2 $3`;do
    src/redis-cli -p $1 cluster addslots $i
    done
    }
    case $1 in
    addslots)
    echo "add slots ..."
    addslots $2 $3 $4;
    ;;
    *)
    echo "Usage: inetpanel [addslots]"
    ;;
    esac

4.$0,$?,$!等的特殊用法

变量 说明
$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如”$*”用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
$@ 所有参数列表。如”$@”用「”」括起来的情况、以”$1” “$2” … “$n” 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…

5.变量判断

  • -n
    可以使用-n来判断一个string不是NULL值
    1
    2
    3
    if [ ! -f "/bin/redis-cli" ]; then 
    ln -s $LOGSTASH_HOME/bin/redis-cli /bin/redis-cli
    fi
  • -f
    可以使用-f来判断一个文件是否存在
    1
    2
    3
    4
    5
    PID=`cat logs/$confName.pid`
    if [ -n "$PID" ];then
    kill -9 $PID
    rm -f logs/$confName.pid
    fi
  • 更多
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [ -f "$file" ] 判断$file是否是一个文件

    [ $a -lt 3 ] 判断$a的值是否小于3,同样-gt和-le分别表示大于或小于等于

    [ -x "$file" ] 判断$file是否存在且有可执行权限,同样-r测试文件可读性

    [ -n "$a" ] 判断变量$a是否有值(空),测试空串用-z

    [ -n $a ] 判断变量$a是否为null

    [ "$a" = "$b" ] 判断$a和$b的取值是否相等

    [ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立

6.写文件

  • 两种方式

两种方式:>重写>>追加

  • 写log
    1
    2
    3
    4
    5
    6
    7
    shell上:
    0表示标准输入
    1表示标准输出
    2表示标准错误输出
    > 默认为标准输出重定向,与 1> 相同
    2>&1 意思是把 标准错误输出 重定向到 标准输出.
    &>file 意思是把 标准输出 和 标准错误输出 都重定向到文件file中

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase访问接口如下:

  1. Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据
  2. HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用
  3. Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据
  4. REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制
  5. Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计
  6. Hive,当前Hive的Release版本尚没有加入对HBase的支持,在Hive 0.7.0中支持HBase,可以使用类似SQL语言来访问HBase
    本文针对HBase Shell,做一个详细讲解。
阅读全文 »

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。

阅读全文 »

Info信息


以下信息是在redis-cli中执行info命令,可能和redis cluster版本有点不同的地方,仅此作为参考。

阅读全文 »

内存淘汰


获取内存淘汰配置策略

1
127.0.0.1:6379>config get maxmemory-policy
  • volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。
  • volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。
  • volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。
  • allkeys-lru:使用LRU算法从所有数据集合中淘汰数据。
  • allkeys-random:从数据集合中任意选择数据淘汰
  • no-enviction:禁止淘汰数据。

延时追踪及慢查询


Redis的延迟数据是无法从info信息中获取的。倘若想要查看延迟时间,可以用 Redis-cli工具加–latency参数运行,如:

1
Redis-cli --latency -h 127.0.0.1 -p 6379

结果为查询ID、发生时间、运行时长和原命令 默认10毫秒,默认只保留最后的128条。单线程的模型下,一个请求占掉10毫秒是件大事情,注意设置和显示的单位为微秒,注意这个时间是不包含网络延迟的。

1
127.0.0.1:6379>slowlog get

查看aof是否影响延迟,在info Stats中查看,数字代表有多少次fork延迟操作

1
2
latest_fork_usec:1724##单位微妙

查看最近一次fork延迟耗时

1
aof_delayed_fsync:0###被延迟的 fsync 调用数量

主从切换

在运维过程中,整体断电后,集群重启后,master与slave节点分布可能会出现变化,为了保证集群master分布均匀,可使用命令主动切换master.
在需要提升为master的节点执行以下命令

1
127.0.0.1:6379>cluster failover

指定slave数量

可在redis.conf中配置

1
cluster-migration-barrier 1

该参数指定slave最小数量为1,当前节点无法满足的话,会从别的节点漂移一个作为master的slave

Hbase学习

Hbase shell操作

一、建表

1.新建不带namespace表

1
create 'testTable','t1','t2'

2.新建带namespace表

  • 首先建一个namespace
    1
    create_namespace 'truman'
  • 其次再新建表
    1
    create_namespace 'truman:test','t1','t2'
    备注:t1,t2为column family
    1
    2
    create'reason:user_test','bs',{NUMREGIONS=>2,SPLITALGO=>'HexStringSplit'}

二、查表

  • 列出所有表
    1
    list
  • 浏览某个表
    1
    scan 'testTable'

三、数据操作

  • 增加数据
    1
    2
    3
    put 'testTable','row1','t1:name','value1'
    put 'testTable','row2','t1:name','value2'
    put 'testTable','row3','t1:name','value3'
  • 获取数据
    1
    get 'testTable','row1'
  • 删除数据
    1

其他

待完善

参考

1.https://hbase.apache.org/book.html