10.3 hadoop地址配置、內存配置、守護進程設置、環境設置


1.1  hadoop配置

hadoop配置文件在安裝包的etc/hadoop目錄下,但是為了方便升級,配置不被覆蓋一般放在其他地方,並用環境變量HADOOP_CONF_DIR指定目錄。

 

 

 

 

1.1.1         配置管理

集群中每個節點都維護一套配置文件,並由管理員完成文件的同步工作。集群管理工具Cloudera Manage和Apache Ambari可以在集群間傳遞修改信息。所有機器采用同一套配置文件,簡單,但是如果機器的配置不同時,同一套配置文件不適合。Chef、Puppet、CFEngine和Bcfg2工具可以為每一台集群單獨維護配置文件。盡量用工具,不用腳本,因為腳本無法感知異常狀態。

1.1.2         環境設置

(1)mapred-env.sh和yarn-env.sh文件中配置的變量值會覆蓋hadoop-env.sh文件中的變量。hadoop-env.sh文件的內容如下:

配置選項

說明

export JAVA_HOME=${JAVA_HOME}

JAVA_HOME環境變量配置jdk路徑

#export JSVC_HOME=${JSVC_HOME}

配置jsvc路徑,jsvc是一些庫和應用程序,讓java程序在linux環境下能更簡單的運行,提供root權限的授權操作,需要運行安全節點,指定授權端口和授權協議。如果SASL(Simple Authentication and Security Layer)默認不用授權,可以不設置。

export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}

配置文件路徑,默認HADOOP_CONF_DIR 沒有值時,會賦予默認值/etc/hadoop。一般把hadoop包中的文件復制到別處,設置為復制到的路徑,避免hadoop升級覆蓋配置文件。

#export HADOOP_HEAPSIZE=

# 內存堆大小單位 MB. 默認 1000M.yarn-env.sh文件中YARN_RESOURCEMANAGER_HEAPSIZE,會覆蓋資源管理器的堆大小。-Xmx2000m表示分配2000MB的內存。

#export HADOOP_NAMENODE_INIT_HEAPSIZE=""

Namenode初始化堆大小,默認1000M

# export HADOOP_JAAS_DEBUG

設置JAAS(Java Authentication Authorization Service,Java驗證和授權API)綁定、開啟Kerberos 安全認證,

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"

使用ip4,禁用ip6

export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"

Namenode的日志參數設置

export HADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"

Datanode的日志參數設置

export HADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_SECONDARYNAMENODE_OPTS"

第二namenode的日志參數配置

export HADOOP_NFS3_OPTS="$HADOOP_NFS3_OPTS"

 

export HADOOP_NFS3_OPTS="$HADOOP_NFS3_OPTS"

NFS(Network File System)網絡文件系統設置

export HADOOP_PORTMAP_OPTS="-Xmx512m $HADOOP_PORTMAP_OPTS"

這個是在HDFS格式化時需要的JVM配置,也就是執行hdfs namenode -format時的JVM配置

export HADOOP_PID_DIR=${HADOOP_PID_DIR}

Pid文件保存的路徑,默認是./tmp

export HADOOP_IDENT_STRING=$USER

一個指向hadoop. $USER用戶名的字符串

export HADOOP_SECURE_DN_USER=${HADOOP_SECURE_DN_USER}

如果使用授權端口,這個必須配置,提供數據轉換協議的授權。如果使用SASL授權方式,則不能設置,注釋掉。

export HADOOP_LOG_DIR=${HADOOP_LOG_DIR}/$USER

設置系統日志的路徑

(2)namenode會在內存中維護所有文件的數據塊的引用,會占用很大的內存;數據塊的個數=(集群節點數*節點磁盤空間)/(數據塊大小*每個數據塊的備份數),200個節點的集群,每個節點24TB,數據塊大小為128MB,復本數量是3,則數據引用的個數=(200*24*1024*1024)/(128*3)=13107200個數據引用,這些引用需要占用多大內存,可以通過hadoop-env.sh的HADOOP_NAMENODE_OPTS來設置。

