关于hadoop namenode jvm设置的思考与调整

这两天经常会收到hadoop namenode 内存使用百分比的告警,经常收到告警是一个讨厌的事情,是不是说明我们系统超负荷有问题了?怎么样解决这个问题?这两天一直在仔细查考测试这个问题,现将我的思考说明一下。

1.      首先,这个告警message说的是namenode这台机器真的内存的使用百分比,其实并不太准确。事实上它不是说明机器内存用光了,而是namenode的jvm进程堆内存使用快光了。


2.      我们知道jvm的堆内存是指HeapSize,这个由-Xmx设定最大值,-Xms设定初始值。如果Xms<Xmx,那么当前实际HeapSize是介于Xms与Xmx两者之间的,我们用CurrentHeapSize表示,其中包括使用了的(used)和未使用的(free)。而堆内存又分Young Generation和Old Generation,主要是两种采用了不同垃圾回收gc策略,我用YoungHeapSize和OldHeapSize表示,其中也包括使用了的(used)和未使用的(free),。当然Young Generation又分(Eden区和Survivor区),但在这里,事实上我们不需要关注Young Generation细分到的不同区。


3.      不管是Young 还是Old,当usedYoung等于Young或者usedOld等于Old,就会启动gc, 并且会增加YoungHeapSize和OldHeapSize直到两者相加等于Xmx.


