Python
Flask, Python, SqlAlhemy
Word Count: 297(words)
Read Count: 1(minutes)
Python
Celery, Flask, Python, SQLAlchemy
Word Count: 120(words)
Read Count: 1(minutes)
Python
Flask, Python
Word Count: 293(words)
Read Count: 1(minutes)
Python
Celery, Flask, Python
Word Count: 499(words)
Read Count: 2(minutes)
HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位。
HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有以下几种方式:
- 通过get方式,指定rowkey获取唯一一条记录
- 通过scan方式,设置startRow和stopRow参数进行范围匹配
- 全表扫描,即直接扫描整张表中所有行记录
rowkey长度原则
BigData
Hbase, 性能优化
Word Count: 1.6k(words)
Read Count: 5(minutes)
选择机制中的概念
服务器ID
比如有三台服务器,编号分别是1,2,3。
编号越大在选择算法中的权重越大。
数据ID(或事务ID)
服务器中存放的最大数据ID.
值越大说明数据越新,在选举算法中数据越新权重越大。
逻辑时钟
BigData
zookeeper, 性能优化, 集群
Word Count: 1.2k(words)
Read Count: 4(minutes)
之前有翻译过一系列Grafana配置Graphite的文章。传送门
在用过Prometheus之后,发现Prometheus配合Grafana也是天造的一对,以设的一双。
对于服务器基础指标监控而言,Prometheus通过node_exporter来收集数据做为数据源,提供了各种与硬件和内核相关的详细指标。
下面分享一个我正在使用的Ansible Playbook,用于批量部署node_exporter到多个目标主机。
DevOps
Ansible, Monitor, Playbook, Prometheus
Word Count: 362(words)
Read Count: 1(minutes)
首先,我们对比一下foreachPartition
和foreach
两个方法的实现,有什么不同的地方:
1 2 3 4 5 6 7 8 9
| def foreach(f: T => Unit): Unit = withScope { val cleanF = sc.clean(f) sc.runJob(this, (iter: Iterator[T]) => iter.foreach(cleanF)) }
def foreachPartition(f: Iterator[T] => Unit): Unit = withScope { val cleanF = sc.clean(f) sc.runJob(this, (iter: Iterator[T]) => cleanF(iter)) }
|
BigData
Spark, 性能优化
Word Count: 851(words)
Read Count: 3(minutes)
DevOps
Flume, Kafka
Word Count: 535(words)
Read Count: 1(minutes)
在处理第11行读文件时,由于数据文件出现的不规律,在指定日期内可能存在日志文件不存在的情况,这里需要处理下异常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| def readLog(sc: SparkContext, startDate: String, endDate: String, logNames: List[String]): RDD[String] = { val dateLst = DateUtils.getDateListBetweenTwoDate(startDate, endDate)
var logRdd = sc.makeRDD(List[String]()) for (date <- dateLst) { val year = date.substring(0, 4) val month = date.substring(4, 6) val day = date.substring(6, 8) for (logName <- logNames) { val logRdd = logRdd.union( try {sc.textFile(s"cosn://fuge/mid-data/fuge/ssp/bid-log/$year/$month/$day/${logName}*") .map(x => x.split("\\|", -1)) .filter(x => x.length >= 2 && (x(1).trim == "6" || x(1).trim == "0")).map(_.toString) } catch { case _: Exception => sc.makeRDD(List[String]()) } ) } } logRdd }
|
Coding
Exception, Scala
Word Count: 312(words)
Read Count: 1(minutes)