1. 程式人生 > >如何合理設定hadoop相關元件的jvm Xmx

如何合理設定hadoop相關元件的jvm Xmx

1.這個問題不是很簡單麼?

直接設定不久好了,java -Xmx2000m像這樣不就好了。No,我說的不僅僅是這個問題,比如,你看到

/usr/local/bigdata/jdk/bin/java -Xmx2048m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/local/bigdata/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/usr/local/bigdata/hadoop -Dhadoop.id.str=hadoop -Dhadoop.root.logger=INFO,console -Djava.library.path=/usr/local/bigdata/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx512m -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /usr/local/bigdata/hive/lib/hive-cli-0.13.0.jar org.apache.hadoop.hive.cli.CliDriver
為什麼出現2個-Xmx,這二個貨是從哪裡冒出來的?

其實,根本問題是我想調整hiveserver2的jvm Xmx大小,我想直接修改hive/conf/hive-env.sh,修改

# The heap size of the jvm stared by hive shell script can be controlled via:
#
export HADOOP_HEAPSIZE=2000
#

不就好了麼,可是,我太天真了,任憑我怎麼修改,都是沒有用的!!

2.那究竟怎麼修改?或者說這些引數是在哪裡設定的?

我們一起看看:

1)hive/hiveserver2的命令最終都指向了hive/bin/ext/util/execHiveCmd.sh

cat hive/bin/ext/util/execHiveCmd.sh
                   execHiveCmd () {
                   ......
                     # hadoop 20 or newer - skip the aux_jars option. picked up from hiveconf
                     exec $HADOOP jar ${HIVE_LIB}/hive-cli-*.jar $CLASS $HIVE_OPTS "[email protected]"
                   }


也即hive所有命令都是通過hadoop jar命令加上自己的hive相關的jar包名執行的。

2)所以我們看hadoop/bin/hadoop命令

cat hadoop/bin/hadoop
                   . $HADOOP_LIBEXEC_DIR/hadoop-config.sh
                   ......
               exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "[email protected]"

即先執行了hadoop/libexec/hadoop-config.sh再執行java命令的,注意$JAVA_HEAP_MAX和$HADOOP_OPTS

3)看hadoop/libexec/hadoop-config.sh

cat hadoop/libexec/hadoop-config.sh
                  
                  if [ -f "${HADOOP_CONF_DIR}/hadoop-env.sh" ]; then
                     . "${HADOOP_CONF_DIR}/hadoop-env.sh"
                   fi
                   ......
                   # some Java parameters
                   JAVA_HEAP_MAX=-Xmx1000m
                  
                   # check envvars which might override default args
                   if [ "$HADOOP_HEAPSIZE" != "" ]; then
                     #echo "run with heapsize $HADOOP_HEAPSIZE"
                     JAVA_HEAP_MAX="-Xmx""$HADOOP_HEAPSIZE""m"
                     #echo $JAVA_HEAP_MAX
                   fi

先執行hadoop/conf/hadoop-env.sh,獲取hadoop中的HADOOP_HEAPSIZE

看到這裡應該就明白了,hive/conf/hive-env.sh即使設定了HADOOP_HEAPSIZE=2000,也會被後來的再執行hadoop命令的時候給覆蓋掉。

4)那之前hive命令中出現的Xmx512m又是從哪裡來的呢?

cat hadoop/conf/hadoop-env.sh
                   # The following applies to multiple commands (fs, dfs, fsck, distcp etc)
                   export HADOOP_CLIENT_OPTS="-Xmx512m $HADOOP_CLIENT_OPTS"
                   #HADOOP_JAVA_PLATFORM_OPTS="-XX:-UsePerfData $HADOOP_JAVA_PLATFORM_OPTS"
 
cat hadoop/bin/hadoop
    # Always respect HADOOP_OPTS and HADOOP_CLIENT_OPTS
    HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
    export CLASSPATH=$CLASSPATH
    exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "[email protected]"

原來是通過在hadoop/conf/hadoop-env.sh中的HADOOP_CLIENT_OPTS設定死的

5)那hadoop中啟動一個namenode/datanode/resourcemanager/nodemanager等又是怎麼設定的呢?長話短說,整理一張圖


