查看更多Apache Pig的教程请点击这里。
用Apache Pig处理大数据时,经常会有这种需求:把输入数据按指定的字段group,并且每个group内只输出时间最新的一条记录。
有一个JAVA写的map-reduce job,mapper输出的key、value类型分别为Text、NullWritable,所以reducer应该像下面这样写:
static class QuerySegmentResultFromKVReducer extends Reducer<Text, NullWritable, NullWritable, NullWritable> {
@Override
protected void setup(Reducer.Context context) throws IOException, InterruptedException {
}
@Override
protected void cleanup(Reducer.Context context) throws IOException, InterruptedException {
}
@Override
protected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
//TODO:
}
}
在这里,reducer输出的key、value类型都是NullWritable,我们不用关心,这不是本文的关注点。
无论是JAVA M-R job还是Pig M-R job发生Java Heap Space错误,一般情况下,我们要通过定位输入数据里的异常情况再想办法解决,例如,你在程序中对某个key做了GROUP操作,但输入数据中可能该key有大量记录,这就有可能导致job OOM。
这个问题取决于数据的具体情况,以及程序实现逻辑,所以这里就不提了。
本文要说的是:有时候程序实现/输入数据的问题“不是特别严重”,我们可以通过调整M-R job的内存参数来解决。
Hadoop目录的配额是指为了限制一个HDFS文件夹中所包含的数据块和名称空间元素(如子文件夹和文件)的数量而设置的最大值。简单来说,就是对一个文件夹中可存储数据的上限进行管理和控制,以便于维护整个系统的健康和性能。
通过设置适当的配额,管理员可以确保每个目录不会超出其可承受的容量范围,防止集群资源被长时间占用或滥用。同时也可以通过监视使用情况来优化系统性能并减少故障风险。
static class MyHandler implements HttpHandler {
@Override
public void handle(HttpExchange httpExchange) throws IOException {
String response = "test"; // 返回固定内容
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
Charles Proxy是一个HTTP代理/HTTP监视器/反向代理,它使开发人员能够查看其计算机和Internet之间的所有HTTP和SSL/HTTPS流量。这包括请求、响应和HTTP headers(其中包含cookie和缓存信息)。
查看Charles Proxy文章合集,请点击这里。
➤ 使用场景
当我们需要分析 iOS App 发送接收的数据时,需要对App进行抓包。可以在 iOS 上安装抓包工具来完成这个工作,更常见的做法是在PC上安装Charles Proxy之类的软件,再对 iOS 进行一定的配置让这二者关联起来,从而可以在PC上完成抓包工作。毕竟在PC大屏上进行数据分析比触屏的 iOS 设备更为方便。
其基本原理是:Charles Proxy运行起来后,会在PC上启动一个代理服务器,在 iOS 设备上配置通过这个代理服务器来访问网络,那么iOS上的HTTP流量都将走过Charles Proxy,自然也就被Charles Proxy截获了数据。另外,对于HTTPS的加密流量,Charles Proxy还提供了一个SSL证书,把这个证书安装到 iOS 设备上,就可以让 iOS App 发送的HTTPS流量被Charles Proxy 解密,我们就能分析App发送的数据明文。
这是一篇很水的文章,纯粹为了记录一些代码。
Google HTTP Client Library for Java 和 OkHttpClient 是两个很流行的http client JAVA库。
下面来看看用它们分别怎样通过POST请求把JSON数据发送到服务器。
JDK版本:1.8.0_221