上周上了一周东方瑞通的杜威老师的大数据培训课程,受益良多,杜老师将现在流行的大数据的架构完整的展现了出来,并带着我们一步一步的使用了各种大数据的工具。课程中使用的工具大多是杜老师已经配置好的,不自己再倒腾倒腾估计一周后就忘记了,干脆重新搞了个虚拟机从头搭建一遍玩一下,倒腾了两个晚上,才刚刚把Hadoop的环境跑通,还有HBase, Hive,Spark。。。还有大数据的算法。。。路漫漫其修远兮啊。。。不废话了,开搞。
VMware,这个自己搜吧,我用的是VMware® Workstation 12 Pro ,你懂的。
Linux映像,Ubuntu的16.04的server版本。
装虚拟机就不需要我多说了,先装好一个,起个拽一点的名字叫 bigdata-master,然后拷贝两个副本分别叫bigdata-slave1和bigdata-slave2。
图形界面,我是随便百度了一下,敲了下面三个命令行装了Kubuntu,然后发现这个界面跟我平时用的界面差异太大了,不过实在懒得换了,反正我是强烈建议换一个玩玩:
sudo apt-get install xinit
sudo apt-get install gdm
sudo apt-get install kubuntu-desktop
安装更新VMware tools, 参考CSDN的这个链接.
安装ssh:
sudo apt-get install openssh-client
sudo apt-get install openssh-server
sudo /etc/init.d/ssh restart
修改IP地址,参考CSDN的这个链接,我的/etc/network/interfaces文件修改后是这个样子的,供参考(图里的dns-nameservers可以查看PC的网络连接的DNS地址,或者写成与gateway相同的:192.168.245.2):
修改/etc/hosts中的hostname,注意IP地址和hostname要对应:
设置JAVA_HOME,如果跟我下载的是一个iso的话,直接在三个机器上都敲一遍:
sudo echo export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-amd64" >> ~/.bashrc
安装JPS
sudo apt install openjdk-8-jdk-headless
好了,至此环境准备完成,不管三七二十一,将三个node全部重启一遍再说>_<。重启后应该在三个虚拟机里都能互相ping到对方,并且能查到java的安装路径。
echo $JAVA_HOME
安装到这里安装Hadoop的环境已经OK了,有兴趣的话可以继续配置SSH互信,这样后面可以少输入很多密码。另外下面使用的不是root账户来配置的,因为我倒腾了半天也没搞定Kubuntu的root账户直接登录,能用就行了,不过后面有个小坑。。。。>_<
先去http://hadoop.apache.org/下载一个stable的版本,我下载的是2.7.3,老师课堂上用的是2.6.0!!!不知道后面有没有坑会踩到>_<
拷贝到bigdata-master的~/hadoop目录下,解压
tar xzfv hadoop-2.7.3.tar.gz
进到/hadoop-2.7.3/etc/hadoop/,里面有几个配置文件需要更新
配置文件hadoop-env.sh
这个文件里配置hadoop使用的jdk,更新JAVA_HOME如下:
配置文件core-site.xml
不多说啥含义了,自行百度吧,因为我也说不清,照着配置就Okay啦:
配置文件mapred-site.xml
这个目录下没有mapred-site.xml,但是有一个mapred-site.xml.template,直接拷贝一份,改个名即可,然后进去更新下主机的名字,如下:
配置文件masters
好像这个目录下没这个文件,直接创建一个masters,里面内容如下:
这个时候,master上的Hadoop已经配置完啦,是不是超简单!!!
下面将hadoop完整的目录整个拷贝到bigdata-slave1和bigdata-slave2上,如果你之前配置了SSH互信,这里就不需要输入密码啦~~不然就多敲几个字母吧,示意一下如下:
注意master和slave上hadoop的目录最好一致,不然你需要去修改上面配置文件里的各种乱七八糟的目录,懒人的最好办法就是保持master和slave的文件目录都在同一个目录下 ^_^:
scp -r 源目录 root@bigdata-slave1:目标目录
下面的所有操作都是在bigdata-master下操作的。
先用su切换到root账户下(不能切换的自行百度下吧,设置下root的密码即可)。
进入/hadoop-2.7.3/bin/,执行下面的命令行来格式化hdfs:
./hdfs namenode -format
进入/hadoop-2.7.3/sbin/,执行下面的命令行来启动集群:
./start-dfs.sh
一大堆打印,中间要你敲一堆密码,如果你配置了SSH互信,这边就简单多啦,中间打印停了不要随便敲回车,先输入一遍root密码再敲,不然可能就错过了某步。。。。。。
打印结束了,Hadoop集群就应该已经启动成功了,其中bigdata-master上JPS的显示应该如下:
两个slave的机器的JPS显示如下:
注意,如果你不是用的root账户,这里JPS会什么都不显示, >_<, su一下切换到root下,就能JPS看到Hadoop的Node了。
也可以在bigdata-master的浏览器中输入:
bigdata-master:50070/
光搭好环境没用,还是得搞个例子跑一下试试,就用大家都喜欢用的wordcount。
先随便下一个英文的txt文件,我知道你们懒,随便分享一个哈利波特
切换到/hadoop-2.7.3/bin/目录下(如果配置了环境变量就不用了,我懒。。。),先创建一个hadoop的hdfs文件夹用作输入:
./hadoop fs -mkdir /mytest
查看一下,里面空空如也:
./hadoop fs -ls /mytest
将需要做wordcount的txt文件put到hdfs目录下(-put第一个参数是源文件,第二个是目标,注意这里有个小坑,文件名不能带特殊字符,否者会报put: unexpected URISyntaxException,空格也算):
./hadoop fs -put ~/harrypotter5.txt /mytest
再ls下就可以看到文件被传上去了。
下面的命令行就可以利用hadoop自带的jar包来做分词了,注意/mytestoutput不能存在,不然会报错!!!!!
./hadoop jar /home/***/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /mytest /mytestoutput
等一大段输出结束后,没有报java的错误的话就是分词结束啦,在bigdata-master的浏览器中输入:
bigdata-master:50070/
点击 Utilities,就能看到mytestoutput目录下面的文件了,download下来就是分词的结果啦。
没有。。。。想了解原理还是去听杜老师的课吧,或者自行百度~~~~~~~>_<~~~~~~