安装jdk
我们现在一台虚拟机上安装jdk,然后再进行克隆
先卸载原有的jdk,重新安装与你的hadoop相配的版本,我这里选用的是jdk1.8.0_181将jdk文件放到你想要的目录(一般为/usr/local/java),随后配置环境变量
编辑/etc/profile文件,在末尾添加
JAVA_HOME=/usr/local/java/jdk1.8.0_181
JRE_HOME=/usr/local/java/jdk1.8.0_181/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
export PATH JAVA_HOME CLASSPATH
随后使配置文件生效
source /etc/profile
最后测试是否配置成功java -version
出现版本信息说明没有问题
网络准备
因为需要配置ssh免密登录,所以我们需要配置静态IP
打开/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:A7:A4:06
IPADDR=192.168.160.130 //设置你的静态ip,ip范围在虚拟机的网络设置里面查看
GATEWAY=192.168.160.2 //网关最后一个字段设为2,前面同ip地址
NETMSDK=255.255.255.0 //同样,在虚拟机网络设置里查看
TYPE=Ethernet
UUID=99f1b976-0da0-4686-b05b-9d86b70a36f2
ONBOOT=yes //设置为yes
NM_CONTROLLED=no // 设置为no
BOOTPROTO=static //设置为静态即static
然后重新启动网络service network restart
测试网络是否通畅ping baidu.com
成功后我们便开始克隆其他虚拟机,我这里打算一个master,2个slave,所以我要克隆出两个。
克隆的步骤我就不啰嗦啦,很简单的,找一找就好了,我主要是讲讲如何给克隆机配置静态ip
打开克隆机的设置
点击网络适配器,然后点击右边的高级,可以看到该虚拟机的mac地址,拍照,后面需要用到
随后我们打开虚拟机的网络配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:3A:17:B5 //修改为你刚刚拍照几下的地址
IPADDR=192.168.160.131 //与前一个不同即可,但要在范围内
GATEWAY=192.168.160.2
NETMASK=255.255.255.0
TYPE=Ethernet
UUID=99f1b976-0da0-4686-b05b-9d86b70a36f2
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
随后需要更改虚拟机的网络端口修改文件
/etc/udev/rules.d/70-persistent-net.rules
将与你拍照记下的mac地址相符的保留,删除另一项,然后将NAME的值改为eth0
最后重启网络service network restart
验证是否成功
免密登录
三个虚拟机能够互相ping通之后,我们就开始配置ssh免密登录
我这里使用的hadoop用户创建的
修改主机名为master和slave1与slave2
切换到root用户使用vi /etc/sysconfig/network
修改hostname
修改三台虚拟机的ssh配置文件
vi /etc/ssh/sshd_config
去掉以下代码段的注释
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
重启ssh服务
service sshd restart
运行ssh-keygen -t rsa
然后一路回车,三台虚拟机均这样
运行之后发现用户目录下出现了.ssh文件夹,进入文件夹,里面有两个文件
id_rsa id_rsa.pub
我们配置一下三台虚拟机的hosts,方便传输文件vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
//需要添加到部分,ip对应你自己的
192.168.160.130 master
192.168.160.131 slave1
192.168.160.132 slave2
这里我们要将每台主机的公钥共享,即三台虚拟机都有其他两台的公钥,我们使用scp命令来传输文件
我们现将本机(master)上的公钥放到authorized_keys文件内
cat id_rsa.pub >> authorized_keys
随后将该文件扩散到其它虚拟机
将文件传到slave1
scp authorized_keys hadoop@slave1:~/.ssh/
将slave1上的公钥放到authorized_keys文件内
cat id_rsa.pub >> authorized_keys
将文件传到slave2
scp authorized_keys hadoop@slave2:~/.ssh/
将slave2上的公钥放到authorized_keys文件内
cat id_rsa.pub >> authorized_keys
将文件传到slave1和master
scp authorized_keys hadoop@slave1:~/.ssh/
scp authorized_keys hadoop@master:~/.ssh/
扩散完之后需要修改每台虚拟机上.ssh文件夹和authorized_keys的权限
chmod 700 .ssh
chmod 600 authorized_keys
随后验证ssh slave1
第一次登录需要输入密码,以后均不用
hadoop文件配置
下载hadoop文件到三个虚拟机的/usr/local文件夹下并解压,切换到hadoop文件夹下的etc/hadoop
目录结构为/usr/local/hadoop/etc/hadoop
编辑该文件夹的配置文件hadoop-env.sh core-site.xml yarn-site.xml mapred-site.xml hdfs-site.xml
注意,master与slave的配置文件有所不同,但大部分相同,这里先配置相同的部分。
在hadoop-env.sh 末尾添加export JAVA_HOME=你的java地址
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8050</value>
</property>
</configuration>
mapred-site.xml 该文件不存在,但有 mapred-site.xml.temple文件,将其重命名为 mapred-site.xml ,然后修改
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>mstert:54311</value>
</property>
</configuration>
hdfs-site.xml
这里设置的文件路径我们随后会创建
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value> //需要注意我有两个从节点,所以是2
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>
</property>
</configuration>
接下来配置master不同的部分
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>
</property>
<property> //添加的部分
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value>
</property>
</configuration>
创建HDFS目录
在master上通过ssh登录到slave上创建目录
删除掉原来的目录(如果原来有的话)
sudo rm -rf /usr/local/hadoop/hadoop_data/hdfs
创建新的目录
sudo mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode
修改权限
sudo chown -R hadoop:hadoop /usr/local/hadoop
所有slave均如此
最后配置master
master上主要是在创建目录时不同
sudo mkdir -p /usr/local/hadoop/hadoop_data/hdfs/namenode
其余两步同slave相同
配置完之后,我们就开始格式化NameNode HDFS目录
hadoop namenode -format
如果出现找不到hadoop,说明没有配置hadoop的环境变量在/etc/profile文件末尾添加即可。这是我的HADOOP_HOME=/usr/local/hadoop
到此,如果格式化成功,那么会出现
19/08/27 17:40:13 INFO common.Storage: Storage directory /usr/local/hadoop/hadoop_data/hdfs/namenode has been successfully formatted.
所明成功,否则需要重新来过0.0
值得一提的是,不要重复执行hadoop namenode -format
因为会发生错误,具体我也不详。如果多次执行了,出现这样那样的错误,建议重新创建HDFS目录,包括删除,新建和修改权限。
测试运行
看到这里,恭喜你已经成功了,如果还是不放心的话可以在web上访问你的hdfs和yarn
先切换到sbin目录下/usr/local/hadoop/sbin
开启hdfs./start-dfs.sh
开启yarn./start-yarn.sh
访问hdfs
具体做法是在虚拟机外浏览器输入192.168.160.130:50070(输入你的master的ip地址才行哦)
看到Live nodes 有两个,因为我有两个slave
访问yarn
浏览器输入192.168.160.130:8088