[原创] JAVA map-reduce job的counter页面无法显示的问题(error 500)

这个问题已经不是第一次遇到了,只不过今天痛下决心花费不少时间把它写成文章,给遇到同样问题的朋友一些参考。
我们知道,一个JAVA M-R job跑完后,无论是在命令行,还是在job的信息展示网页上,都会看到输出job counter的信息。在网页上,通过点击job信息页中的"counter"链接就能看到。

阅读更多

[原创] 解决IntelliJ idea启动崩溃:error occurred during error reporting (), id 0x6, SIGABRT (0x6) at pc=...

有时候,一个用了好久、一直好用的方法突然失灵,并且还折腾了几天,真的会逼疯人。
前几天我就遇到了这种破事:在Ubuntu开发机上自己升级IntelliJ idea到最新版之后,就无法再启动它。
启动时永远会崩溃,无论是重启系统、删除IntelliJ idea的本地缓存,或者使用回旧版,都无法再启动它(仿佛什么文件被"污染"了,再也回不去了),十分烦人。经过几天各种方法的尝试,终于解决了问题,我的解决办法不具有普适性,但如果你遇到了此类问题,或许可以为你提供一些解决思路。

阅读更多

[原创] 和付费使用一年多的GitHub Copilot说再见

GitHub CoPilot
 
昨天,我的GitHub Copilot订阅到期了。付费使用了一年多,现在也决定不再续费,颇有些感受。
 
从付费之前的热切期盼,到使用过程中的逐渐习惯,再到付费结束时的"从容分手",我终究还是向现实投降,选择了穷人的活法。
 
毕竟一个月10美元的费用,说它值或不值都可以找出充分的理由,只不过于我而言,GitHub Copilot已经不再有$10/月的吸引力罢了。

阅读更多

[原创] MacOS上的Homebrew记录

本文记录了MacOS上的软件包管理器Homebrew的若干琐事。

Homebrew 是一个自由和开源的软件包管理系统,专为 macOS 设计,用于简化软件安装过程。它允许用户容易地安装、更新和卸载各种软件包,包括命令行工具、开发工具和常用库。Homebrew 通过 GitHub 维护,并且它的软件包是从 GitHub 仓库中获取的。

阅读更多

[原创] MacOS的ssh命令报错:Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib

MacOS执行一个连接远程服务器的命令 ssh root@192.168.10.78 "mkdir -p /data" 命令时,报错:

dyld[52840]: Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
  Referenced from: <此处内容省略> /usr/local/Cellar/openssh/7.8p1/bin/ssh
  Reason: tried: '/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib' (no such file), '/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib' (no such file), '/usr/local/lib/libcrypto.1.0.0.dylib' (no such file), '/usr/lib/libcrypto.1.0.0.dylib' (no such file, not in dyld cache), '/usr/local/Cellar/openssl@3/3.2.0_1/lib/libcrypto.1.0.0.dylib'
Read More

[原创] 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文件夹中所包含的数据块和名称空间元素(如子文件夹和文件)的数量而设置的最大值。简单来说,就是对一个文件夹中可存储数据的上限进行管理和控制,以便于维护整个系统的健康和性能。

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

阅读更多

[原创] 如何下载HLS流视频文件

在互联网上,有些视频以HLS流的形式呈现,当你用一些工具捕获到它的播放地址时,会发现是一个以 .m3u8 结尾的URL。
那么,什么是 HLS 和 m3u8 呢?

HLS(HTTP Live Streaming)是一种基于HTTP协议的流媒体传输协议,而M3U8则是一种基于文本的播放列表文件格式。在HLS中,媒体数据被划分成多个小文件进行传输,并使用M3U8文件作为索引来指向这些媒体数据文件。M3U8文件包含了所有的媒体数据文件的URL地址及其相关信息,如码率、分辨率、编码格式等。因此,当一个客户端请求播放一个HLS流时,它将下载对应的M3U8索引文件,并且根据其中包含的地址去下载其他的媒体数据文件。简单来说,HLS和M3U8是两个不同但紧密相连的概念,其中M3U8作为HLS协议中索引与定位资源的重要组成部分。

问题来了:如何下载HLS流视频文件呢?

阅读更多

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

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

阅读更多