tonglin0325的个人主页

parquet-tools使用

使用parquet-tools的方法有2种

1.在安装了CDH的机器上,会自动有parquet-tools命令

1
2
3
4
lintong@master:/opt/cloudera/parcels/CDH/bin$ ls| grep parquet-tools
parquet-tools
lintong@master:/opt/cloudera/parcels/CDH/bin$ parquet-tools

全文 >>

使用avro-protobuf将protobuf转换成avro

avro-protobuf项目提供ProtobufDatumReader类,可以用于从protobuf定义生成的java class中获得avro schema

使用方法如下:

1.引入依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-protobuf</artifactId>
<version>1.11.1</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.21.7</version>
</dependency>

2.定义protobuf schema,名为other.proto,schema如下

1
2
3
4
5
6
7
8
9
10
11
12
syntax = "proto3";
package com.acme;

message MyRecord {
string f1 = 1;
OtherRecord f2 = 2;
}

message OtherRecord {
int32 other_id = 1;
}

从使用protobuf定义生成java class

1
2
protoc -I=./ --java_out=./src/main/java ./src/main/proto/other.proto

3.编写java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.example.demo;

import com.acme.Other;

import java.util.*;
import org.apache.avro.protobuf.ProtobufDatumReader;

public class Demo {

public static void main(String[] args) throws Exception {

ProtobufDatumReader<Other.MyRecord> datumReader = new ProtobufDatumReader<Other.MyRecord>(Other.MyRecord.class);
System.out.println(datumReader.getSchema().toString(true));

}

}

输出如下

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
{
"type" : "record",
"name" : "MyRecord",
"namespace" : "com.acme.Other",
"fields" : [ {
"name" : "f1",
"type" : {
"type" : "string",
"avro.java.string" : "String"
},
"default" : ""
}, {
"name" : "f2",
"type" : [ "null", {
"type" : "record",
"name" : "OtherRecord",
"fields" : [ {
"name" : "other_id",
"type" : "int",
"default" : 0
} ]
} ],
"default" : null
} ]
}

注意:该工具在把protobuf schema转换成avro schema的时候,可能会出现不严谨的时候,比如在转换protobuf的uint32(0 到 2^32 -1)的时候,会统一转换成int(-2^31 ~ 2^31-1),这可能会产生问题,解决方法是使用confluent schema registry提供的工具,参考:使用confluent schema registry将protobuf schema转换成avro schema

Amazon EMR使用指南

Amazon EMR是Amazon提供的托管大数据套件,可选的组件包括Hadoop,Hive,Hue,Hbase,Presto,Spark等

使用Amazon EMR的好处是快速伸缩,版本升级也较为方便,如果配合S3存储,可以做到计算和存储分离,这样对于运维的压力会小一些,存储的稳定性交给S3,计算集群即使故障也可以很方便的进行重建,很适合小团队。缺点是界面友好程度远不如CDH和HDP。

如果使用Amazon EMR,最好阅读一下官方的2个文档:

1.Amazon EMR最佳实践

1
2
https://d0.awsstatic.com/whitepapers/aws-amazon-emr-best-practices.pdf

2.Amazon EMR迁移指南

1
https://d1.awsstatic.com/whitepapers/amazon_emr_migration_guide.pdf

1.创建EMR集群

在创建Amazon EMR集群的时候可以选择快速模式,界面如下

也可以选择高级模式

集群启动了之后,EMR大数据组件的安装目录在/usr/lib

1
2
3
4
5
6
7
8
[hadoop@ip-xxxxxxxx lib]$ ls
bigtop-groovy dracut hadoop hadoop-yarn java jvm ld-linux-aarch64.so.1 modules-load.d rpm systemd
bigtop-utils fontconfig hadoop-hdfs hbase java-1.5.0 jvm-commmon livy oozie sendmail tez
binfmt.d games hadoop-httpfs hive java-1.6.0 jvm-exports locale presto sendmail.postfix tmpfiles.d
cpp gcc hadoop-kms hive-hcatalog java-1.7.0 jvm-private lsb python2.7 spark udev
cups gems hadoop-lzo hudi java-1.8.0 kbd modprobe.d python3.7 sse2 yum-plugins
debug grub hadoop-mapreduce hue java-ext kernel modules ranger-kms sysctl.d zookeeper

EMR管理组件的安装目录在/usr/share/aws/emr

1
2
3
4
[hadoop@ip-xxxxxxxxxx emr]$ ls
cloudwatch-sink ddb emr-log-analytics-metrics goodies instance-controller node-provisioner s3select
command-runner emrfs emr-metrics-collector hadoop-state-pusher kinesis s3-dist-cp scripts

2.EMR CLI使用

查看集群的cluster id,参考:https://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-manage-view-clusters.html

1
2
aws emr list-clusters

根据cluster id查看集群配置

1
2
aws emr describe-cluster --cluster-id j-xxxxxx

3.EMR角色分布

全文 >>

Grafana学习笔记——filter语法

在使用grafana的filter的时候,其支持一些语法用于对指标进行过滤,如下

literal_or : tagv的过滤规则: 精确匹配多项迭代值,多项迭代值以’|’分隔,大小写敏感

iliteral_or: tagv的过滤规则: 精确匹配多项迭代值,多项迭代值以’|’分隔,忽略大小写

wildcard: tagv的过滤规则: 通配符匹配,大小写敏感

iwildcard: tagv的过滤规则: 通配符匹配,忽略大小写

regexp: tagv的过滤规则: 正则表达式匹配

not_literal_or: tagv的过滤规则: 通配符取非匹配,大小写敏感

not_iliteral_or: tagv的过滤规则: 通配符取非匹配,忽略大小写

全文 >>

Mongo的oplog和change stream

1.oplog

MongoDB副本集由一组服务器组成,这些服务器都具有相同数据的副本,复制可确保客户端对副本集主副本集上的文档所做的所有更改都正确应用于其他副本集的服务器,称为secondaries副本。

MongoDB 复制的工作原理是让主节点在其操作日志(或操作日志)中记录更改,然后每个从节点读取主节点的操作日志并将所有操作按顺序应用到它们自己的文档中。

将新服务器添加到副本集时,该服务器首先对主服务器上的所有数据库和集合执行snapshot,然后读取主服务器的

全文 >>

广告系统——第三方广告平台

罗列了一下第三方广告平台产品,按照广告的流程,分成4类:

DSP(广告需求方平台,广告主在上面进行投放)

ADX(广告交易平台,负责广告交易和竞价)

SSP(媒体供应方平台,媒体可以在上面售卖网站app的曝光来获得盈利)

DMP(为广告投放投放提供人群画像进行广告的受众定向,并进行人群标签画像的管理)

1.国内

1.BAT

2.字节快手

3.手机厂商

4.其他渠道

1.微博(DSP投放)

1
2
https://tui.weibo.com/home

微博的广告产品有超级粉丝通粉丝头条WAX(程序化广告交易平台)

360-搜索推广

360-移动推广

360-展示广告

知乎效果营销

爱奇艺-奇麟营销

B站-必选广告

sigmob

喜马拉雅-声量

快看-后羿智投

网易-有道智选

小红书-聚光平台

网易-易效 (网易新闻)

美柚-女人通

ASA-苹果搜索广告

参考:神策渠道配置详情

2.国外

1.Google系 AdMob(DSP投放+SSP变现)

官网:https://admob.google.com/home/

主要是Google面向移动端的广告平台,不仅是一个移动广告联盟,而且还是一个获利平台,可帮助移动开发者利用广告创收、获取富有实用价值的分析洞见以及发展应用业务。作为一个广告联盟,AdMob 可协助您在全球范围内投放广告,从而让您利用自己的移动应用变现。作为一个变现平台,AdMob 可以协助与多个广告联盟合作的开发者最大限度地提升通过所有第三方广告联盟合作伙伴获得的广告收入。

2.Google系 GAM(Google Ad Manager)(DSP投放)

官网:https://admanager.google.com/home/

是一款广告管理平台,适合拥有大量直销业务的大型发布商使用。Ad Manager 可提供精细控制,并支持多个广告交易平台和广告联盟,包括 AdSense、Ad Exchange、第三方广告联盟和第三方广告交易平台等。

google ad manager旨在帮助媒体公司和发布商管理和优化他们的广告库存。它提供广告投放、定价、报告和监控功能,以及与广告交易相关的工具。

3.Google系 AdSense(SSP变现)

官网:https://www.google.com/adsense

AdSense 是一个面向网站所有者的广告网络,它允许网站发布商在他们的网站上展示广告,并通过用户对这些广告的点击或查看来获得收入。AdSense使用自动化技术根据网站内容和访问者兴趣匹配广告,从而提供更相关的广告体验。

比如我们可以利用AdSense给博客添加广告,参考:

全文 >>