手动搭建Hadoop环境

 

  1. 环境

namenode有2个,datanode有3个。

 

  1. 基础配置
    1. 环境变量

.bashrc(怕配覆盖就放.bash_profile中)

=============

export PS1="[\u@\h|\w]\\$ "

 

#alias

alias l='ls --group-directories-first --time-style=long-iso -l'

alias la='ls --group-directories-first --time-style=long-iso -lav'

alias ll='ls --group-directories-first --time-style=long-iso -lavh'

alias lt='ls --group-directories-first --time-style=long-iso -lat'

alias dus='du -sh'

 

#java

export JAVA_HOME="/home/hadoop/soft/jdk1.8.0"

 

export CLASSPATH=".:${JAVA_HOME}/lib:${CLASSPATH}"

export PATH="${JAVA_HOME}/bin:${PATH}"

 

    1. 修改hosts

需要root权限。

vim /etc/hosts

127.0.0.1    localhost

::1           localhost

192.168.1.51 hm01

192.168.1.52 hm02

192.168.1.53 hs01

192.168.1.54 hs02

192.168.1.55 hs03

    1. 无密码ssh互访

各主机间可以ssh无密码互访。

ssh-keygen -t rsa或ssh-keygen -t rsa -P ""

保持默认,无密码。

chmod 711 .ssh

cat id_rsa.pub >> authorized_keys

chmod 644 authorized_keys

authorized_keys权限过低或过高均不可无密码访问。

scp id_rsa.pub hadoop@hm02:~/.ssh/id_rsa.pub.hm01

各主机相互cat id_rsa.pub.x。

或使用

ssh-copy-id hadoop@hm02,把公钥发给对方并自动追加。

    1. 删除自带java/msysql

需要root权限。

rpm -qa | grep java

rpm -qa | grep mysql

 

rpm -e --nodeps 查询到的包名

    1. 修改ulimit和nproc

需要root权限。

1、设置ulimit

vim /etc/security/limits.conf

* soft nofile 32768

* hard nofile 65536

配置文件最前面的是指domain,设置为星号(*)代表全局,也可以针对不同的用户做出不同的限制,将星号替换为用户名。

2、设置nproc

vim /etc/security/limits.d/90-nproc.conf

*  soft  nproc  2048

*  hard  nproc  10240

3、添加pam_limits.so

vim /etc/pam.d/login

session required pam_limits.so

否则,在/etc/security/limits.conf上的配置不会生效,重启。

    1. 关闭防火墙和selinux

需要root权限。

1、关闭防火墙等服务

chkconfig iptables off

chkconfig ip6tables off

chkconfig bluetooth off

chkconfig mdmonitor off

chkconfig postfix off

2、关闭SELinux

vim /etc/selinux/config

SELINUX=disabled

重启。

修改网卡名eth1改成eth0:

在/etc/udev/rules.d/70-persistent-net.rules被识别成了eth0,而虚拟机中的识别成了eth1。

解决方法:

1.编辑/etc/udev/rules.d/70-persistent-net.rules,找到与ifconfig -a得出的MAC相同的一行(NAME='eth1'这一行),把它改为"NAME=eth0 ",然后把上面一行(NAME='eth0')删除掉。

vim /etc/udev/rules.d/70-persistent-net.rules

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:bb:41:2b", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

2.编辑/etc/sysconfig/network-script/ifcfg-eth0,把MAC改为正确的,把UUID删掉。

3.编辑/etc/sysconf/network,把hostname也改一下。

4.重启生效。

    1. 时间同步

如果是在一台物理机上的不同虚拟机,时间差不多就不用设置了,如果是不同物理机必须设置。

1、检查是否安装

rpm -qa ntp

显示:ntp-4.2.6p5-1.el6.centos.x86_64,表示已经安装。

2、配置本地时间服务器

vi /etc/ntp.conf

#不变

driftfile /var/lib/ntp/drift

 

#不变

restrict default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

 

#不变

restrict 127.0.0.1

restrict -6 ::1

 

#NTP服务器允许更新的客户机地址范围

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

 

#公共时间服务器地址

server 0.centos.pool.ntp.org iburst

server 1.centos.pool.ntp.org iburst

server 2.centos.pool.ntp.org iburst

server 3.centos.pool.ntp.org iburst

 

