声明:关于大数据平台技术的相关操作均建立在Linux系统之上的,因此在进行下面的操作前,最好是具备着一定的关于Linux的基本知识(如shell指令、挂载操作等)。对于Linux,建议选用ubuntukylin-16.04-desktop-amd64的镜像文件,这在ubuntu官网能够下载。
首先在Linux系统中打开终端,然后输入以下指令:
sudo apt-get install default-jre default-jdk
接着终端会提示让你输入密码,输入之后便会下载和安装java环境了,如下:
(注:由于我已经装好了,因此截图效果如上,实际上的截图应该是很长的一段,并且下载还需要点时间)
到这里,java环境已经下载并安装完成,但是还需要配置环境变量
首先,在Linux终端里输入:vim ~/.bashrc
以打开环境变量的配置文件,然后在打开的文件里面的最前面添加如下单独一行:
export JAVA_HOME=/usr/lib/jvm/default-java
如下图:
接着退出并保存该文件。为了使得该环境变量立即生效,需要执行以下代码:
source ~/.bashrc
到此,java环境就完全配置好了,此时可以输入以下命令进行验证:
$JAVA_HOME/bin/java -version
如果配置成功应该出现下图的情形:
由于ubuntu默认是安装了SSH客户端的,因此这里我们只需要安装SSH的服务端,在Linux终端里面,输入以下指令即能完成安装:
sudo apt-get install openssh-server
安装之后,就可以使用以下指令登陆本机:
ssh localhost
如果这是你的第一次登陆,终端中会有一个提示,你只需要输入yes并输入自己的密码(Linux的用户登陆密码)即可,之后再登陆的时候就不会再让你输入yes了,但是仍需输入密码。这一过程如下:
我们知道,在hadoop集群中,是有非常多的名称结点的,因此要登陆某台机器(数据结点)时,你都需要去输入密码,这在一个大的复杂的hadoop集群中是根本不可能人工输入密码的,所以最好设置一下无密码登陆。
首先输入命令exit退出刚才的SSH,就回到了原来的终端窗口,如下:
然后利用ssh-keygen生成密钥,并将密钥加入授权中,指令如下:
cd ~/.ssh #若没有该目录,请先执行一次ssh localhost
ssh-keygen –t rsa #此步骤会有很多提示,全部回车即可
cat ./id_rsa.pub >> ./authorized_keys #加入授权
效果如下:
当上述所有指令执行之后,你再执行ssh localhost命令就能直接登陆了,如下:
如果能看到这一步的显示,就说明你已完成了ssh的所有配置
sudo tar -zxf ~/下载/hadoop-2.7.1.tar.gz -C /usr/local
然后且换至目标目录
cd /usr/local
然后将此文件更名(方便后续使用)
sudo mv hadoop-2.7.1 hadoop
然后是很关键的一步!!!给hadoop这个文件添加用户权限
什么意思?我们都知道Linux是一个多用户系统,更是一个严格把控权限的系统,作为一个用户(假如你的用户名为 myName),如果你要使用hadoop这个文件下的某些东西,那么你就要告诉这个文件,名字为myName的用户要是有权利使用你的哦~~~
于是,给myName用户添加用户权限代码如下(特别注意,-R选项的意思就是指定仅仅添加读权限,更多的选项可以去参看Linux下的chown指令选项):
sudo chown -R myName hadoop
这一部分的过程如下(注:我的虚拟机的用户名为zed):
Hadoop解压后即可使用,可以输入如下命令来检查Hadoop是否可用,成功则会显示Hadoop版本信息,如下:
单机模式就不玩了,配置确实很简单啦,咋们直接来伪分布
Hadoop伪分布模式是指同一个节点既作为名称结点(Name Node),也作为数据结点(Data Node),读取的是分布式文件系统HDFS中的文件。要实现这种分布模式,需要修改以下两个配置文件:
① 修改core-site.xml文件(同样地,用vim文本编译器打开该文件,指令如下):
vim /usr/local/hadoop/etc/hadoop/core-site.xml
然后将此文件中的内容修改为如下内容:
dfs.replication
1
Abase for other temporary directories.
dfs.namenode.name.dir
file:/usr/local/hadoop/tmp/dfs/name
dfs.datanode.data.dir
file:/usr/local/hadoop/tmp/dfs/data
② 修改hdfs-site.xml文件,打开该文件的指令如下:
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
然后将此文件中的内容修改为如下内容:
dfs.replication
1
dfs.namenode.name.dir
file:/usr/local/hadoop/tmp/dfs/name
dfs.datanode.data.dir
file:/usr/local/hadoop/tmp/dfs/data
修改后的文件如下图所示:
③ 当修改了这两个配置文件后,接下来还需要将此名称结点进行格式化,命令如下:
cd /usr/local/hadoop
./bin/hdfs namenode –format
执行效果如下:
当能在终端最后看到Exiting with status 0(上图红框部分)则表示格式化成功,否则失败
④ 当执行到上一步时就表示已经部署好了伪分布式的环境,接下来开始启动hadoop,输入以下指令:
cd /usr/local/hadoop
./sbin/start-dfs.sh
此时会出现以下所示界面:
接着,为了测试其是否真的成功启动了,输入指令:jps
效果如下:
当成功启动时,则在jps命令下应该会出现以下进程:NameNode、DataNode、SecondaryNameNode,否则就表示配置不成功。
当Hadoop成功启动后,可以在Linux系统中打开一个浏览器,在地址栏上输入地址http://localhost:50070,就可以看查看名称结点和数据结点的信息(如下图),也能在线查看HDFS中的文件信息:
当能看到这一界面时,也表示着你的Hadoop已经成功启动了。
1.在HDFS中创建用户目录,指令为:hdfs dfs -mkdir -p /usr/username
如下图所示:
2.在该用户目录下建立一个input目录,指令为:hdfs dfs -mkdir input
如下图所示:
3.建立一个test.txt文件,指令为:cat >> test.txt
当输入此指令后,在下面即为编辑栏,当结束编辑时可用Ctrl+D按键退出如下图所示:
需要注意的是:我把该文件就存放在hadoop这个文件夹中
4.将test.txt文件复制到input目录下,指令为:hdfs dfs -put test.txt input
在将test.txt文件复制到input前,我先用hdfs dfs –ls imput命令查看了当前input目录中的内容,发现为空,接着我再复制test.txt到那里面,最后再用查看指令进行查看,发现此时已经成功地将这个文件复制了过去,这一过程的演示如下:
5.将etc/hadoop目录下的所有xml配置文件载入到input目录下,在HDFS的命令行中读取并显示input目录下包含的文件及内容,指令为:
hdfs dfs –put etc/hadoop/*.xml input
注意:这里使用了正则表达式的方式进行匹配复制。当执行上面的命令后,同样地用./bin/hdfs dfs –ls imput指令进行查看,可以看到此时input文件夹中多了很多的以.xml结尾的配置文件,如下图:
1.在第3题的基础上,以input目录中数据作为输入,调用mapreduce示例程序的grep命令行程序,进行正则表达式’dfs[a-z.]+’的匹配,将结果输出到output目录,指令如下:
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar grep input output ‘dfs[a-z.]+’
执行后的效果如下:
接着可以用指令:
hdfs dfs –cat output/
对output中的内容进行查看,效果如下:
2.调用mapreduce示例程序的wordcount命令行程序,分别完成input目录内所有文件,以及test.txt文件的单词计数,并将结果输出到新的output目录。
将input目录内所有文件输出到新的output目录的指令如下:
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount input output
执行后的效果如下:
注意:在执行这一命令前,需要将刚才生成的output目录删除,否则会报错(下同),删除该目录的指令为:hdfs dfs –rm –r output
接着可以用指令:hdfs dfs –cat output/对output中的内容进行查看,效果如下(注:输出会有几页,但是这里我就只截了第一页的图):
将input目录内的test.txt输出到新的output目录的指令如下:
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar wordcount input/test.txt output
执行后的效果如下:
这里同样地用指令:hdfs dfs –cat output/*对output中的内容进行查看,效果如下:
对比之前输入的文本:
可以看到确实统计出了test.txt文件中的各个单词数
3.调用mapreduce示例程序的圆周率计算命令行程序,输入不同参数,尽可能使得pi值计算精确,并显示程序输出结果
首先在程序中输入以下指令:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 10 10000
其中:10表示要运行10次map任务, 100表示每个map任务投掷次数,所以总投掷次数是10×10000=100000,运行效果如下:
稍微等待一下后台的计算,将会得到以下结果:
即:模拟得到的pi的近似值为3.141200000……,这与pi的真实值:3.1415926535898……还是比较接近的(在一定精度范围内甚至是相同的)。