(3)系統日志路徑通過export HADOOP_LOG_DIR= ${HADOOP_LOG_DIR}/$USER來設置,分為.log日志和.out標准輸出和錯誤日志。

1.1.3         hadoop守護進程的關鍵屬性

守護進程的配置信息可以訪問該進程的web服務器conf界面http://resource-manager-host:8088/conf表示資源管理器當前的配置。

(1)   HDFS

運行HDFS需要指定一台機器作為namecode的地址,core-site.xml文件中屬性fs.defaultFS配置文件系統的uri,ip和端口號。例如hdfs://localhost:9000。

coree-site.xml配置文件

<configuration>

<property>

<name>hadoop.tmp.dir</name>

<value>/D:/hadoop/hadoop-2.8.3/tmp</value>

<description>Abase for other temporary directories.</description>

</property>

<property>      

<name>fs.defaultFS</name>      

<value>hdfs://localhost:9000</value>  

</property>

</configuration>

hdfs-site.xml配置文件

<configuration>

<property>      

<name>dfs.replication</name>       

<value>1</value>  

</property>  

<property>

<name>dfs.namenode.name.dir</name>      

<value>/D:/hadoop/hadoop-2.8.3/namenode</value>  

</property>  

<property>      

<name>dfs.datanode.data.dir</name>    

<value>/D:/hadoop/hadoop-2.8.3/datanode</value>  

</property>

<property>

       <name>dfs.permissions</name>

       <value>false</value>

</property>

</configuration>

 

 

 

 

(2)   yarn屬性設置

yarn-site.xml用於配置資源管理器的屬性,需要設置運行資源的管理器的主機名、地址。

yarn.nodemanager.local-dirs屬性用來指定mapreduce函數的中間數據的輸出路徑,包括map輸出,可能輸出非常大,目錄空間要足夠大。為了提高磁盤IO操作的效率,設置多個磁盤上的目錄。

shuffle服務是將map任務的輸出發送給reduce任務。需要將yarn-site.xml文件中屬性yarn.nodemanager.aux-services設置mapreduce_shuffle來顯示啟用mapreduce的shuffle句柄。

 

 

 

(3)   yarn和mapreduce中的內存設置

 

 

節點管理從內存池分配內存,節點管理器的內存要用於運行節點管理器守護進程和datanode守護進程各需要1000M內存和操作系統內存,剩下的內存則分配給節點上作業的內存(yarn.nodemanager.resource.memory-mb設置分配給容器的總內存,默認8092)。可以通過設置任務容器(mapreduce.map.memory.mb和mapreduce.reduce.memory.mb)的內存使用量和java進程的堆大小(mapred.child.java.opts, mapreduce.map.java.opts, mapreduce.reduce.java.opts)來控制作業的內存。mapreduce.map.memory.mb默認是1024M,節點管理器會分配1024M的容器,JVM會占用容器的200M內存(-Xmx200m配置的是最大JVM進程堆內存),如果容器中內存使用量超過1024,則任務會被終止。yarn.nodemanager.vmem-pmem-ratio(默認2.1)表示虛擬內存與物理內存的比例。容器的物理內存是1024,則最多使用的虛擬內存是1024*2.1=21150.4M。虛擬內存的使用量超過這個值,也會終止任務。

       還可以通任務的內存計數器來統計內存使用量PHYSICAL_MEMORY_BYTES,VIRTUAL__MEMORY_BYTES和COMMITED_HEAP_BYTES。

 

 

 

(4)   YARN和mapreduce的CPU設置

yarn.nodemanager.resource.cpuvcores設置分配給容器的核數量(不包括nodemanager和datanode守護進程的核數)。mapreduce.map.cpu.vcores和mapreduce.reduce.cpu.vcores分別設置map和reduce任務的核數量,默認1。

(5)   內存和CPU配置實例