#broadcast 192.168.1.255 autokey  # broadcast server

#broadcastclient         # broadcast client

#broadcast 224.0.1.1 autokey      # multicast server

#multicastclient 224.0.1.1     # multicast client

#manycastserver 239.255.254.254   # manycast server

#manycastclient 239.255.254.254 autokey # manycast client

 

# Enable public key cryptography.

#crypto

 

includefile /etc/ntp/crypto/pw

 

# Key file containing the keys and key identifiers used when operating

# with symmetric key cryptography.

keys /etc/ntp/keys

 

# Specify the key identifiers which are trusted.

#trustedkey 4 8 42

 

# Specify the key identifier to use with the ntpdc utility.

#requestkey 8

 

# Specify the key identifier to use with the ntpq utility.

#controlkey 8

 

# Enable writing of statistics records.

#statistics clockstats cryptostats loopstats peerstats

 

  1. zookeeper

hs01/hs02/hs03作为zks节点。

    1. 配置
      1. 环境变量

编辑环境变量文件(.bashrc)

export ZOO_HOME="/home/hadoop/soft/zookeeper-3.4.5"

export ZOO_LOG_DIR="/home/hadoop/work/zookeeper/logs"

 

export PATH="${ZOO_HOME}/bin:${PATH}"

      1. zoo.cfg

vi conf/zoo.cfg

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

dataDir=/home/hadoop/work/zookeeper

 

# the port at which the clients will connect

clientPort=8501

 

server.1=hs01:8502:8503

server.2=hs02:8502:8503

server.3=hs03:8502:8503

minSessionTimeout=10000

maxSessionTimeout=60000

maxClientCnxns=20500

还有一个需要注意

zookeeper不会主动的清除旧的快照和日志文件,这个是操作者的责任。但是可以通过命令去定期的清理。

#!/bin/bash

 

#snapshot file dir

dataDir=/opt/zookeeper/zkdata/version-2

#tran log dir

dataLogDir=/opt/zookeeper/zkdatalog/version-2

 

#Leave 66 files

count=66

count=$[$count+1]

ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f

ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f

 

#以上这个脚本定义了删除对应两个目录中的文件,保留最新的66个文件,可以将它写到crontab中,设置为每天凌晨2点执行一次就可以了。

 

#zk log dir  del the zookeeper log

#logDir=

#ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f

 

也可以在zoo.cfg中配置两个参数:

autopurge.purgeInterval,这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。

autopurge.snapRetainCount,这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。

 

      1. 工作目录

在hs01/hs02/hs03上执行。

mkdir -p /home/hadoop/work/zookeeper

mkdir -p /home/hadoop/work/zookeeper/logs

 

在work/zookeeper下,新建一个myid文件,将本机器对应的server.N的数字N写入此文件。

hs01对应1,hs02对应2,hs03对应3。

    1. 分发

scp到目标主机。

    1. 启动

在hs01/hs02/hs03上执行。

zkServer.sh start

    1. 验证

在hs01/hs02/hs03上执行。

zkServer.sh status

查看状态,有leader,follower即是正常。

zkCli.sh -server hs01:8501

连接zk服务器。

    1. 停止

在hs01/hs02/hs03上执行。

zkServer.sh stop

 

  1. hdfs

hm01/hm02互备NN,hs01/hs02/hs03作为DN。

    1. 配置
      1. 环境变量

环境变量文件(.bashrc)

export HADOOP_HOME="/home/hdp/soft/hadoop"

export PATH="${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${PATH}"

      1. hadoop-env.sh

在hadoop/etc/hadoop目录下。

hadoop-env.sh示例:

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

export HADOOP_LOG_DIR="/home/hadoop/work/hadoop/logs"

export HADOOP_PID_DIR="/home/hadoop/work/hadoop/pids"

 

export HADOOP_HEAPSIZE=6000

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

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

# Where log files are stored.  $HADOOP_HOME/logs by default.

#本地库压缩

export LD_LIBRARY_PATH="${HADOOP_HOME}/lib/native/:${HADOOP_HOME}/share/hadoop/common/lib:${LD_LIBRARY_PATH}"

说明:

LIBRARY_PATH,在程序编译期指定查找共享库(动态链接库)的路径。