所以問題的根本在於hadoop/hdfs命令都公用了HADOOP_HEAPSIZE這個引數(hive命令也實際上是hadoop命令),而yarn則非常好的沒有公用,而是採用YARN_HEAPSIZE/YARN_RESOURCEMANAGER_HEAPSIZE/YARN_NODEMANAGER_HEAPSIZE分別設定。

3.結論:

為了保證hadoop叢集中各個元件Xmx引數可以獨立設定不干擾(關鍵是hive中可以設定Xmx大小),而且結構清晰層次分明:

1)對於namenode/datanode通過設定HADOOP_NAMENODE_OPTS/HADOOP_DATANODE_OPTS設定Xmx

2)取消hadoop/conf/hadoop-env.sh中HADOOP_HEAPSIZE設定

3)取消HADOOP_CLIENT_OPTS中Xmx的設定

4)設定hive/conf/hive-env.sh中HADOOP_HEAPSIZE

最後的最後,

寫的口吐白沫終於寫完了,就這樣啊,再見

相關推薦

如何合理設定hadoop相關元件jvm Xmx

1.這個問題不是很簡單麼? 直接設定不久好了,java -Xmx2000m像這樣不就好了。No,我說的不僅僅是這個問題,比如,你看到 /usr/local/bigdata/jdk/bin/java -Xmx2048m -Djava.net.preferIPv4Stack=

大資料相關元件jvm調優

一、問題 Spark作業看起來會執行得非常緩慢,甚至可能因為某個task處理的資料量過大導致記憶體溢位。出現oom問題 spark 任務資料傾斜原理 原理:在進行shuffle的時候,必須將各個節點上相同的key拉取到某個節點上的一個task來進行處理,比如按照key進行聚合或join等操作

JVM記憶體設定多大合適?Xmx和Xmn如何設定

問題: 新上線一個java服務,或者是RPC或者是WEB站點, 記憶體的設定該怎麼設定呢?設定成多大比較合適,既不浪費記憶體,又不影響效能呢? 分析: 依據的原則是根據Java Performance裡面的推薦公式來進行設定。 具體來講: Java整個堆

JVM原理與優化】JVM記憶體設定多大合適?Xmx和Xmn如何設定

問題: 新上線一個java服務,或者是RPC或者是WEB站點, 記憶體的設定該怎麼設定呢?設定成多大比較合適,既不浪費記憶體,又不影響效能呢? 分析: 依據的原則是根據Java Performance裡面的推薦公式來進行設定。 具體來講: Java整

android關於控制元件中setTag(key,Object)的設定相關問題

setTag () 是 Android 的 View 類中很有用的一個方法,可以用它來給控制元件附加一些資訊,在很多場合下都得到妙用。 我們可以看到 setTag() 有兩個方法過載,set

Hadoop、Spark、Storm相關元件安裝

一、準備 1. 安裝虛擬機器與編譯Hadoop 注:本文選的是base server,同時把java安裝選項去掉 建立3個虛擬機器,分別為hsm01, hss01, hss02 hostname ip

FSO元件不可用,各種與FSO相關的功能都將出錯!請執行Install.asp或者到後臺網站配置處設定好FSO元件名稱。或無法使用vbscript

1、註冊scrrun.dll: 在執行裡輸入regsvr32 scrrun.dll2、如果還是不行,估計是scrrun.dll許可權問題,在網站目錄、system32目錄的安全屬性新增internet帳號,重新註冊3、還是不行,開啟登錄檔編輯器,在HKEY_CLASSAS_R

Hadoop自學筆記(一)常見Hadoop相關項目一覽

-a https class Lucene 百萬 data fcm you 轉換 本自學筆記來自於Yutube上的視頻Hadoop系列。網址: https://www.youtube.com/watch?v=-TaAVaAwZTs(當中一個) 以後不再贅述 自學筆

TERSUS畫畫一樣開發軟件 集合類元件介紹-對象序號相關元件

