使用CentOS6.8搭建Hadoop集群
概述:集群cluster,能将很多进程分布到多台计算机上;通过联合使用多台计算机的存储、计算资源完成更庞大的任务。
为了实现无限量的存储和计算能力,在生产环境中必须使用集群来满足需求。
--注意事项:
1)集群中的计算机在时间上要同步,系统时间不能差太多(约30秒内),如果设置时间后重启时间又不准确了(可能是主板电池老化),可以启用NTP(Network Time Protocol网络时间协议)服务解决(CentOS7安装时就可以设置自动同步)。
2)集群中的计算机在网络上能够相互访问
i.虚拟机的网络使用NAT模式
ii.固定IP,要规划好IP地址和主机名()
iii.全部关闭防火墙
iv.全部实现Hosts解析
v.全部实现免密码SSH访问(可以统一密钥对)
-.NameNode-对应的是-master、DataNode-对应的是-slave
--前提:安装三个虚拟机(内存最好在8~13G),分别作为master、slave1、slave2
记住三个虚拟机的名字和IP
1.安装JDK
如果安装的是minimal(最小版),跳过卸载直接去下载安装,如果安装的不是minimal(最小版),那么你需要卸除原有的JDK。
1.1卸载非LinuxJDK
卸载OpenJDK(最小化安装不带Open JDK)
Gnome桌面版自带OpenJDK,OpenJDK是JDK的一个开源实现
与Oracle官方JDK相似度近95%,一般情况下可以使用
但大数据的Hadoop不支持OpenJDK
通过rpm查找jdk和java的安装信息
rpm是RedHat包管理器,包管理器能够管理应用的安装卸载
类似于Maven管理Jar包
rpm -qa | grep jdk
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
卸载
对于如上的每一行输出,都调用rpm -e --nodeps,如(:
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
-e 表示卸载
--nodeps 表示不考虑是否有依赖问题,强制卸载
1.2下载:
上浏览器上下载linuxJDK压缩包(搜索Linux JDK 64)
提示路径:http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
或者温馨jdk链接:https://pan.baidu.com/s/1Yg7Nwp-JQSC7eNDDe2uaaA 提取码:mjnk
1.3:将JDK压缩包上传到虚拟机的 ~/
解压提取 tar zxvf jdk….tar.gz
将得到的jdk1.8…移动到/usr/local/中
mv jdk1.8…/ /usr/local/jdk
1.4配置环境变量
vi /etc/profile
在最后添加
#JDK1.8
JAVA_HOME=/usr/local/jdk
JRE_HOME=/usr/local/jdk/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH
保存
然后刷新环境变量
source /etc/profile
注意:上面的环境变量JAVA_HOME=这边填写的是你JDK的位置(路径)
------测试JDK安装是否成功
java -version
----------------------------安装Hadoop---------------------
1.安装Hadoop
到Hadoop官方下载 hadoop-xxx.tar.gz(选择稳定版)
温馨Hadoop链接:https://pan.baidu.com/s/1uAfgrBQaz6ST7_iPl4tcTw 提取码:cn8w
上传到master虚拟机上的 ~/
解压提取 tar zxvf hadoop-xxx.tar.gz
将得到的hadoop-xxx…移动到/usr/local/hadoop中(可以不移动,但是在配置关于路径的配置文件时,注意路径)
2.配置Hadoop
打开/etc/profile,在最后添加
#Hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
执行source /etc/hadoop更新环境变量
-------------
关于搭建Hadoop集群的配置
首先--进入/usr/local/hadoop/etc/hadoop
1.打开hadoop-env.sh指定JDK位置
# The java implementation to use.
export JAVA_HOME=JDK位置
2.打开core-site.xml指定NameNode
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
--master:表示NameNode(根据自己的master名字自己改变),9000:表示大小(不用改变就行)
3.打开hdfs-site.xml指定SecondaryNameNode,关闭权限检查
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hdfs://master:50090</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
-----------这里的master与上面的意思一样
4.打开slaves文件,指定担任DataNode的主机
master #让master同时成为datanode,生产环境不需要!
slave1
slave2
…
Slaves文件的作用是当使用start-dfs.sh启动HDFS时,会自动将各个datanode节点自动启动起来。
5.vi /etc/hosts
Hosts的作用是可以在网络使用名字替换IP地址,添加文件内容如下:
192.168.2.10 master
192.168.2.11 slaves1
192.168.2.12 slaves2
--将master的/etc/hosts分发到各个节点(master是根节点)
再分发之前安装scp,如果不安装会出现以下错误
结果提示:
-bash: scp: command not found
想当然用yum install scp命令安装,
结果提示:
No package scp available.
后来发现scp这东西应该属于openssh-clients这个包,
运行:
yum -y install openssh-clients (注:两台机器都需要安装)
--现在发布
scp /etc/hosts root@slaveXX :/etc/hosts
注意slaveXX表示slave1、slave2…,每个节点都要分发
----------------------------------------
在NameNode(master)上使用ssh-keygen命令生成密钥对
先运行一下ssh命令,查看是否能用
ssh
生成密钥对(一路回车,如果已经有了,直接使用现有的)
ssh-keygen
生成的密钥对在~/.ssh中,分别是:
id_rsa #私钥
id_rsa.pub #公钥~
--发送公钥使之免密码
在NameNode上将本地的公钥发送给所有节点(包括自己),之后就可以不用输入密码登陆
ssh-copy-id slaveXX
注意slaveXX表示master、slave1、slave2…
-------发布配置到DataNode(slave),这样就可以不用配置和安装JDK与Hadoop--------
分发JDK
scp -r /usr/local/jdk root@slaveXX:/usr/local
分发Hadoop
scp -r /usr/local/hadoop root@slaveXX:/usr/local
分发/etc/profile
scp /etc/profile root@slaveXX:/etc/
注意要在每个节点上执行source /etc/profile
--------------------启动--------------------------
1.格式化
在namenode上运行
hdfs namenode -format
--注意:每次格式化,都会在每个节点上(包括自己)的/tmp/中创建 hadoop-root
重启再格式化
stop-all.sh关闭
start-all.sh开启
2.启动
在namenode上运行
start-dfs.sh
----检查启动结果
【1】用JPS查看Java进程
NameNode #NameNode启动了,NameNode上要有此进程
DataNode #DataNode启动了,DataNode上要有此进程
SecondaryNameNode #SecondaryNameNode启动了
#这个是SecondaryNameNode上的辅助进程
【2】用master(或者master的IP):50070查看Hadoop站点,检查各个节点是否启动,如下图
【3】用命令测试,检查HDFS是否工作正常
hdfs dfs -mkdir /abc
hdfs dfs -ls /
-----------------------------温馨提示-------------------------------
1.查看及修改主机名
1.1查看主机名
hostname
1.2修改主机名(通常不需要)
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=s1
---上面操作之后,重启Linux
reboot
2.重启网络服务
service network restart
3.网络时间同步
3.1下载ntpdate
yum -y install ntpdate
3.2同步时间
ntpdate ntp.api.bz
4..启动出现节点缺少进程,查看日志,看是否格式化成功。如果格式化没有成功
每个节点上先执行 rm -rf /tmp/hadoop-root 再次格式化
检查配置文件,防火墙,时间是否一致
然后再次格式化,不允许连续格式化两次