LD_LIBRARY_PATH,在程序加载运行期指定查找共享库(动态链接库)时,除了系统默认路径(/lib,/usr/lib)之外的其它路径。

 

      1. hdfs-site.xml

配置项说明:

配置项名称

配置项说明

默认值

建议值

dfs.nameservices

集群标识,可以随便取,后面的所有配置要一致。

 

myhdcluster

dfs.ha.namenodes.myhdcluster

该集群namenode两个主备节点的名称标识。配置格式【名称1,名称2】

 

nn1,nn2

dfs.namenode.rpc-address.myhdcluster.nn1

nn1节点的提供rpc服务的端口。配置格式【主机名称:端口】

 

hm01:8020

dfs.namenode.rpc-address.myhdcluster.nn2

nn2节点的提供rpc服务的端口。配置格式【主机名称:端口】

 

hm02:8020

dfs.namenode.http-address.myhdcluster.nn1

nn1节点监控http服务的端口。配置格式【主机名称:端口】

 

hm01:8570

dfs.namenode.http-address.myhdcluster.nn2

nn2节点监控http服务的端口。配置格式【主机名称:端口】

 

hm02:8570

dfs.datanode.http-address

datanode节点监控http服务的端口。配置格式【主机名称:端口】

 

0.0.0.0:8575

dfs.namenode.shared.edits.dir

Namenode日志存储服务端口。qjournal://host1:端口;host2:端口;…/集群标识名

 

qjournal://hs01:8485;hs02:8485;hs03:8485/myhdcluster

dfs.journalnode.edits.dir

元数据日志存储目录。配置格式【绝对路径】

 

/home/hadoop/work/hadoop/jdata

dfs.permissions.enabled

用户权限控制启动开关。

true

false,不配置多租户,可设为false

dfs.replication

文件副本数。

3

3

dfs.namenode.name.dir

元数据存储路径。配置格式【file://绝对路径】

 

file:///home/hadoop/work/hadoop/meta

dfs.datanode.data.dir

数据节点数据存储路径。配置格式【file://绝对路径】

 

file:///home/hadoop/work/hadoop/data

dfs.ha.automatic-failover.enabled

NameNode自动切换的功能开关。配置格式【ture/false】

 

true

dfs.client.failover.proxy.provider.myhdcluster

失败代理,配置文件中没有。

少了会报unknown host错误

 

org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

dfs.client.read.shortcircuit

允许本地读取datanode块文件开关。配置格式【ture/false】

false

false

dfs.block.local-path-access.user

指定允许本地读取块的用户,同dfs.client.read.shortcircuit搭配使用

 

hdp

dfs.datanode.hdfs-blocks-metadata.enabled

 

false

使用默认即可

dfs.datanode.data.dir.perm

 

700

不配置多租户的话,使用默认700即可

dfs.client.file-block-storage-locations.timeout.millis

 

1000

使用默认即可

dfs.namenode.handler.count

Namenode上用于处理客户端,datanode的RPC的线程个数

10

集群大则该参数调大

dfs.datanode.handler.count

Datanode上用于处理RPC的线程个数

3

集群大则该参数调大

dfs.blocksize

块大小设置

128m

256m,如果大部分文件都是小于256m,这个参数可以适当调小

dfs.datanode.max.transfer.threads

Hadoop允许打开最大文件数,默认4096,不设置会提示xcievers exceeded错误

 

409600

dfs.image.transfer.bandwidthPerSec

当ha失败时,备节点会同步主节点的edit日志。如果edit文件较多,备节点会频繁访问journalnode。而同步带宽不限制,将会把journalnode带宽占完,导致主节点无法访问journalnode,超时挂掉。

0

1048576

设置为1MB,可根据宽带情况调整。

dfs.domain.socket.path

本地hdfs和dn的通信端口。

 

/home/hdp/work/hadoop/hdfs-sockets/dn._PORT

 

hdfs-site.xml示例:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<!--hdfs的nameservice和core-site.xml一致 -->

<property>

<name>dfs.nameservices</name>

<value>myhdcluster</value>

</property>

<!--namenode的名字-->

<property>

<name>dfs.ha.namenodes.myhdcluster</name>

<value>nn1,nn2</value>

</property>

<!-- nn1的RPC通信地址 -->

<property>

<name>dfs.namenode.rpc-address.myhdcluster.nn1</name>

<value>hm01:8020</value>

</property>

<!-- nn2的RPC通信地址 -->

<property>

<name>dfs.namenode.rpc-address.myhdcluster.nn2</name>

<value>hm02:8020</value>

</property>

<!-- nn1的http通信地址 -->

<property>

<name>dfs.namenode.http-address.myhdcluster.nn1</name>

<value>hm01:8570</value>

</property>

<!-- nn2的http通信地址 -->

<property>

<name>dfs.namenode.http-address.myhdcluster.nn2</name>

<value>hm02:8570</value>

</property>

<!--datanode数据http访问地址-->

<property>

<name>dfs.datanode.http.address</name>

<value>0.0.0.0:8575</value>

</property>

<!-- JournalNode对NameNode的目录进行共享时,存储数据的路径 -->

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/hdp/work/hadoop/jdata</value>

</property>

<!--NN在JN的共享路径下的目录名-->

<property>

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

<value>qjournal://hs01:8485;hs02:8485;hs03:8485/myhdcluster</value>

</property>

 

<property>

<name>dfs.permissions.enabled</name>

<value>false</value>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

 

<property>

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

<value>file:///home/hdp/work/hadoop/meta</value>

</property>

<property>

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

<value>file:///home/hdp/work/hadoop/data</value>

</property>

 

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<property>

<name>dfs.client.failover.proxy.provider.myhdcluster</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

 

<property>

<name>dfs.client.read.shortcircuit</name>

<value>true</value>

</property>

<property>

<name>dfs.block.local-path-access.user</name>

<value>hdp</value>

</property>

<property>

<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>

<value>true</value>

</property>

<property>

<name>dfs.client.use.legacy.blockreader.local</name>

<value>true</value>

</property>

<property>

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

<value>750</value>

</property>

<property>

<name>dfs.client.file-block-storage-locations.timeout.millis</name>

<value>50000</value>

</property>

<property>

<name>dfs.datanode.max.transfer.threads</name>

<value>409600</value>

</property>

 

</configuration>

 

      1. core-site.xml

配置项说明:

名称

说明

默认值

建议值

fs.defaultFS

集群名称标识,需要配置同hdfs-site.xml保持一致

 

myhdcluster

ha.zookeeper.quorum

指定ha用于连接的Zookeeper集群信息。配置格式【主机名1:端口,主机名2:端口,..】

 

hs01:8501,hs02:8501,hs03:8501

io.compression.codecs

压缩和解压缩的方式设置

 

org.apache.hadoop.io.compress.SnappyCodec

hadoop.tmp.dir

临时数据目录,建议不要设置到/tmp目录下

 

/home/hdp/work/hadoop/tmp

hadoop.http.staticuser.user

web统计用户

 

hdp

io.file.buffer.size

设置SequenceFile中用到的读/写缓存大小。要设置为系统页面大小的倍数,以byte为单位,默认值4KB(4096)。

4096

65535

dfs.ha.fencing.methods

隔离机制

 

sshfence

dfs.ha.fencing.ssh.private-key-files

隔离机制免密码私钥文件

 

/home/hdp/.ssh/id_rsa

fs.trash.interval

垃圾回收时间,分钟

0

10080

ha.failover-controller.cli-check.rpc-timeout.ms

ha在失败时的超时时间。

20000

60000

ipc.client.connect.timeout

namenode连接JN的超时时间。

20000

60000

ipc.client.connect.retry.interval

namenode连接JN的时间间隔

1000

10000

ipc.client.connect.max.retries

namenode连接JN的次数,少了可能还没有连上。

10

100

 

core-site.xml示例

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

 

<property>

<name>fs.defaultFS</name>

<value>hdfs://myhdcluster</value>

</property>

<property>

<name>ha.zookeeper.quorum</name>

<value>hs01:8501,hs02:8501,hs03:8501</value>

</property>

<property>

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

<value>/home/hdp/work/hadoop/tmp</value>

</property>

<property>

<name>hadoop.http.staticuser.user</name>

<value>hdp</value>

</property>

<!--指定可以在任何IP访问-->

<property>

<name>hadoop.proxyuser.hduser.hosts</name>

<value>*</value>

</property>

<!--指定所有用户可以访问-->

<property>

<name>hadoop.proxyuser.hduser.groups</name>

