一、配置统一的hostname
为了方便管理,我采用host方式来映射每台机器。配置如下:
10.0.0.6 zh6 (NameNode)
10.0.0.8 zh8 (Secondary NameNode)
10.0.0.9 zh9 (DataNode)
10.0.0.10 zh10 (DataNode)
当然四台机器的名字都要修改为响应zh+ip最后位的数字。然后将该host配置复制到每台机器上,修改hosts配置。
二、SSH免密钥登录
这一步是一定要做的,不然后面启动后会不停报错而终止。应为机器间互相有数据访问,但是好像不能自动输入密钥,也没有类似的配置可以设置机器间的密钥。所以SSH公钥授权的方式还是比较方便和安全的。一般我只会配置NameNode到所有DataNode的SSH面密钥登陆就可以了,但是是双向的,DataNode到NameNode也要配置。下面是一台机器的设置方法,每台机器设置方法相同,不一一举例了。
进入当前用户的.ssh目录
#cd ~/.ssh (我是root用户,所以是在/root/.ssh/目录下,如果没有可以手动创建一个)
生成ssh密钥
#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ce:27:21:b5:9c:50:89:53:df:6a:8b:b1:f5:27:93:ad root@zh6
The key's randomart image is:
+--[ RSA 2048]----+
| oo. |
| o... . |
| ... . . |
| + o . |
| . S + |
| + B o o |
| * o = o |
| o = |
| E |
+-----------------+
拷贝公钥到目标机器
#ssh-copy-id -i root@zh8
测试一下登录成功拷贝公钥到目标机器
#ssh-copy-id -i root@zh8
The authenticity of host 'zh8 (10.0.0.8)' can't be established.
RSA key fingerprint is c0:56:23:35:09:65:17:91:fd:6b:07:6f:2f:bb:d0:f0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'zh8,10.0.0.8' (RSA) to the list of known hosts.
root@zh8's password:
Now try logging into the machine, with "ssh 'root@zh8'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
#ssh zh8
基本需要配置一下登陆关系:
zh6->zh6
zh6->zh8
zh6->zh9
zh6->zh10
zh8->zh8
因为使用了host,所以访问本机也需要设置免密钥登陆。
三、配置JDK
应为要使用Java,所以必须要配置JDK。这里我使用的版本是:jdk1.7.0_25
首先到官网下载jdk包,解压到指定目录。然后添加环境变量。
#vim /etc/profile
在文件的末尾添加如下内容:
# JDK
export JAVA_HOME=/local/server/jdk1.7.0_25
export JAVA_BIN=/local/server/jdk1.7.0_25/bin
export CLASSPATH=.:$CALSSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/calsses12.jar
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jre
使环境变量文件生效:
#source /etc/profile
测试一下:
#java -version
使环境变量文件生效:
#source /etc/profile
测试一下:
#java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
OK, 配置成功!同样的方式在每台机器上进行配置。
OK, 配置成功!同样的方式在每台机器上进行配置。
四、Hadoop配置
公共配置
slaves :
zh9
zh10
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://zh6:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/temp/hadoop-${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
hadoop-env.sh添加JAVA_HOME
export JAVA_HOME=/local/server/jdk1.7.0_25
mapred-env.sh
export JAVA_HOME=/local/server/jdk1.7.0_25
mapred-site.xml
yarn-env.sh
export JAVA_HOME=/local/server/jdk1.7.0_25
yarn-site.xml
创建目录:
#mkdir /data/hadoop/temp
NameNode和Secondary NameNode配置export JAVA_HOME=/local/server/jdk1.7.0_25
mapred-env.sh
export JAVA_HOME=/local/server/jdk1.7.0_25
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>zh6:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>zh6:19888</value>
</property>
</configuration>
yarn-env.sh
export JAVA_HOME=/local/server/jdk1.7.0_25
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>zh6</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
</property>
</configuration>
创建目录:
#mkdir /data/hadoop/temp
masters
zh6
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/name</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>zh8:50090</value>
<description>The secondary namenode http server address and port.</description>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/local/server/hadoop/etc/hadoop/excludes</value>
</property>
</configuration>
注:/local/server/hadoop/etc/hadoop/excludes 该文件是动态删除节点用的,如果不需要就删除该配置,或手动添加文件,名字可以随意,只要与配置文件一致即可。
创建目录:
#mkdir /data/hadoop/name
DataNode配置
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/data</value>
</property>
</configuration>
创建目录:
#mkdir /data/hadoop/data
到这里基本的配置就可以了,其他基本默认就可以,如果有特殊的要求,可以再添加配置。另外可以将配置文件做成多节点同步,这样如果节点多了,修改配置文件会方便一些,也减少因为配置遗漏导致异常抛出。
在正式启动集群之前,还要检查一个问题,每个机器的防火墙是否开启。如果开启的话,后面肯定无法正常启动。所以,要么关掉,要么就配置好白名单。
格式化NameNode:
#bin/hadoop namenode -format
格式化之前/data/hadoop/name目录是空的,格式化以后会生成current目录,里面包含文件系统的各种信息。
(责任编辑:管理员)