4.      因此这个告警之前采集的百分比:usedCurrentHeapSize/Xmx=(usedCurrentYoungHeapSize+usedCurrentOldHeapSize)/Xmx,到full gc时刻,会最终等于(CurrentYoungHeapSize+CurrentOldHeapSize)/Xmx。现在收到超过90%的告警,说明的就是(CurrentYoungHeapSize + CurrentOldHeapSize)快接近Xmx了,并且到了即将full gc时刻。如果想要不收到超过90%的告警,也就是说我们必须(CurrentYoungHeapSize + CurrentOldHeapSize)最大值小一些,留一些缓冲。但是CurrentYoungHeap和CurrentOldHeap会不断增加,直到两者相加等于Xmx,除非能够设定MaxYoungHeapSize和MaxOldHeapSize.


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1章 初识Hadoop 数据!数据! 数据存储与分析 与其他系统相比 关系型数据库管理系统 网格计算 志愿计算 1.3.4 Hadoop 发展简史 Apache HadoopHadoop生态圈 第2章 关于MapReduce 一个气象数据集 数据的格式 使用Unix工具进行数据分析 使用Hadoop分析数据 map阶段和reduce阶段 横向扩展 合并函数 运行一个分布式的MapReduce作业 Hadoop的Streaming Ruby版本 Python版本 Hadoop Pipes 编译运行 第3章 Hadoop分布式文件系统 HDFS的设计 HDFS的概念 数据块 namenode和datanode 命令行接口 基本文件系统操作 Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询文件系统 删除数据 数据流 文件读取剖析 文件写入剖析 一致模型 通过 distcp并行拷贝 保持 HDFS 集群的均衡 Hadoop的归档文件 使用Hadoop归档文件 不足 第4章 Hadoop I/O 数据完整性 HDFS的数据完整性 LocalFileSystem ChecksumFileSystem 压缩 codec 压缩和输入切分 在MapReduce中使用压缩 序列化 Writable接口 Writable类 实现定制的Writable类型 序列化框架 Avro 依据文件的数据结构 写入SequenceFile MapFile 第5章 MapReduce应用开发 配置API 合并多个源文件 可变的扩展 配置开发环境 配置管理 辅助类GenericOptionsParser,Tool和ToolRunner 编写单元测试 mapper reducer 本地运行测试数据 在本地作业运行器上运行作业 测试驱动程序 在集群上运行 打包 启动作业 MapReduce的Web界面 获取结果 作业调试 使用远程调试器 作业调优 分析任务 MapReduce的工作流 将问题分解成MapReduce作业 运行独立的作业 第6章 MapReduce的工作机制 剖析MapReduce作业运行机制 作业的提交 作业的初始化 任务的分配 任务的执行 进度和状态的更新 作业的完成 失败 任务失败 tasktracker失败 jobtracker失败 作业的调度 Fair Scheduler Capacity Scheduler shuffle和排序 map端 reduce端 配置的调优 任务的执行 推测式执行 重用JVM 跳过坏记录 任务执行环境 第7章 MapReduce的类型与格式 MapReduce的类型 默认的MapReduce作业 输入格式 输入分片与记录 文本输入 二进制输入 多种输入 数据库输入(和输出) 输出格式 文本输出 二进制输出 多个输出 延迟输出 数据库输出 第8章 MapReduce的特性 计数器 内置计数器 用户定义的Java计数器 用户定义的Streaming计数器 排序 准备 部分排序 总排序 二次排序 联接 map端联接 reduce端联接 边数据分布 利用JobConf来配置作业 分布式缓存 MapReduce库类 第9章 构建Hadoop集群 集群规范 网络拓扑 集群的构建和安装 安装Java 创建Hadoop用户 安装Hadoop 测试安装 SSH配置 Hadoop配置 配置管理 环境设置 Hadoop守护进程的关键属性 Hadoop守护进程的地址和端口 Hadoop的其他属性 创建用户帐号 安全性 Kerberos和Hadoop 委托令牌 其他安全性改进 利用基准测试程序测试Hadoop集群 Hadoop基准测试程序 用户的作业 云上的Hadoop Amazon EC2上的Hadoop 第10章 管理Hadoop HDFS 永久性数据结构 安全模式 日志审计 工具 监控 日志 度量 Java管理扩展(JMX) 维护 日常管理过程 委任节点和解除节点 升级 第11章 Pig简介 安装与运行Pig 执行类型 运行Pig程序 Grunt Pig Latin编辑器 示例 生成示例 与数据库比较 PigLatin 结构 语句 表达式 1.4.4 类型 模式 函数 用户自定义函数 过滤UDF 计算UDF 加载UDF 数据处理操作 加载和存储数据 过滤数据 分组与连接数据 对数据进行排序 组合和分割数据 Pig实战 并行处理 参数代换 第12章 Hive 1.1 安装Hive 1.1.1 Hive外壳环境 1.2 示例 1.3 运行Hive 1.3.1 配置Hive 1.3.2 Hive服务 1.3.3 Metastore 1.4 和传统数据
Hadoop集群安装的详细说明文档, 實作七: Hadoop 叢集安裝 前言 您手邊有兩台電腦,假設剛剛操作的電腦為"主機一" ,另一台則為"主機二" 。則稍後的環境如下 • 管理Data的身份 管理Job的身份 "主機一" namenode + datanode jobtracker + tasktracker "主機二" datanode tasktracker 這個實做會架設運作在叢集環境上的Hadoop,因此若是你的電腦還存在著 之前的實做一的環境,請先作step 0,以移除掉之前的設定。 • 確認您"主機一"的 hostname 與 "主機二" 的 hostname,並將下面指令 有 主機一與主機二 的地方作正確的取代 • 維持好習慣,請幫你待會要操作的主機設root密碼 • ~$ sudo passwd 清除所有在實做一作過的環境 在 "主機一" (有操作過 實做一 的電腦)上操作 • ~$ cd ~ ~$ /opt/hadoop/bin/stop-all.sh ~$ rm -rf /tmp/hadoop-hadooper* ~$ sudo rm -rf /opt/hadoop ~$ rm -rf ~/.ssh step 0. 設定機器的ip & hostname 資訊 step 1. 設定兩台機器登入免密碼 請注意我們實驗環境已經把 /etc/ssh/ssh_config裡的StrictHostKeyChecking改成no,下面的指令可以檢查,如果你的設定 不同的話,請修改此檔會比較順。 • $ cat /etc/ssh/ssh_config |grep StrictHostKeyChecking StrictHostKeyChecking no 在"主機一" 上操作 • 接著將key產生並複製到其他node上 • ~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" ~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys ~$ scp -r ~/.ssh 主機二:~/ 測試看看是否登入免密碼 • ~$ ssh 主機二 ~$ ssh 主機一 ~$ exit ~$ exit ~$ 完成後請登入確認不用輸入密碼,(第一次登入需按 yes ,第二次就可以直接登入到系統),以免日後輸入密碼不隻手軟而 已.... • step 2. 安裝java 為兩台電腦安裝java • "主機一" & "主機二" 都要操作以下指令 ◦ ~$ sudo apt-get purge java-gcj-compat ~$ sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre ~$ ssh 主機二 前言 清除所有在實做一作過的環境 step 0. 設定機器的ip & hostname 資訊 step 1. 設定兩台機器登入免密碼 step 2. 安裝java step 3. 下載安裝Hadoop到"主機一" step 4. 設定 hadoop-env.sh step 5. 設定 hadoop-site.xml step 6. 設定masters及slaves step 7. Hadoop_Home內的資料複製到其他主機上 step 8. 格式化HDFS step 9. 啟動Hadoop step 10. 停止hadoop 練習 页码,1/5 Hadoop_Lab7_018 – Cloud Computing 2011-03-25 http://trac.nchc.org.tw/cloud/wiki/Hadoop_Lab7_018 ~$ sudo apt-get purge java-gcj-compat ~$ sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre ~$ exit step 3. 下載安裝Hadoop到"主機一" 先在"主機一" 上安裝,其他node的安裝等設定好之後在一起作 • ~$ cd /opt /opt$ sudo wget http://ftp.twaren.net/Unix/Web/apache/hadoop/core/hadoop-0.18.3/hadoop-0.18.3.t /opt$ sudo tar zxvf hadoop-0.18.3.tar.gz /opt$ sudo mv hadoop-0.18.3/ hadoop /opt$ sudo chown -R hadooper:hadooper hadoop step 4. 設定 hadoop-env.sh "主機一" 上用gedit 編輯 conf/hadoop-env.sh • /opt$ cd hadoop/ /opt/hadoop$ gedit conf/hadoop-env.sh 將以下資訊貼入 conf/hadoop-env.sh 檔內 export JAVA_HOME=/usr/lib/jvm/java-6-sun export HADOOP_HOME=/opt/hadoop export HADOOP_CONF_DIR=/opt/hadoop/conf export HADOOP_LOG_DIR=/tmp/hadoop/logs export HADOOP_PID_DIR=/tmp/hadoop/pids 注意,在此實做中,我們多設定了HADOOP_PID_DIR及HADOOP_LOG_DIR的參數,並且把值寫入到我們hadooper的家目 錄中,此舉並非完全必要,但一個目的是介紹更多hadoop-env.sh內的參數,另一目的為讓log,pid等常變資料與hadoop家目 錄分離 • step 5. 設定 hadoop-site.xml 第二個設定檔是 hadoop-site.xml,由於官方所提供的範例並無法直接執行,因此我們參考線上文件,做了以下的修改。 • /opt/hadoop# gedit conf/hadoop-site.xml 將以下資料取代掉原本的內容 <configuration> <property> <name>fs.default.name</name> <value>hdfs://主機一:9000/</value> <description> </description> </property> <property> <name>mapred.job.tracker</name> <value>主機一:9001</value> <description> </description> </property> <property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop/hadoop-${user.name}</value> <description> </description> </property> </configuration> 注意! 我們多加了一個參數hadoop.tmp.dir,讓預設的中介資料存放在/tmp/hadoop/ 而不是/tmp/ 下,更多內容可以看 conf/hadoop-default.xml • 注意!fs.default.name = hdfs://主機一:9000/ ;而mapred.job.tracker = 主機一:9001,看出差異了嗎!一個有指 hdfs://,一個沒有,重要!易混淆。 • step 6. 設定masters及slaves 接著我們要編輯哪個主機當namenode, 若有其他主機則為datanodes • 編輯 conf/slaves ◦ 页码,2/5 Hadoop_Lab7_018 – Cloud Computing 2011-03-25 http://trac.nchc.org.tw/cloud/wiki/Hadoop_Lab7_018 /opt/hadoop$ gedit conf/slaves 原本內容只有localhost一行,請刪除此行並換上"主機一" 及"主機二" 的ip 主機一 主機二 step 7. Hadoop_Home內的資料複製到其他主機上 在"主機一" 上對遠端"主機二" 作開資料夾/opt/hadoop及權限設定 • /opt/hadoop$ ssh 主機二 "sudo mkdir /opt/hadoop" /opt/hadoop$ ssh 主機二 "sudo chown -R hadooper:hadooper /opt/hadoop" 複製"主機一" 的hadoop資料夾到"主機二" 上 • /opt/hadoop$ scp -r /opt/hadoop/* 主機二:/opt/hadoop/ step 8. 格式化HDFS 以上我們已經安裝及設定好 Hadoop 的叢集環境,接著讓我們來啟動 Hadoop ,首先還是先格式化hdfs,在"主機一" 上操作 • /opt/hadoop$ bin/hadoop namenode -format 執行畫面如: 09/03/23 20:19:47 INFO dfs.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = 主機一 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.18.3 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.18 -r 736 ************************************************************/ 09/03/23 20:19:47 INFO fs.FSNamesystem: fsOwner=hadooper,hadooper 09/03/23 20:19:47 INFO fs.FSNamesystem: supergroup=supergroup 09/03/23 20:19:47 INFO fs.FSNamesystem: isPermissionEnabled=true 09/03/23 20:19:47 INFO dfs.Storage: Image file of size 82 saved in 0 seconds. 09/03/23 20:19:47 INFO dfs.Storage: Storage directory /tmp/hadoop/hadoop-hadooper/dfs/name has b 09/03/23 20:19:47 INFO dfs.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at 主機一 ************************************************************/ step 9. 啟動Hadoop bin/start-dfs.sh腳本會參照namenode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動 datanode。 • 在"主機一" 上,執行下面的命令啟動HDFS: • /opt/hadoop$ bin/start-dfs.sh http://主機一:50070/ - Hadoop DFS 狀態 • 页码,3/5 Hadoop_Lab7_018 – Cloud Computing 2011-03-25 http://trac.nchc.org.tw/cloud/wiki/Hadoop_Lab7_018 • ps: 然而JobTracker還沒啟動,因此 http://主機一:50030/ 網頁無法顯示 • bin/start-mapred.sh腳本會參照jobtracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動 tasktracker。 • 在"主機一"執行下面的命令啟動Map/Reduce: • /opt/hadoop$ /opt/hadoop/bin/start-mapred.sh 啟動之後, jobtracker也正常運作囉! • http://主機一:50030/ - Hadoop 管理介面 • 页码,4/5 Hadoop_Lab7_018 – Cloud Computing 2011-03-25 http://trac.nchc.org.tw/cloud/wiki/Hadoop_Lab7_018 • step 10. 停止hadoop 在"主機一" 上,執行下面的命令停止HDFS: • /opt/hadoop$ bin/stop-dfs.sh bin/stop-dfs.sh腳本會參照namenode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上停止 namenode ◦ 在"主機一" 上,執行下面的命令停止Map/Reduce: • /opt/hadoop$ bin/stop-mapred.sh bin/stop-mapred.sh腳本會參照jobtracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上停 止tasktracker。 ◦ 練習 看 conf/hadoop-default.xml 的更多內容 • 和別人組隊,組成4台node的cluster,其中"主機一" 只當 namenode ,"主機二" 只當 jobtracker,而node3, node4 兩台 電腦則身兼 datanode及tasktracker的工作。 • 页码,5/5 Hadoop_Lab7_018 – Cloud Computing 2011-03-25 http://trac.nchc.org.tw/cloud/wiki/Hadoop_Lab7_018

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值