搭建hadoop单机模式
下载安装jdk(目前hadoop3只支持java8)
JDK安装包可以从oracle官网(https://www.oracle.com/java/technologies/downloads/ )下载,然后使用WinSCP上传到虚拟机的Ubuntu系统。
sudo tar -xzvf jdk-8u202-linux-x64.tar.gz -C /usr/local
配置jdk环境变量
打开~/.bashrc文件
$ sudo vim ~/.bashrc
然后在文件末尾加入以下代码,保存退出。
export JAVA_HOME=/usr/local/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量生效
$ source ~/.bashrc
查看java版本
$ java -version
安装成功后,会出现如下信息:
下载安装hadoop
Hadoop安装包可以从hadoop官网(https://hadoop.apache.org )下载,然后使用WinSCP上传到虚拟机的Ubuntu系统。
$ sudo mv hadoop-3.3.4.tar.gz /usr/local
$ sudo tar -xzvf hadoop-3.3.4.tar.gz
配置hadoop环境变量(可以在bashrc或profile文件中添加)
打开~/.bashrc文件
$ sudo vim ~/.bashrc
然后在文件末尾加入以下代码,保存退出。
export HADOOP_HOME=/usr/local/hadoop-3.3.4
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export PATH=${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin:$PATH
使环境变量生效
$ source ~/.bashrc
查看Hadoop版本信息
$ hadoop version
安装成功后,会出现如下信息:
安装好Hadoop后,默认就是单机模式。该模式下不需要对配置文件进行修改,且使用本地文件系统,而不是分布式文件系统。
单机模式下的应用
hadoop程序的./share/hadoop/mapreduce目录下存放了hadoop自带的java应用程序包,这里介绍下hadoop-mapreduce-examples-3.3.4.jar的应用。
字数统计
切换到hadoop目录
$ cd /usr/local/hadoop-3.3.4
创建input目录
$ sudo mkdir wcinput
将“song.txt”文件通过WinSCP上传到虚拟机的Ubuntu系统,并移动到wcinpu目录下。
$ sudo mv song.txt /usr/local/hadoop-3.3.4/wcinput/
song.txt的内容如下:
回到/usr/local/hadoop-3.3.4下,执行程序。其中“./bin/hadoop jar”是hadoop的程序命令;“./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar”是具体要执行的java包;“wordcount”是java包的参数,表明要运行wordcount功能;“ wcinput”是要统计的目录,该目录下所有文件都会被统计;“wcoutput”是统计完成后会将统计结果放进wcoutput目录。
$ cd /usr/local/hadoop-3.3.4
$ sudo ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount wcinput wcoutput
程序完成后,切换到wcoutput目录,查看统计结果
$ cd wcoutput/
如果运行成功,wcoutput目录下会生成part-r-00000和_SUCCESS 两个文件,其中part-r-00000文件中存放了统计结果。但需要注意的是不能直接使用vim查看,需要使用hadoop分布式文件系统的cat命令来查看。
cat part-r-00000
结果如下:
正则匹配字数统计
这里将etc/hadoop/目录下的xml格式文件复制到grepinput文件夹下,然后统计文件中开头为特定字符的单词数量。
创建grepinput目录,注意再hadoop安装目录下创建
$ sudo mkdir grepinput
复制etc/hadoop/目录下的xml文件
$ sudo cp etc/hadoop/*.xml grepinput
执行程序。其中“bin/hadoop jar”是hadoop的程序命令;“share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar”是具体要执行的java包;“grep”是java包的参数,表明统计正则匹配到的字符出现的个数;“ grepinput”是要统计的目录,该目录下所有文件都会被统计;“grepoutput”是统计完成后会将统计结果放进wcoutput目录;'ano[a-z.]+'是正则匹配式子,表示开头为dfs的单词。
$ sudo bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep grepinput grepoutput 'ano[a-z.]+'
查看结果
cd grepoutput/
cat part-r-00000
统计结果如下所示