現在有個32核。120G內存的機器。要怎么配置內存和CPU呢?

nodemanage和datanode守護進程各占一個核,守護進程內存各一個G。操作系統占用2核,內存占18G。剩下的28核和100G內存用於任務容器。

yarn.nodemanager.resource.mem.mb=102400

yarn.nodemanager.resource.cpuvcores=28

單個容器任務最小內存分配和最大內存分配屬性設置為512M和4096M,最小內存值可以計算一個節點最大Container數量。

yarn.scheduler.minimum-allocation-mb=512

yarn.scheduler.maximum-allocation-mb=4096

然后給每個map任務和reduce任務設置內存上限和cpu分配,內存范圍要在容器的內存范圍內(512~4096)

mapreduce.map.cpu.vcores=1

mapreduce.reduce.cpu.vcores=2

mapreduce.map.memory.mb=1024

mapreduce.reduce.memory.mb=2048

然后在map和reduce任務中的JVM進程設置內存,JVM內存要小於map和reduce的任務內存mapred.child.java.opts總的設置,也可以用mapreduce.map.java.opts和mapreduce.reduce.java.opts分別設置。

mapred.child.java.opts=512

mapreduce.map.java.opts=512

mapreduce.reduce.java.opts=512

1.1.4         hadoop守護進程的地址和端口

hadoop守護進程一般有兩個服務器,RPC服務器支持進程間通信。HTTP服務器則提供與用戶的交互的web頁面。

(1)RPC服務器設置

 

 

 

 

 

(2)HTTP服務器地址設置

 

 

 

 

 

地址配置決定了服務器綁定的地址,同時客戶端和集群中的其他機器可以通過這個地址鏈接服務器通訊。將yarn.resourcemananger.hostname設置為主機名或IP地址,yarn.resourcemanager.bind-host設置為0.0.0.0,這樣既能節點管理器和客戶端端可以通過hostname去解析地址,確定位置,又可以確保資源管理器能夠與機器上的所有地址綁定。

datanode運行TCP/IP服務器支持塊傳輸,由屬性dfs.datanode.adress設置;默認0.0.0.0:50010。

1.1.5         hadoop的其他屬性設置

(1)   集群成員

為了方便添加和移除節點,dfs.hosts屬性記錄作為datanode加入集群的機器列表。屬性yarn.resourcemanager.nodes.include-path記錄作為節點管理器加入集的機器列表。dfs.hosts.exclude和yarn.resourcemanager.nodes.exclude-path指向解除的機器列表。

(2)   IO緩沖區

core-site.xml中io.file.buffer.size屬性來設置緩沖區大小,128kb常用。

(3)   塊大小

hdfs-site.xml中dfs.blocksize設置HDFS的塊大小,默認128M。

(4)   保留存儲空間

計划將部分空間留給非HDFS,設置dfs.datanode.du.reserved設置保留空間。

(5)   回收站

core-site.xml中的fs.trash.interval設置回收站是否有效。默認0無效。trash類刪除時會返回false。回收站有效時,shell命令刪除的文件才會放入回收站(home目錄下的.Trash目錄),程序刪除的文件直接刪除,除非用trash類刪除也會放入回收站。HDFS會自動刪除超過時限的文件文件,其他文件系統不能,需要執行手動執行hadoop fs –expunge 命令來刪除超過最小時限的文件。Trash.expunge()也具備這樣的的功能。

(6)   慢啟動reduce

調度器會一直等待直到map完成5%,才會調度reduce任務,可以將mapreduce.job.reduce.slowstart.completemaps的值設置為0.8,map完成80%才調度reduce任務。

(7)   短回路本地讀

客戶端和datanode在同一個幾幾節點上,則繞過TCP網路通訊,直接從磁盤中讀取數據。dfs.client.read.shortcircuit設置為true。

自己開發了一個股票智能分析軟件,功能很強大,需要的點擊下面的鏈接獲取:

https://www.cnblogs.com/bclshuai/p/11380657.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM