[原创] JAVA map-reduce job中,reduce()方法漏写 @Override 注解引起的问题

有一个JAVA写的map-reduce job,mapper输出的key、value类型分别为Text、NullWritable,所以reducer应该像下面这样写:

static class QuerySegmentResultFromKVReducer extends Reducer<TextNullWritableNullWritableNullWritable{

  @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,我们不用关心,这不是本文的关注点。

阅读更多

[原创] 解决Map-Reduce job OOM(Java Heap Space)错误的一个方法:调整内存参数

无论是JAVA M-R job还是Pig M-R job发生Java Heap Space错误,一般情况下,我们要通过定位输入数据里的异常情况再想办法解决,例如,你在程序中对某个key做了GROUP操作,但输入数据中可能该key有大量记录,这就有可能导致job OOM。
这个问题取决于数据的具体情况,以及程序实现逻辑,所以这里就不提了。
本文要说的是:有时候程序实现/输入数据的问题“不是特别严重”,我们可以通过调整M-R job的内存参数来解决。

阅读更多

如何查看指定的Hadoop(HDFS)目录的配额

Hadoop目录的配额是指为了限制一个HDFS文件夹中所包含的数据块和名称空间元素(如子文件夹和文件)的数量而设置的最大值。简单来说,就是对一个文件夹中可存储数据的上限进行管理和控制,以便于维护整个系统的健康和性能。

通过设置适当的配额,管理员可以确保每个目录不会超出其可承受的容量范围,防止集群资源被长时间占用或滥用。同时也可以通过监视使用情况来优化系统性能并减少故障风险。

阅读更多

[原创] 用JAVA读取本地的TFRecord文件

TFRecord是一种用于TensorFlow的二进制数据格式,它可以更高效地存储和读取大规模数据集。TFRecord文件包含了一系列记录(record),每个记录可以是一个张量(tensor)或者一个序列(sequence)。
与文本文件不同,TFRecord文件被编码成二进制格式,这使得它们更易于在网络上传输和存储。同时,TFRecord也允许我们将大型数据集分割成多个部分,并且可以有效地并行读取和处理这些部分。
在TensorFlow中,我们通常使用TFRecord文件来存储和加载模型的训练数据、验证数据、测试数据等。创建TFRecord文件需要经过一定的序列化操作,但这些操作很容易实现,因为TensorFlow提供了相应的API支持。

阅读更多

[原创] 为Azkaban job添加重试配置

Azkaban是一款开源的workflow调度系统,它可以帮助用户完成任务的流程化自动化调度。Azkaban提供了一个易于使用的Web用户界面来创建、监视和执行工作流,并支持高级功能,如参数化配置、模块重用等。此外,Azkaban还提供了可扩展的插件接口,使其能够与其他系统进行集成。

阅读更多

[原创] JAVA sun HttpServer在handler中返回含中文的response应该怎么处理

在JAVA中,使用sun HttpServer实现一个web server的时候,使用了下面的hander类来处理请求:
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();
  }
}

[原创] "秘塔写作猫",想说爱你不容易

秘塔写作猫”是一款基于 AI 的中文、英文纠错工具,它可以帮助“不会写文章”的你从0开始撰写文章大纲甚至全文。它是最近比较流行的一款AIGC产品。

随着AI技术不断迭代,作为除UGC、PGC以外的一种新型生产方式,AIGC(AI generated content,人工智能创造内容)已从概念走向更多落地,它的字面意思就是AI生产内容。AI写诗、AI作曲、AI绘画、AI换脸等等。

比如说,老板让你在很短的时间内迅速给出一份营销方案,你可能绞尽脑汁也凑不出那么多字,这个时候就可以用“秘塔写作猫”来完成这个任务。

阅读更多

[原创] ChatGPT的出现,让我第一次觉得机器有希望替代Cambly


Cambly
是一个和真人老外(native English speakers)视频聊天练习英语口语的平台。
ChatGPT是由OpenAI于2022年11月推出的一个人工智能聊天机器人程序,该程序使用基于GPT-3.5架构的大型语言模型并通过强化学习进行训练。
这俩货有什么关系?听我慢慢道来。

阅读更多

[原创] 用Charles Proxy抓包iOS App的数据

charles proxy

查看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发送的数据明文。

阅读更多

[原创] Apache Pig如何按数据分组保存到不同的子目录中(MultiStorage)

查看更多Apache Pig的教程请点击这里

用Apache Pig进行数据处理的时候,我们通常会在最后把处理结果保存到一个HDFS目录下:

STORE result INTO '/my_output_dir';

这是最常见的情况。
但是,如果我们想根据某个字段,把数据分成多组,分别存储在多个目录下呢?举个可能不恰当的例子,就有点像我们先把数据按某个字段分组:

GROUP data BY field;

再把各个group的数据分别存储在不同的目录下一样。

阅读更多