主机名 |
IP |
系统版本 |
Hadoop node |
hadoop进程名 |
master.hadoop |
192.168.0.1 |
CetOS 6.4 |
master |
namenode,resourcemanager |
slave1.hadoop |
192.168.0.2 |
CetOS 6.4 |
slave1 |
datanode,datamanager |
slave2.hadoop |
192.168.0.3 |
CetOS 6.4 |
slave2 |
datanode,datamanager |
slave3.hadoop |
192.168.0.4 |
CetOS 6.4 |
slave3 |
datanode,datamanager |
分别在master和slave上新建hadoop用户。
#useradd hadoop #passwd hadoop
下载jdk-6u45-linux-x64.bin,修改文件权限使其可执行,然后执行下面命令:
#/bin/bash jdk-7u21-linux-x64 #mv jdk1.7.0_21 /usr/local/
改变Java的权限,赋予hadoop用户读写执行权限
chown hadoop:hadoop jdk1.7.0_21 -R
添加java环境变量:
#vim /etc/profile
#文件最后添加
# set java environment export JAVA_HOME=/usr/local/jdk1.7.0_21/ export JRE_HOME=/usr/local/jdk1.7.0_21/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
生效java变量:
#source /etc/profile # java -version java version "1.7.0_21" Java(TM) SE Runtime Environment (build1.7.0_21-b06) Java HotSpot(TM) 64-Bit Server VM(build 20.21-b01, mixed mode)
配置网络参数:
以主节点为例,在master主机上,终端vim打开/etc/sysconfig/nework-scripts/ifcfg-eth0 添加IP地址信息:
IPADDR=192.168.0.1 PREFIX=24
配置完个节点网络参数后,执行下面的命令使修改生效:
service network restart配置hosts文件:
这个文件是用来配置主机用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName和IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。
主节点机器上,/etc/hosts"文件末尾中都要添加如下内容:
192.168.0.1 master.hadoop 192.168.0.2 slave1.hadoop 192.168.0.3 slave2.hadoop 192.168.0.4 slave3.hadoop从节点机器上,只添加主节点信息和本机信息,这里以slave1为例:
192.168.0.1 master.hadoop 192.168.0.2 slave1.hadoop
master作为客户端,要实现无密码公钥认证,连接到服务器slave上时,需要在master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的slave上。当master通过SSH连接slave时,slave就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给master。master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端master复制到slave上。
在master节点上执行以下的命令:
ssh-keygen –t rsa
此命令用于生成其无密码密钥对,一直回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。
接着把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),用root用户修改"/etc/ssh/sshd_config"的内容。具体操作如下:
改变权限(这一点必须注意,主从节点上权限必须改成这个,不然无法实现无密码ssh登录)
chmod 600 ~/.ssh/authorized_keys
配置ssh
打开文件/etc/ssh/sshd_config,修改如下的选项:
RSAAuthenticationyes # 启用RSA 认证 PubkeyAuthenticationyes # 启用公钥私钥配对认证方式 AuthorizedKeysFile.ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
重启ssh服务:
service sshd restart
把公钥复制所有的slave机器上
使用如下的命令:
scp ~/.ssh/authorized_keys hadoop@远程服务器IP:~/
复制到slave后,在"/home/hadoop/"下创建".ssh"文件夹,然后是修改文件夹".ssh"的用户权限,把权限修改为"700",将authorized_keys移动到.ssh目录下,并修改权限为644
chmod 644 ~/.ssh/authorized_keys
然后用root用户修改"/etc/ssh/sshd_config"。具体步骤参考前面master中的设置。设置完成后,重启ssh服务。
然后ssh登录slave,如果出现:
Agent admit failure to sign using the key
在主节点上需要添加ssh的私钥到列表,执行下面的命令:
ssh-add ~/.ssh/id_isa
安装hadoop
首先用root用户登录master节点,解压缩hadoop-2.6 .tar.gz到/usr/local下,修改文件目录为hadoop。然后把"/usr/local/hadoop“的读写执行权限分配给hadoop用户:
chown hadoop:hadoop/usr/local/hadoop -R
把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件,将以下语句添加到末尾,并使其有效:
# set hadoop path exportHADOOP_HOME=/usr/hadoop exportPATH=$PATH :$HADOOP_HOME/bin
在/usr/local目录下新建hadoopdata目录,用于hdfs数据存放
mkdir -p /usr/local/hadoopdata
配置hadoop,所有的配置文件均在"/usr/local/hadoop/etc/hadoop"目录下。
配置hadoop-env.sh
在文件的末尾添加下面内容:
# set java environment export JAVA_HOME=/usr/local/jdk1.7.0_21/
配置core-site.xml文件
修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号。
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoopdata</value> <!--<description>A base for other temporary directories.</description>--> </property> <!-- file system properties --> <property> <name>fs.defaultFS</name> <value>hdfs://master.hadoop:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.native.lib</name> <value>true</value> </property> <property> <name>fs.checkpoint.period</name> <value>3600</value> <description>The number of seconds between two periodic checkpoints.</description> </property> <property> <name>fs.checkpoint.size</name> <value>67108864</value> <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired. </description> </property> <property> <name>fs.checkpoint.dir</name> <value>/usr/local/hadoopdata/dfs/namesecondary</value> <description>Determines where on the local filesystem the DFS secondary namenode should store the temporary images to merge.If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy.</description> </property> <property> <name>hadoop.proxyuser.spark.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.spark.groups</name> <value>*</value> </property> </configuration>
配置hdfs-site.xml文件
<configuration> <property> <name>dfs.nameservices</name> <value>hadoop-cluster1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master.hadoop:50090</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///usr/local/hadoopdata/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///usr/local/hadoopdata/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
配置mapred-site.xml文件
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>master.hadoop:50030</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master.hadoop:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master.hadoop:19888</value> </property> <property> <name>mapred.job.tracker</name> <value>http://master.hadoop:9001</value> </property> </configuration>
配置yarn-site.xml
<span style="color:#000000;"><configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>master.hadoop</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master.hadoop:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master.hadoop:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master.hadoop:8035</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master.hadoop:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master.hadoop:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.https.address</name> <value>master.hadoop:8090</value> </property> </configuration></span>
配置masters文件
在配置目录下新建masters文件,写入master的ip地址,比如使用more命令查看masters文件的内容如下:
192.168.0.1配置slaves文件
192.168.0.2 192.168.0.3 192.168.0.4至此master节点上hadoop的配置完成。
接下来将配置好的hadoop文件主从节点之间通过nfs进行复制,同样在每个节点上将hadoop文件复制到/usr/local目录下。同时将java也复制到此目录下。然后将环境变量写到/etc/profile文件的末尾。修改hadoop以及java文件为hadoop用户所有。
至此完成了hadoop集群的搭建工作,接下来将会对其进行验证~~~