VMware-workstation-full-12.1.1-3770994.exe
CentOS-7-x86_64-DVD-1611.iso
在装好的VMware中新建虚拟机并安装Linux CentOS64位操作系统,为保证系统运行效率,避免图形界面占用太多资源,本次实验选用了CentOS-7-x86_64。虚拟机的内存设为1G,硬盘设为20G,网络模式设为“桥接”。CentOS选择最小化安装。
# vi /etc/sysconfig/network-scripts/ifcfg-ens33
ifcfg-ens33后面的数字是自动生成的,每台机器可能不一样,进行如下配置:
BOOTPROTO=static #把dhcp改为static,启用静态地址
ONBOOT=yes #把no改为yes,开启自动启用网络连接
IPADDR=192.168.241.235
GATEWAY=192.168.241.129
NETMASK=255.255.255.128
DNS=192.168.241.128
# service network restart
CentOS 7 不再使用 ifconfig 而是用 ip 命令查看网络信息
# ip addr
# vi /etc/hostname
master
# shutdown -r now
# vi /etc/hosts
127.0.0.1 localhost localhost.localdomainlocalhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.241.235 master
CentOS虚拟机不能联网状况下yum命令无法使用,需做如下配置
# mkdir /mnt/cdrom
# mount -t iso9660 /dev/cdrom /mnt/cdrom
# cd /etc/yum.repos.d/
会看到三个文件,第一个CentOS-Base.repo是yum网络源的配置文件,第三个CentOS-Media.repo是本地源的配置。
修改CentOS-Media.repo
在baseurl中,修改第2个路径为/mnt/cdrom(即为光盘挂载点)
将enabled=0改为1
好了,现在你可以安装你要的包了,比如你要安装gcc,输入命令yuminstall gcc即可!
CentOS7.0最小化版不支持sz、rz命令,输入如下命令安装
# yum install lrzsz
# yum -y install vim
文件-->新建,连接主机
所有的机器上都要安装JDK,先在Master服务器安装,其他服务器按照步骤重复进行即可,也可以采用完全复制已经安装好的虚拟机的方法。安装JDK以及配置环境变量,需要以"root"的身份进行。下载java开发工具包,在实际使用中,我们下载的版本是jdk-8u112-linux-x64.rpm。
1.1 安装JDK
打开XShell,用root身份登录"master",后在"/usr"下创建"java"文件夹。命令如下:
# mkdir /usr/java
# cd /usr/java
# rz
选择已下载到宿主机上的jdk-8u112-linux-x64.rpm
# chmod+x jdk-8u112-linux-x64.rpm
# rpm -ivh jdk-8u112-linux-x64.rpm
编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容。命令如下:
# vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_112
export CLASSPATH=$CLASSPATH:$JAVA_HOME /lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
保存并退出,执行下面命令使其配置立即生效。
# source /etc/profile
配置完毕并生效后,用下面命令判断是否成功。
# java -version
出现了相关参数提示,如图所示,说明java开发环境已经安装完毕。
所有的机器上都要安装hadoop,先在Master服务器安装,然后其他服务器按照步骤重复进行即可。也可以采用完全复制已经安装好的虚拟机的方法。安装和配置hadoop需要以"root"的身份进行。本次实验下载的版本为hadoop-2.7.3。
在root路径下新建文件夹Hadoop,并进入目录,再使用rz命令把" hadoop-2.7.3.tar.gz "上传到"/root/Hadoop"目录下面。
# mkdir /root/Hadoop
# cd /root/Hadoop
# rz
通过rz命令弹出的“打开”对话框在宿主机上找到hadoop-2.7.3.tar.gz
用下面命令把"hadoop-2.7.3.tar.gz "进行解压,然后删除" hadoop-2.7.3.tar.gz "安装包。
# tar -zxvf hadoop-2.7.3
# rm -rf hadoop-2.7.3
# vim/root/Hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
在hadoop-env.sh最后增加exportJAVA_HOME=/usr/java/jdk1.8.0_112
# vim /etc/profile
在profile最后添加如下设置:
export HADOOP_HOME=/root/Hadoop/hadoop-2.7.3
exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# mkdir /root/ Hadoop/hadoop-2.7.3/tmp
# vim/root/Hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml
在
如下配置是读写sequence file 的 buffer size,可减少 I/O 次数。在大型的 Hadoop cluster,建议可设定为 65536 到 131072,默认值 4096
2.4 配置hdfs-site.xml文件
配置数据副本数量,先配成1,再复制。
# vim /root/Hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml在
配置的是JobTracker的地址和端口,复制一份template,并改名。
# vim/root/Hadoop/hadoop-2.7.3/etc/hadoop/mapred-site.xml
在
# vim/root/Hadoop/hadoop-2.7.3/etc/hadoop/yarn-site.xml
在
打开该文件,把“localhost”改为master。该文件指定namenode
打开该文件,把“localhost”改为slave1。该文件中有哪些主机名,哪些主机就作为datanode,每个主机名占一行
为了降低配置Hadoop的难度,并且同时测试系统动态扩展的能力,Slave节点的配置实际上分为两个阶段:
复制主节点虚拟机作为从节点1:
1) 使用VMWare的“克隆”功能复制主节点作为从节点1;
2) 将从节点1命名为slave1;
3) 将从节点1的ip地址配置为192.168.241.236;
4) 将从节点1的主机名改为slave1
5) 修改从节点1的hosts网址和域名映射
复制从节点1作为从节点2和从节点3
1) 在VMware中克隆虚拟机,分别命名为Slave2和Slave3(完全复制)
2) 打开从节点,分别把IP地址改为192.168.241.237,192.168.241.238
3) 修改从节点2、3的主机名、ip地址和域名映射
4) 修改master节点配置文件,加入两个新的从节点
$ vim $HADOOP_HOME/etc/hadoop/slaves
添加如下内容:
slave1
slave2
slave3
该文件只在master节点上起作用,各个slave节点改不改都可以。
将新添加的节点的主机名添加到该文件中,一个主机名占一行。
5) 修改master配置,子节点数改为3;
$ vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
6) 分别重启四台虚拟机。
执行完所有的配置之后,需要确保所有的机器之间都可以可以访问到的,通过命令行中的“ping 机器IP”指令,验证所有虚拟机之间都是可以互通的。
安装CentOS6.0时,我们选择了一些基本安装包, ssh和rsync已经安装了。通过下面命令查看:
# rpm -qa | grep openssh
# rpm -qa | grep rsync
结果显示如下图:
在Master节点上执行以下命令:
# ssh-keygen -t rsa -P ''
保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/root/.ssh"目录下。
在Master节点上做如下配置:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容:
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
设置完之后,重启SSH服务,使设置有效,执行如下命令:
service sshd restart
在主机上执行:
scp ~/.ssh/id_rsa.pub [email protected]:~/
在Slave机器上创建.ssh文件夹并设置权限为700
mkdir ~/.ssh
chmod 700 ~/.ssh
把主节点的公钥追加到授权文件"authorized_keys"
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
具体命令如下:
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式AuthorizedKeysFile/root/.ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
重启服务:service sshd restart
在Slave节点:
ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub [email protected]:~/
在Master节点:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
完成ssh配置
在启动Hadoop系统之前,需要先格式化一个Hadoop系统,执行如下指令:
# hadoop namenode -format
如果顺利完成,则说明系统格式化完成,下面即可启动并使用Hadoop系统了,如果失败,则需要查看Hadoop安装目录中的logs目录下的日志了。
在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。
# sudo systemctl stop firewalld.service && sudo systemctldisable firewalld.service
# start-dfs.sh
执行结果如下图:
# start-yarn.sh
执行结果如下图:
用““hadoop dfsadmin -report”
Master服务器的状态:
Slave服务器的状态:
注意:单词拼写slave写成slaver会导致意料不到的错误
centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。所以你只要停止firewalld服务即可:sudo systemctl stop firewalld.service&& sudo systemctl disable firewalld.service
如果你要改用iptables的话,需要安装iptables服务:
sudo yum install iptables-services
sudo systemctl enable iptables && sudosystemctl enable ip6tables
sudo systemctl start iptables && sudosystemctl start ip6tables
DEPRECATED: Use of this script to execute hdfscommand is deprecated.
Instead use the hdfs command for it.
从0.21.0版本以后,hadoop 命令换成了hdfs命令,将命令中的hadoop换为hdfs即可。
Java HotSpot(TM) Client VM warning: You haveloaded library /usr/local/hadoop2.5/lib/native/libhadoop.so.1.0.0 which mighthave disabled stack guard. The VM will try to fix the stack guard now
Java HotSpot(TM) 64-Bit Server VM warning: Youhave loaded library /usr/local/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0 whichmight have disabled stack guard. The VM will try to fix the stack guard now.
WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable
这个问题的错误原因会发生在64位的操作系统上,原因是从官方下载的hadoop使用的本地库文件(例如lib/native/libhadoop.so.1.0.0)都是基于32位编译的,运行在64位系统上就会出现上述错误。解决方法之一是在64位系统上重新编译hadoop,另一种方法是在hadoop-env.sh和yarn-env.sh中添加如下两行:
exportHADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"
打开hdfs-site.xml里配置的datanode和namenode对应的目录,分别打开current文件夹里的VERSION,可以看到clusterID项正如日志里记录的一样,确实不一致,修改datanode里VERSION文件的clusterID 与namenode里的一致,再重新启动dfs(执行start-dfs.sh)再执行jps命令可以看到datanode已正常启动。
Hadoop配置完成!
出现该问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode-format),这时namenode的clusterID会重新生成,而datanode的clusterID 保持不变。