<value>*</value>

</property>

<!--io缓冲大小-->

<property>

<name>io.file.buffer.size</name>

<value>65535</value>

</property>

 

<!-- 隔离机制-->

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

</property>

<!-- 使用隔离机制时需要ssh免密码登陆 -->

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/home/hdp/.ssh/id_rsa</value>

</property>

 

<!--本地库压缩,主要使用snappy,多个可用逗号分隔-->

<property>

  <name>io.compression.codecs</name>

  <value>org.apache.hadoop.io.compress.SnappyCodec</value>

</property>

 

</configuration>

      1. 指定slaves

vi slaves

hs01

hs02

hs03

每个datanode机器名字一行。

      1. 工作目录

mkdir -p /home/hdp/work/hadoop/logs

mkdir -p /home/hdp/work/hadoop/pids

mkdir -p /home/hdp/work/hadoop/jdata

mkdir -p /home/hdp/work/hadoop/meta

mkdir -p /home/hdp/work/hadoop/data

mkdir -p /home/hdp/work/hadoop/tmp

 

      1. nativelib

本地库(zlib,gzip)用于文件压缩,Hadoop默认启用本地库,从$HADOOP_HOME/lib/native/中加载本地库,还需要配置mapred-site.xml。

验证:hadoop checknative

如果加载成功,输出为:

17/06/28 10:28:54 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native

17/06/28 10:28:54 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library

Native library checking:

hadoop:  true /home/hadoop/soft/hadoop/lib/native/libhadoop.so.1.0.0

zlib:    true /lib64/libz.so.1

snappy:  true /usr/lib64/libsnappy.so.1

lz4:     true revision:10301

bzip2:   true /lib64/libbz2.so.1

openssl: true /usr/lib64/libcrypto.so

    1. 分发

如果不用mapreduce和yarn,此时就可分发程序。

scp hadoop整个目录到其它机器。

scp -r hadoop/ hdp@hm02:~/soft

    1. 格式化

首次启动前先格式化hdfs,NameNode基于Quorum Base共享存储方案,必须先启动JournalNode,以便QuorumJournalManager同步数据。

      1. 启动zks

在hs01/hs02/hs03上启动zookeeper。

zkServer.sh start

      1. 启动JournalNode

在JN节点hs01/hs02/hs03上启动。

hadoop-daemon.sh start journalnode

      1. 格式化主namenode

在hm01上格式化HDFS的namenode节点。

hdfs namenode -format

在倒数第7行左右出现:

INFO common.Storage: Storage directory /home/hdp/work/hadoop/meta has been successfully formatted.

该指令执行成功后,在dfs.namenode.name.dir配置项(配置值为:/home/hdp/work/hadoop/meta)目录下会生成子目录和文件。

      1. 启动主namenode

启动在hm01上的namenode。

hadoop-daemon.sh start namenode

      1. 同步备namenode

在hm02上执行命令

hdfs namenode -bootstrapStandby

至此,HDFS集群初始化完毕。

      1. 启动备namenode

启动hm02上的namenode。

hadoop-daemon.sh start namenode

      1. 格式化zkfc

在hm01上格式化ZooKeeper集群,目的是在ZooKeeper上建立HA的相应节点,用于保存hadoop集群中NameNode的状态数据。

hdfs zkfc -formatZK

      1. 启动zkfc

在hm01/hm02上执行。

hadoop-daemon.sh start zkfc

通过页面可以检查namenode的节点状态。

http://hm01:8570

一个是active,一个是standby。

      1. 停止NN,JN,ZKFC

在hm01/hm02上执行。

hadoop-daemon.sh stop namenode

hadoop-daemon.sh stop zkfc

 

在hs01/hs02/hs03上执行。

hadoop-daemon.sh stop journalnode

集群准备好正常启动。

    1. 启动
      1. 集群启动

在hm01上执行。

如果集群启动有问题,就修改sh文件,调顺序,journalnamenodezkfcdatanodeyarn

start-dfs.sh

      1. 单点启动

1、在hs01/hs02/hs03上执行。

zkServer.sh start

hadoop-daemon.sh start journalnode

2、在hm01/hm02上执行。

hadoop-daemon.sh start namenode

hadoop-daemon.sh start zkfc

3、在hs01/hs02/hs03上执行。

