jar命令的使用以及hadoop的job内存溢出的解决

来源:互联网 发布:仿微信红包网站源码 编辑:程序博客网 时间:2024/06/05 01:18

jar命令的使用

举例说明

  1. 列出jar包中的文件信息:jar -tvf test.jar
  2. 更新某个特定的class文件:jar -uf test.jar com/test/test.class

jar命令说明

jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 

  1. {ctxu}是jar命令的子命令,每次jar命令只能包含ctxu中的一个
    1. -c 创建新的 JAR 文件包
    2. -t 列出 JAR 文件包的内容列表
    3. -x 展开 JAR 文件包的指定文件或者所有文件
    4. -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
  2. [vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数
    1. -v 生成详细报告并打印到标准输出
    2. -f 指定 JAR 文件名,通常这个参数是必须的
    3. -m 指定需要包含的 MANIFEST 清单文件
    4. -0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快
    5. -M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数
  3. [jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数
  4. [manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数
  5. [-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转>该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。
  6. 文件名 ... 指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/>目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录>打入包中。

hadoop的job内存溢出

        由于在启用reduce的时候需要读取临时的一个文件到一个map中,以便做映射,但是启动job后一直报内存溢出的错误

Exception in thread "Thread for syncLogs" java.lang.OutOfMemoryError: GC overhead limit exceeded
        查了一下,发现这个错误是JDK6新添的错误类型。是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。

解决方案

关闭该功能:-XX:-UseGCOverheadLimit

增加mapred运行内存:-Xmx1024m,视个人机器而定

在mapred-site.xml中添加

        <property>                <name>mapred.child.java.opts</name>                <value>-Xmx1024m -XX:-UseGCOverheadLimit</value>        </property>