CentOS7虚拟机配置、Hadoop搭建、wordCount DEMO运行
安装虚拟机
最开始先安装虚拟机,我是12.5.7版本,如果要跟着我做的话,版本最好和我一致,不然后面可能会出一些莫名其妙的错误,下载链接如下(注册码也在里面了):
链接:https://pan.baidu.com/s/1qoqeKcgMsjFKPFQFBFP6lg
提取码:2aog
安装虚拟机直接下一步、下一步就好了,没什么可说的,安装好后,虚拟机询问是否更新,点不更新,更新了就改版本了。
配置虚拟机操作系统
接下来开始配置虚拟机系统。首先下载CentOS7的镜像,下载链接如下:
链接:https://pan.baidu.com/s/17Guf4e0LKH2KfOgBlgBnNA
提取码:skvu
然后打开虚拟机:文件——新建虚拟机,打开新建虚拟机向导(然后配置如下):
虚拟机向导完毕后,在左边出现一个虚拟机选项:右键设置——CD/DVD(IDE)——使用ISO映像文件——浏览,选择前面下载好的CentOS7镜像——确定:
点击开启此虚拟机:
进入操作系统安装界面,选择Install CentOS 7,回车:
待会还有一个回车要按,也可以等待一会它自动确认,然后会启动安装程序:
然后再点+号,添加另一个分区:
虚拟机系统安装完毕!重启后打开系统:
输入root用户名,回车,密码(就是你刚刚创建的密码),回车:
用root用户进入操作系统界面(root用户是权限最高的用户,所以执行一些指令都不需要sudo):
配置虚拟机静态NAT网络
接下来配置虚拟机的网络。首先右键你的CentOS虚拟机——设置——网络适配器,右边网络连接选项卡中选择:NAT模式或自定义中的VMnet8,将操作系统网络设置为网络地址转换(NAT)模式,这两种选择的效果是一样的,都是通过VMnet8与物理主机互连,然后点击确定(我这里选择NAT模式选项)。
设置好后,在虚拟机界面:编辑——虚拟网络编辑器,点击右下角的更改设置,修改NAT模式的子网等配置。操作如下两张图图:
然后在主机windows界面:网络——属性——更改适配器设置,看到里面有个VMware Network Adapter VMnet8,是虚拟器自动生成的,右键它——属性——网络选项卡——点中Internet协议版本4(TCP/IPv4)——属性,修改如下图:
外部配置好了,现在开始配置虚拟机内CentOS的静态网络。打开虚拟机进入CentOS的命令界面,登录Root用户,输入ip addr查看网卡名称:
接着输入vi /etc/sysconfig/network-scripts/ifcfg-ens33(ens33是网卡名称,如果你的不是ens33,就改成你的网卡名称)(vi是使用一个编辑器的命令,vi 后面加一些文本类文件可以打开它进行编辑),进入网络配置文件修改配置,按键盘Insert键进入编辑模式 ,修改如下图:
修改好后按ESC,从编辑模式进入命令模式,输入:wq(w代表write,q代表quit,如输入:q不保存直接退出)再按回车回到命令界面,不要忘记冒号“:”,如果冒号没打,按w会进入recording模式记录你的键盘操作,按q退出这个模式,再重新打:wq就行。然后在命令界面输入service network restart,重新启动网络服务:
再接着输入网址,如ping www.baidu.com,就能联网了:
按键盘Ctrl+C退出联网,回到命令行:
还可以再试一试ping你刚刚填的VMnet8的IP地址,如我这里ping 192.168.157.2
在Windows主机打开CMD也可以ping 虚拟机的IP试试,我这里ping 192.168.157.10
可以看到三个ping都成功了,说明1、虚拟机能连接外网。2、虚拟机能和物理主机互连。3、物理主机能和虚拟机互连。这样,一个CentOS的静态NAT网络就算配置完成了。
ifconfig命令和ip addr命令差不多,也可以查看ip等信息,然而操作系统没有这个命令,因为新安装的Minimal系统中并没有装这个命令,可以用yum install net-tools.x86_64命令从网上下载安装。
讲一个坑,害我找了半天的原因。虚拟机系统有时候会出错,关闭不了,甚至直接用任务管理器关闭都不行,再次打开虚拟机那个系统还是被占用不能打开。如果系统里没有保存什么重要的文件,或者有备份的话,就直接把那个系统移除了并在物理主机把它的文件删了一劳永逸。而原来我在网上找了一个方法,说在外部windows的运行中输入msconfig,打开启动项,直接把VMware的服务全都停止了,然后系统会变好,其实并没有用。这些服务中包含了VMware NAT service,一旦停了,虚拟机就不能通过NAT联外部网络了(不能ping www.baidu.com连接外部网络,但是还能ping局域网IP如192.168.157.2),导致我后来浪费好几个小时在这上面。
CentOS主机名修改
接下来进行CentOS的主机名修改。这里面有三个“主机名”容易弄混淆:hosts文件保存的主机名、hostname文件保存的主机名、network文件保存的主机名。这三者解释如下:
1、hosts保存的是IP地址和域名的对应,比如局域网里有个主机域名叫node1,它的ip是192.168.3.3,那你保存这个对应进去以后,ping node1就等于ping 192.168.3.3。
2、network里面保存的就主机域名,现在暂时看不出啥用,因为hosts里面的域名不都是自己写的吗,和别的主机取域名叫啥好像没啥关系,但是为了便于辨认,就要修改。
3、hostname保存的是你这个操作系统的名称,自己看的名称而已,与网络没什么关系,为了辨认最好修改成和network里面的域名一样。
这三个文件分别这样修改(下面的vim命令是vi的升级版,没有这个命令就yum -y install vim安装一下):
network文件:
hosts文件:
hostname文件:
改好名以后关闭防火墙并取消开机启动,命令如下:
systemctl stop firewalld
systemctl disable firewalld
复制命令可能会出错,最好自己手打。然后reboot重启机器,进入root用户,再输入hostname,就可以看到主机名是master:
CentOS安装JDK
系统配置完毕,现在给系统安装JDK(Java SE Development Kit)。因为是最简的系统,所以不能用图形界面,我们可以使用物理windows主机下载好jdk传给虚拟机来安装。传输文件需要用到XShell和XFtp这两个软件,以下是下载链接:
链接:https://pan.baidu.com/s/1dsLbd5pDZcSXqy1K5M_0qQ
提取码:y80z
XFtp是直接用的,无需安装,但是在用之前要先双击一下里面的绿化(重要,别忘了),把XFtp破解一下,它会把注册表信息写进去,这样在XShell里面要用XFtp的时候才会自动打开XFtp。XShell需要安装,直接下一步下一步就好了。安装好后打开Xshell:文件——新建,填入虚拟机系统的IP点击确定就可以实现和虚拟机系统的连接(当然虚拟机系统要打开进入root用户)。
双击新建会话:
root用户,然后输入操作系统的密码,确定,连接完毕!界面和虚拟机里面的命令行一模一样,但是可以复制和粘贴代码哦~
连接好了以后,就可以点击上方的绿色按钮,Xshell会打开电脑中安装好的XFtp,让XFtp和虚拟机的操作系统连接,并且可以传输文件。(Xshell和XFtp是同一家公司出的,所以可以相互调用,但是我很奇怪都是连接操作系统,为什么不把功能集中到一个软件)
然后使用mkdir命令在/usr/local/里面创建一个java文件夹,其实也可以直接用XFtp进行创建,特别方便,就和图形界面一样:
把下载好的JDK压缩包拖进Java文件夹。我的使用的JDK包:
链接:https://pan.baidu.com/s/1jxsH25gdGTw1AK_yD24C8w
提取码:wifb
然后在命令行中(虚拟机命令行或Xshell里都行)cd /usr/local/java进入java文件夹,tar -xvf jdk-8u231-linux-x64.tar.gz解压JDK,-xvf后面的名称对应的是你下载的JDK压缩包名称,如果使用的是我的JDK包,那就一样,别复制错了(后面版本问题我都不再提醒了,包括hadoop、mysql、mysql-connector-java等等,其中mysql和mysql-connector-java版本是有对应的,这是大坑,如果你的两个版本不对应的话,后面出错原因会很难找到,所以这些版本什么都和我一致最好,链接都提供了呢,这么良心的博主哪里找)。解压好后,可以用命令
rm -rf jdk-8u221-linux-x64.tar.gz
删除原来的压缩包(强迫症,你不删除也行),当然在XFtp中也能右键删除。然后配置环境,vim /etc/profile编辑文件,在最后一行加上:
加上后按ESC,输入:wq再回车,退出编辑,在命令行里输入source /etc/profile,编译刚刚改过的文件,就完成JDK的配置了。然后可以用 java -version 和javac -version 命令测试JDK是否成功安装:
配置安装hadoop
JDK装好了,现在正式开始装hadoop。先下载hadoop镜像:
链接:https://pan.baidu.com/s/17h4kxK9RoqjNE0mIHpsReQ
提取码:nujr
在local下面创建hadoop文件夹,把镜像拖进去,tar -zxvf hadoop,tab键,自动出现剩余的压缩包名称,解压tar包,然后删除压缩包。
vim /etc/profile修改环境变量:
HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.5
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
:wq保存并退出编辑,source /etc/profile,编译刚刚的配置,然后在命令行输入hado,按Tab键,如果自动补全为hadoop,说明配置好了。然后在hadoop下创建四个文件夹,分别是tmp、hdfs、name和data,其中name在hdfs下,命令如下:
mkdir /usr/local/hadoop/tmp mkdir -p /usr/local/hadoop/hdfs/name mkdir /usr/local/hadoop/hdfs/data
接下来进入hadoop文件 /etc/hadoop 目录:
cd /usr/local/hadoop/hadoop-2.8.5/etc/hadoop
里面存放的是hadoop的配置文件,要修改一些配置,分别是hadoop-env.sh、yarn-env.sh、core-site.xml 、hdfs-site.xml,修改如下(我直接通过XFtp修改了,你也可以用命令行修改):
export JAVA_HOME=/usr/local/java/jdk1.8.0_231/
<!-- 插入core-site.xml的代码 --> <property> <name> fs.default.name </name> <value>hdfs://master:9000</value> <description>指定HDFS的默认名称</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> <description>HDFS的URI</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> <description>节点上本地的hadoop临时文件夹</description> </property>
<!-- 插入hdfs-site.xml的代码 --> <property> <name> fs.default.name </name> <value>hdfs://master:9000</value> <description>指定HDFS的默认名称</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> <description>HDFS的URI</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> <description>节点上本地的hadoop临时文件夹</description> </property>
改好文件后,还是在/usr/local/hadoop/hadoop-2.8.5/etc/hadoop目录,输入cp mapred-site.xml.template mapred-site.xml,将mapred-site.xml.template文件复制到当前目录,并重命名为mapred-site.xml。然后继续修改mapred-site.xml文件:
<!-- 插入mapred-site.xml的代码 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <description>指定mapreduce使用yarn框架</description> </property>
接着修改yarn-site.xml 文件:
<!-- 插入yarn-site.xml的代码 --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> <description>指定resourcemanager所在的hostname</description> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <description> NodeManager上运行的附属服务。 需配置成mapreduce_shuffle,才可运行MapReduce程序 </description> </property>
最后修改slaves文件:
现在一台主机弄好了,下面添加其他的节点虚拟机系统。在虚拟机软件中,右键虚拟主机,管理——克隆,打开克隆虚拟机向导:
克隆好node1后,右键node1虚拟机,设置——网络适配器
点击确定,回到虚拟机主界面,打开node1,因为是克隆master,所以用户名密码都是一样的,命令行的记录都还在。现在要修改三个文件:ifcfg-ens33、network、hostname,命令忘了就按键盘的上往前翻,改完ESC,:wq保存并退出:
改完输入reboot,重启一下,可以看到机器名变node1了,能ping百度还有外部主机(192.168.157.2)了,你如果把master打开也能ping的通:
node1克隆、配置好后,同样的克隆、配置node2:物理地址重新生成一下,把ifcfg-ens33、hostname、network对应的地方改一下,重启一下,OK!
最后配置ssh,打开master、node1、node2,登录root用户。操作如下:
1、在master机器上输入 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 创建一个无密码的公钥。
2、在master机器上输入 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 将公钥id_dsa.pub添加进keys,这样就可以实现无密登陆ssh。
3、在master机器上输入 ssh master 测试免密码登陆。
4、出现询问,输入yes,回车继续。
截图如下:
5、在node1主机上执行 mkdir ~/.ssh,在node2主机上执行 mkdir ~/.ssh()。
6、在master机器上输入 scp ~/.ssh/authorized_keys root@node1:~/.ssh/authorized_keys 将主节点的公钥信息导入node1节点,导入时要输入一下node1机器的登陆密码。
7、在master机器上输入 scp ~/.ssh/authorized_keys root@node2:~/.ssh/authorized_keys 将主节点的公钥信息导入node2节点,导入时要输入一下node2机器的登陆密码。
67两步截图如下:
8、在三台机器上分别执行 chmod 600 ~/.ssh/authorized_keys 赋予密钥文件权限。
9、在master节点上分别输入 ssh node1 和 ssh node2 测试是否配置ssh成功:
10、在master机器上,任意目录输入 hdfs namenode -format 格式化namenode,第一次使用需格式化一次,之后就不用再格式化。(但如果改了一些配置文件,可能还需要再次格式化):
到这里,hadoop终于完全搭建好了!在master机器上,进入hadoop的sbin目录,输入 ./start-all.sh ,就可以启动hadoop:
输入 jps 查看当前java的进程,该命令是JDK1.5开始有的,作用是列出当前java进程的PID和Java主类名,nameNode节点除了JPS,还有3个进程,启动成功!如图:
node1、node2输入jps查看进程如下:
在浏览器访问192.168.157.10的8088端口和50070端口可以查看hadoop的运行状况(如果打不开,有可能是master虚拟机的防火墙没有关闭,检查一下)。
8088端口:
50070端口:
WordCount运行
配置好hadoop后,现在可以运行数据库世界的"Hello world!"程序了,WordCount就是数据库的"Hello world!",WordCount是用来统计一个文本每个词汇的出现数量的程序。hadoop文件里面自带有WordCount作为hadoop的demo,我们直接运行它。首先进入hadoop文件夹:cd /usr/local/hadoop/hadoop-2.8.5,里面有个LISENCE.txt,写有有很多英语单词,这里就统计它的词汇。
先用命令cat LISENCE.txt查看一下:
用hadoop fs -mkdir /input命令在hadoop库中创建input目录,然后hadoop fs -ls /查看一下:
用hadoop fs -put LICENSE.txt /input把LISENCE.txt放到input目录下,hadoop fs -ls /input查看:
接下来用命令(不同版本可能程序位置不同,注意修改命令中的位置)
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /input /output
对input中的txt进行统计:
使用命令hadoop fs -ls /看出,HDFS系统下多了个/output 和/tmp目录。打开/output目录可以看到下面有两个文件(_SUCCESS和part-r-00000),说明已经运行成功了:
命令hadoop fs -cat /output/part-r-00000,打开part-r-00000查看结果:
参考链接
CentOS7搭建:https://www.osyunwei.com/archives/7829.html
WordCount运行:https://blog.csdn.net/u010285974/article/details/81636719