hadoop-daemon.sh start datanode

    1. 验证

1、在hm01上执行,检查文件存储。

hadoop fs -put hdfs-site.xml /

hadoop fs -ls /

hadoop fs -cat /hdfs-site.xml

能够正确查看到文件内容为正常。

2、查看ha状态。

http://hm01:8570,是active。

http://hm02:8570,是standby。

或命令

hdfs haadmin -getServiceState nn1

hdfs haadmin -getServiceState nn2

3、切换ha

在hm01上执行

hadoop-daemon.sh stop namenode

手动切换到active,配置自动切换就不能用手动了。

hdfs haadmin -transitionToActive nn1 --forceactive

手动切换到standby

hdfs haadmin -transitionToStandby nn1 --forceactive

4、新加datanode,做集群负载重均衡

start-balancer.sh -threshold 8 #指DN磁盘利用率,默认10。

5、检测压缩本地库

在任意机器上执行。

hadoop checknative

 

    1. 停止
      1. 集群停止

在hm01上执行。

stop-dfs.sh

      1. 单点停止

1、在hm01/hm02上执行。

hadoop-daemon.sh stop namenode

hadoop-daemon.sh stop zkfc

2、在hs01/hs02/hs03上执行。

hadoop-daemon.sh stop datanode

hadoop-daemon.sh stop journalnode

zkServer.sh stop

  1. yarn

hm01/hm02互备RM,hs01/hs02/hs03作为NM。

    1. 配置
      1. mapred-env.sh

export HADOOP_MAPRED_LOG_DIR=/home/hdp/work/hadoop/logs

export HADOOP_MAPRED_PID_DIR=/home/hdp/work/hadoop/pids

 

export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000

export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA

export HADOOP_JOB_HISTORYSERVER_OPTS="-Dmapreduce.hs.audit.logger=INFO,HSAUDIT $HADOOP_JOB_HISTORYSERVER_OPTS"

 

      1. mapred-site.xml

MRv2重新命名了MRv1中的所有配置参数,但兼容MRv1中的旧参数。

MRv2参数以【mapreduce】开头,MRv1参数以【mapred】开头。

名称

说明

默认值

建议值

io属性

mapreduce.task.tmp.dir

task的临时目录

./tmp

/home/hdp/work/hadoop/mapred/tmp

mapreduce.map.cpu.vcores

每个map task可申请的虚拟cpu数

1

1

mapreduce.reduce.cpu.vcores

每个reduce task可申请的虚拟cpu数

1

1

mapreduce.jobtracker.persist.jobstatus.dir

job状态信息

/jobtracker/jobsInfo

/home/hdp/work/hadoop/mapred/jobstatus

mapreduce.output.fileoutputformat.compress

是否对job启用压缩

false

true

mapreduce.output.fileoutputformat.compress.type

压缩类型,NONE, RECORD or BLOCK

RECORD

RECORD

mapreduce.output.fileoutputformat.compress.codec

压缩编码,用的snappy要提前编译进Hadoop

org.apache.hadoop.io.compress.DefaultCodec

org.apache.hadoop.io.compress.SnappyCodec

mapreduce.map.output.compress

是否对map压缩

false

true

mapreduce.map.output.compress.codec

压缩编码

org.apache.hadoop.io.compress.DefaultCodec

org.apache.hadoop.io.compress.SnappyCodec

MR YARN Application

mapreduce.framework.name

执行mr程序的框架

local

yarn

yarn.app.mapreduce.am.staging-dir

提交job的临时目录

/tmp/hadoop-yarn/staging

/home/hdp/work/hadoop/mapred/staging

Job Notification

yarn.app.mapreduce.am.resource.mb

MR AppMaster的总内存

1536

2048

yarn.app.mapreduce.am.resource.cpu-vcores

MR AppMaster需要的虚拟cpu数

1

1

mapreduce.application.classpath

MR applications的classpath,逗号分隔

