写在前面:
本例中的演示均为非 root 权限,所以有些命令行需要加 sudo,如果你是 root 身份运行,请忽略 sudo。
IP | 主机名 | 用户名 |
---|---|---|
192.168.30.130 | master | hadoop |
192.168.30.131 | slave1 | hadoop |
192.168.30.132 | slave2 | hadoop |
我们将搭建1个master,2个slave的集群方案。首先修改主机名vi/etc/hostname
在master上修改为master
,其中一个slave上修改为slave1
,另一个同理。
在每台主机上
修改host文件(注意是每台机子)
vi /etc/hosts
192.168.30.130 master
192.168.30.131 slave1
192.168.30.132 slave2
配置之后ping一下用户名看是否生效
ping master
ping slave1
ping slave2
所有节点
的防火墙其实就是一种RSA算法,将彼此的公钥放在要访问的电脑上,自己保存私钥,保存好不用再进行输入密码验证。说通俗一点就是将本电脑的信息和密码已经保存到要访问的电脑上,直接访问即可。
安装Openssh server
sudo apt-get install openssh-server
在所有机器上
都生成私钥和公钥(注意是每台机子)
ssh-keygen -t rsa #一路回车
~$ ls -a # 多了.ssh目录
~$ cd .ssh #进入.ssh目录
~$ ls #查看
在这个目录里会生成id_rsa和id_rsa.pub及know_hosts三个文件,如图:
需要让机器间都能相互访问,就把每个从节点机子上
的id_rsa.pub发给master节点,传输公钥可以用scp来传输。
scp ~/.ssh/id_rsa.pub hadoop@master:~/.ssh/id_rsa.pub.slave1
在master上,将所有公钥加到用于认证的公钥文件authorized_keys中
cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys
将公钥文件authorized_keys分发给每台slave
scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/
hadoop@master:~$ scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/
The authenticity of host 'slave1 (192.168.30.132)' can't be established. ECDSA key fingerprint is 24:00:02:d9:67:08:e8:92:ee:60:71:4e:4a:70:e9:58. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'slave1' (ECDSA) to the list of known hosts. hadoop@slave1's password:
authorized_keys 100% 4343 4.2KB/s 00:00
在每台机子上验证SSH无密码通信
ssh master
ssh slave1
ssh slave2
如果登陆测试不成功,则可能需要修改文件authorized_keys的权限
chmod 600 ~/.ssh/authorized_keys
同样操作需要在所有节点上执行
)hadoop是用Java语言开发的分布式计算框架,所以集群中的每个节点需要安装JDK
首先把下载的jdk文件放到/usr/local目录下创建的java文件夹
~$ sudo mkdir /usr/local/java
tar -zxvf jdk-8u74-linux-x64.tar.gz
修改环境变量sudo vi /etc/profile
,添加下列内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_74
export JRE_HOME=/usr/local/java/jdk1.8.0_74/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
然后使环境变量生效,并验证 Java 是否安装成功
$ source /etc/profile #生效环境变量
$ java -version #如果打印出如下版本信息,则说明安装成功
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
下载hadoop-2.6.0.tar.gz到master节点的桌面上
$ sudo scp hadoop-2.2.0.tar.gz /usr/local #将其复制到/usr/local
/usr/local$ sudo tar -zxvf hadoop-2.2.0.tar.gz #解压
/usr/local$ sudo mv hadoop-2.2.0 hadoop # 将解压生成的文件重命名为hadoop
/usr/local$ sudo chown -R hadoop:hadoop hadoop #将hadoop文件夹的权限赋予hadoop用户
cd /usr/local/hadoop/etc/hadoop进入hadoop配置目录,需要配置有以下7个文件:hadoop-env.sh,yarn-env.sh,slaves,core-site.xml,hdfs-site.xml,maprd-site.xml,yarn-site.xml
1、在hadoop-env.sh中配置JAVA_HOME
#The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_74
2、在yarn-env.sh中配置JAVA_HOME
#some Java parameters
export JAVA_HOME=/usr/local/java/jdk1.8.0_74
3、在slaves中配置slave节点的ip或者host,
slave1
slave2
4、修改core-site.xml
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000/</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
</configuration>
5、修改hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
6、修改mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7、修改yarn-site.xml
<configuration>
<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:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
将配置好的hadoop-2.6.0文件夹分发给所有slaves吧
在 Master 节点上执行:
cd /usr/local
sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/* # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz slave1:/home/hadoop
scp ./hadoop.master.tar.gz slave2:/home/hadoop
在 Slave1 节点上执行:
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
修改/etc/environment文件
在各节点上
操作:
~$ vim /etc/environment
加入JAVA_HOME和JAVA_INSTALL路径,并在PATH路径中添加“:/usr/local/hadoop/bin:/usr/local/hadoop/sbin”
JAVA_HOME=/usr/local/java/jdk1.8.0_74
JAVA_INSTALL=/usr/local/hadoop
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/hadoop/bin:/usr/local/hadoop/sbin"
~
在 master 上执行以下操作,就可以启动 hadoop 了。
cd ~ /usr/local/hadoop
bin/hadoop namenode -format #格式化namenode
sbin/start-dfs.sh #启动dfs
sbin/start-yarn.sh #启动yarn
可以通过jps命令查看各个节点启动的进程是否正常。在 master 上应该有以下几个进程:
$ jps #run on master
3407 SecondaryNameNode
3218 NameNode
3552 ResourceManager
3910 Jps
在每个slave上应该有以下几个进程:
$ jps #run on slaves
2072 NodeManager
2213 Jps
1962 DataNode
或者在浏览器中输入 http://master:8088
,应该有 hadoop 的管理界面出来了,并能看到 slave1 和 slave2 节点
注:在这个文件中添加linux主机名和IP的映射关系
C:\Windows\System32\drivers\etc\hosts
192.168.30.130 master