Hadoop 任务重要参数整理

版权声明:技术专栏,转载请注明! https://blog.csdn.net/wankunde/article/details/73250680

后台服务进程信息查看

conf
jmx
logs
logLevel
stacks

调试信息

set hive.execution.engine=mr;
set yarn.nodemanager.delete.debug-delay-sec=1200;  日志保留时间,单位:秒
set mapreduce.task.timeout=60000000;   在debug的时候,container超时时间
set yarn.app.mapreduce.am.command-opts= -Xmx2060m -Xdebug -Xrunjdwp:transport=dt_socket,address=8002,server=y,suspend=y;
set mapreduce.map.java.opts=-Xdebug -Xrunjdwp:transport=dt_socket,address=8002,server=y,suspend=y; 
set mapreduce.reduce.java.opts=-Xdebug -Xrunjdwp:transport=dt_socket,address=8002,server=y,suspend=y;   map或者reduce开启远程调试

set mapreduce.task.profile=true 开启任务profile
set mapreduce.task.profile.params='-agentlib:hprof=cpu=samples,interval=20,heap=sites,depth=30,force=n,thread=y,verbose=n,file=%s';     hprof参数
set mapreduce.job.queuename=root.dspuser;  指定任务队列

set mapreduce.map.java.opts=-Xmx1024m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/@taskid@.hprof;  OOM dump

set mapreduce.input.fileinputformat.split.maxsize=64000000;
set hive.exec.reducers.bytes.per.reducer=64000000;  

// log4j 调试
set mapreduce.map.log.level=TRACE;
set mapreduce.reduce.log.level=TRACE;
set yarn.app.mapreduce.am.log.level=DEBUG;

// 命令行开启客户端调试
export HADOOP_ROOT_LOGGER=DEBUG,console
hadoop dfs -ls /

// Yourkit 参数
-agentpath:/usr/lib/YourKit/bin/linux-x86-64/libyjpagent.so=disablestacktelemetry,disableexceptiontelemetry,probe_disable=com.yourkit.probes.builtin.*,delay=10000

Tez 程序调试

export HADOOP_OPTS=" -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8002"
hadoop jar /home/hadoop/wangyi/tez/tez-examples-0.7.1.jar wordcount /tmp/derby.log /tmp/output  任务提交代码调试

hadoop jar /home/hadoop/wangyi/tez/tez-examples-0.7.1.jar wordcount -Dtez.am.launch.cmd-opts=" -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8002" /tmp/derby.log /tmp/output   AM 调试

hadoop jar /home/hadoop/wangyi/tez/tez-examples-0.7.1.jar wordcount -Dtez.task.launch.cmd-opts=" -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8002" /tmp/derby.log /tmp/output  Container 调试


HIVE DEBUG:
因为hive在启动的时候会去yarn上创建application,导致Am 参数无法DEBUG,所以需要在启动的时候添加调试信息:
hive --hiveconf tez.am.launch.cmd-opts=' -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8002'

tez container debug :
set mapreduce.tasktracker.healthchecker.script.timeout=7200000;
set tez.am.preemption.max.wait-time-ms=7200000;
set hive.tez.container.size=2048;
set hive.tez.java.opts=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8002;

HIVE Server2 参数

if [ “$SERVICE” = “hiveserver2” ];then
export HADOOP_HEAPSIZE=20480
export HADOOP_OPTS=” -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/appcom/log/hive/hive-server2.hprof -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/appcom/log/hive/gc-hive-server2.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=64M”
fi

// HADOOP_OPTS 中不要设置其他垃圾回收器参数,否则会因为突出无法启动程序。

Hive动态分区

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

NodeManger调试

yarn-env.sh:export YARN_NODEMANAGER_OPTS=”$YARN_NODEMANAGER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8005”

GC 参数

-verbose:gc

这个参数会输出虚拟机中GC的情况.使用后输出如下:
[Full GC 168K->97K(1984K), 0.0253873 secs]
箭头前后的数据168K和97K分别表示垃圾收集GC前后所有存活对象使用的内存容量,说明有168K-97K=71K的对象容量被回收,
括号内的数据1984K为堆内存的总容量,收集所需要的时间是0.0253873秒。

-XX:+PrintGC

功能同-verbose:gc,可以认为-verbose:gc 是 -XX:+PrintGC的别名。
另外,前者是稳定版本(参见:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html),
后者是非稳定版本,可能在未通知的情况下删除,且被标记为manageable(意味着这些参数可以在程序运行期间动态调整。),可以通过如下三种方式修改。
2.1、com.sun.management.HotSpotDiagnosticMXBean API
2.2、JConsole
2.3、jinfo -flag
参见:http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

 -XX:+PrintGCDetails

[GC [PSYoungGen: 1048640K->174693K(1223360K)] 1048640K->218587K(4019584K), 0.0918800 secs] [Times: user=1.13 sys=0.17, real=0.09 secs]

可以认为是-XX:+PrintGC的更详细版本,且更详细,包含以内内容:
1)会打印具体垃圾回收算法,如PSYoungGen。打印内容与具体垃圾回收算法有关。-XX:+PrintGC 显示的内容与垃圾回收算法无关。
2)会打印额外的垃圾回收时间。如[Times: user=1.13 sys=0.17, real=0.09 secs] 。详细日志的“Times”部分包含了GC所使用的CPU时间信息,
分别为操作系统的用户空间和系统空间所使用的时间。同时,它显示了GC运行的“真实”时间(0.09秒是0.0929090秒的近似值)。
如果CPU时间(译者注:1.13秒+0.17,秒)明显多于”真实“时间(译者注:0.09秒),我们可以得出结论:GC使用了多线程运行。
这样的话CPU时间就是所有GC线程所花费的CPU时间的总和。

推荐上面3个参数使用-XX:+PrintGCDetails 。

 -XX:+PrintGCTimeStamps和-XX:+PrintGCDateStamps

例子:
2017-05-18T18:34:04.568+0800: 20.309:
[GC [PSYoungGen: 1048640K->174716K(1223360K)] 1048640K->218591K(4019584K), 0.0940440 secs] [Times: user=1.29 sys=0.16, real=0.09 secs]

使用-XX:+PrintGCDateStamps可以将时间和日期也加到GC日志中。如上个例子中的2017-05-18T18:34:04.568+0800
使用-XX:+PrintGCTimeStamps表示自JVM启动至今的时间戳会被添加到每一行中,如上个例子中的20.309 。
推荐这两个参数同时使用。

-Xloggc

输出gc log日志到固定目录的文件下。如-Xloggc:/search/gc.log

-XX:+PrintGCApplicationStoppedTime

打印垃圾回收期间程序暂停的时间.
如:
Total time for which application threads were stopped: 0.0730640 seconds

-XX:+PrintHeapAtGC

在进行GC的前后打印出堆的信息

JVM 垃圾回收器

猜你喜欢

转载自blog.csdn.net/wankunde/article/details/73250680