軟件開發;管理軟件;無代碼軟件TERSUS無代碼手機電腦管理類軟件開發,其中對象序號相關元件包括:第一個結果(First)元件、第幾個結果(Get Numbered Item)元件、最後一個(Last)元件、在某個位置插入(Merge)元件、在某個位置刪除(Group Items)元件 第一個結果(First

TERSUS畫畫一樣開發軟件 集合類元件介紹-對象排序相關元件

軟件開發;管理軟件;無代碼軟件TERSUS無代碼手機電腦管理類軟件開發,其中對象排序相關元件包括:數字序列(Range)元件、排序(Sort)元件、去重(Unique Items)元件 數字序列(Range)元件:是創建一個包含指定範圍的數組,創建出一個整數列表,和有代碼開發一樣,一般是用在循環中的,比如需要

精進之路之AQS及相關元件

AQS ( AbstractQueuedSynchronizer)是一個用來構建鎖和同步器的框架,使用AQS能簡單且高效地構造出應用廣泛的大量的同步器,比如我們提到的ReentrantLock,Semaphore,其他的諸如ReentrantReadWriteLock,SynchronousQueue,Fut

[Swift4.2實際操作]九、完整例項-(7)登入頁面:建立自定義檢視及相關元件

本文將開始建立登入頁面,首先建立該頁面所需的一些自定義元件:做為登入按鈕的自定義檢視物件。在【RegLogin】組的名稱上點選滑鼠右鍵,開啟右鍵選單。【New File】->【Cocoa Touch Class】建立新檔案【RegButton.swift】Name:RegButtonSubclass:S

專業的談談0~255,16~235的產生和歷史及合理設定,專業叫法Y/C伸張壓縮

電視機產生的歷史比PC顯示器悠久,這是人都該知道的。TV的誕生伴隨著時代的侷限性,首先是黑白電視機誕生的最早,為了討好黑白電視機使用者,彩色電視機必須相容黑白電視機,注意:誕生彩色電視機的時候,全地球公民都在用黑白電視機,你敢和他們對抗?全部拋棄黑白電視機使用者?P.S. QQ好像也是這麼

QHeaderView 表頭設定QWidget控制元件

(噁心的需求)表頭要求特殊的字串(有下標的那種)。本來去掉了表頭,將表格的第一行作為表頭,這樣就可以在表格上新增QLabel控制元件實現。 這樣的弊端就是沒有了表頭的滑鼠拖動的功能。看到QHeaderView有setIndexWidget ( const QModelIndex &

Android設定常見控制元件點選效果

一. Imageview的點選效果——圖片稍微變暗突出點選效果 public class ClickImageView extends AppCompatImageView { public ClickImageView(Context context) { super(context);

mysql的sql mode合理設定

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Oracle基礎:1: 相關元件版本確認

這系列文章將介紹一下Oracle的基礎知識,將會使用docker下執行的oracle11g的精簡版進行說明。這篇文章介紹一下oracle的版本確認方法。 環境準備 使用Oracle的精簡版建立docker方式的demo環境,詳細可參看: https://blog.c

mysql5.7 版本中 timestamp 不能為零日期 以及sql_mode合理設定

---恢復內容開始--- 摘要: mysql5.7版本相比較之前的版本有很多的特性的增加以及預設配置的改變,在使用中難免會遇到與之前的使用習慣或者專案需求不符的情況。就需要調整相應的變數的值,比如sql_mode的值 最近在做一個專案的遷移工作,由於開發環境所使用的都是最新的軟體版本(mysql5.

JAVA學習筆記(併發程式設計 - 陸)- J.U.C之AQS及其相關元件詳解

文章目錄 J.U.C之AQS-介紹 關於AQS裡的state狀態: 關於自定義資源共享方式: 關於同步器設計: 如何使用: 具體實現的思路: 設計思想: 基於AQS的同步元件: AQS小結:

分散式計算hadoop三大元件

設計原則:移動計算,而不是移動資料 計算層:Map/Reduce排程層:YARN資料層:HDFS 這三層之間沒有必然的依賴性,只是經常這麼搭配,而且都是hadoop那個包裡一起安裝的,三層都可以獨立執行,某一層或者某兩層換成其他的而另外兩層或者一層不換也是可以的 YARN 排程系統   Resource