${HADOOP_HOME}/share/hadoop/mapreduce/*,${HADOOP_HOME}/share/hadoop/mapreduce/lib/*

 

mapreduce.app-submission.cross-platform

可否跨平台提交任务

false

true

jobhistory

mapreduce.jobhistory.intermediate-done-dir

mr历史记录临时目录

${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate

/home/hdp/work/hadoop/mapred/jobhisim

mapreduce.jobhistory.done-dir

mr历史记录完成目录

${yarn.app.mapreduce.am.staging-dir}/history/done

/home/hdp/work/hadoop/mapred/jobhisdone

 

示例

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

 

<!-- io 属性 -->

<property>

<name>mapreduce.task.tmp.dir</name>

<value>/home/hdp/work/hadoop/mapred/tmp</value>

</property>

<property>

<name>mapreduce.jobtracker.persist.jobstatus.dir</name>

<value>/home/hdp/work/hadoop/mapred/jobstatus</value>

</property>

 

<!--用本地库压缩-->

<!-- job output压缩 -->

<property>

    <name> mapreduce.output.fileoutputformat.compress</name>

    <value>true</value>

</property>

<property>

    <name>mapreduce.output.fileoutputformat.compress.type</name>

    <value>RECORD</value>

</property>

<property>

    <name>mapreduce.output.fileoutputformat.compress.codec</name>

    <value>org.apache.hadoop.io.compress.SnappyCodec</value>

</property>

 

<!--map output压缩-->

<property>

    <name>mapreduce.map.output.compress</name>

    <value>true</value>

</property>

<property>

    <name>mapreduce.map.output.compress.codec</name>

    <value>org.apache.hadoop.io.compress.SnappyCodec</value>

</property>

 

<!-- MR YARN Application -->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>yarn.app.mapreduce.am.staging-dir</name>

<value>/home/hdp/work/hadoop/mapred/staging</value>

</property>

 

<!-- Job Notification -->

<property>

<name>yarn.app.mapreduce.am.resource.mb</name>

<value>2048</value>

</property>

<!--可让客户端在window下运行-->

<property>

<name>mapreduce.app-submission.cross-platform</name>

<value>true</value>

</property>

 

<!-- jobhistory -->

<property>

<name>mapreduce.jobhistory.intermediate-done-dir</name>

<value>/home/hdp/work/hadoop/mapred/jobhisim</value>

</property>

<property>

<name>mapreduce.jobhistory.done-dir</name>

<value>/home/hdp/work/hadoop/mapred/jobhisdone</value>

</property>

 

</configuration>

      1. yarn-env.sh

如果仅启动HDFS,则无需配置文件。

名称

说明

默认值

建议值

JAVA_HOME

指明JDK目录

系统jdk目录

/home/hadoop/soft/jdk1.8.0

YARN_HEAPSIZE

进程分配最大内存空间大小,根据主机内存来确定,单位M

1000

主机上面所有yarn进程使用的内存最大量,如果涉及到复用部署(例如,rm和nm部署在同一台主机上),若单独指定了rm和nm的内存使用量,该值应大于复用进程内存使用量之和。

YARN_RESOURCEMANAGER_OPTS

resoucemanager启动加载参数

 

建议在该参数中设置rm的虚拟机参数

YARN_RESOURCEMANAGER_HEAPSIZE

Resoucemanager进程分配最大内存空间大小,根据主机内存来确定,单位M

1000

主机上面rm进程使用的内存最大量, 建议值2G

YARN_NODEMANAGER_OPTS

nodemanager启动加载参数

 

建议在该参数中设置nm的虚拟机参数

YARN_NODEMANAGER_HEAPSIZE

nodemanager进程分配最大内存空间大小,根据主机内存来确定,单位M

1000

主机上面rm进程使用的内存最大量,建议值2G,主机其它内存留于container

YARN_LOG_DIR

进程日志存放目录

$HADOOP_HOME/logs

 

YARN_PID_DIR

进程当前进程号存放目录

/tmp

 

 

yarn-env.sh示例

# User for YARN daemons

export HADOOP_YARN_USER=${HADOOP_YARN_USER:-yarn}

# resolve links - $0 may be a softlink

export YARN_CONF_DIR="${YARN_CONF_DIR:-$HADOOP_HOME/etc/hadoop}"

export YARN_LOG_DIR=/home/hadoop/work/hadoop/logs

export YARN_PID_DIR=/home/hadoop/work/hadoop/pids

 

# some Java parameters

#export JAVA_HOME=/home/hadoop/soft/jdk1.8.0

if [ "$JAVA_HOME" != "" ]; then

  #echo "run java in $JAVA_HOME"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值