- 1. Linux的选择
- 2. 在 Ubuntu 中安装 Hadoop
- 2.1 创建Hadoop用户
- 2.2 下载并安装 Hadoop3.3.1
- 3. 安装 Java 环境
- 3.1 下载并进行配置
- 4. 使用 MapReduce进行词频统计
- 4.1 数据上传
- 4.2 数据处理
- 4.2.1 在Eclipse中创建项目
- (1)设置工作空间
- (2)创建一个Java工程
- (3)为项目添加所用包
- (4)编写WordCount.java
- (5) 编写代码
- (6)修改配置文件
- (7)编译运行
- 4.2.2 部署程序
- (1)打包 WordCount 程序,生成 JAR 包
- (2)部署到Hadoop平台上运行
- 4.3、处理结果
- 4.3.1 查看output文件夹中有无生成文件
- 4.3.2 使用以下命令查看统计结果并将结果输入到 KarlMarxCount.txt文件中
2. 在 Ubuntu 中安装 Hadoop在Linux系统各个发行版中,Ubuntu系统在服务端和桌面端使用占比最高,网络上资料最是齐全,所以此处选择 Ubuntu 系统
Ubuntu 下载地址:百度网盘 ;提取码:ziyu
Hadoop的安装方式有三种,分别是单机模式,伪分布式模式,分布式模式。
- 单机模式:单机模式:Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。
- 非分布式即单 Java 进程,方便进行调试。
- 伪分布式模式:Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
分布式模式:使用多个节点构成集群环境来运行Hadoop。
- 使用如下命令在终端中创建 hadoop 用户
sudo useradd -m hadoop -s /bin/bash #这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell。 sudo passwd hadoop #设置密码 sudo adduser hadoop sudo #为 hadoop 用户增加管理员权限,方便部署 sudo adduser hadoop sudo
接着注销当前用户,选择用 hadoop 用户进行登录
hadoop 用户登录后,更新一下 apt,后续我们使用 apt 安装软件
sudo apt-get update #更新 apt2.2 下载并安装 Hadoop3.3.1
在上述百度网盘文件夹中的软件找到 hadoop-3.1.3.tar.gz 进行下载,将 hadoop-3.1.3.tar.gz文件,下载到本地。
选择将 Hadoop 安装至 /usr/local/ 中:
sudo tar -zxf ~/下载/hadoop-3.1.3.tar.gz -C /usr/local # 解压到/usr/local中 cd /usr/local/ sudo mv ./hadoop-3.1.3/ ./hadoop # 将文件夹名改为hadoop sudo chown -R hadoop ./hadoop # 修改文件权限
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd /usr/local/hadoop ./bin/hadoop version3. 安装 Java 环境 3.1 下载并进行配置
- 下载 jdk-8u162-linux-x64.tar.gz 安装包
Hadoop3.1.3需要JDK版本在1.8及以上,可在上述百度网盘中找到进行下载
Linux命令行界面中,执行如下Shell命令
cd /usr/lib sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件 cd ~ #进入hadoop用户的主目录 cd Downloads #注意区分大小写字母,刚才已经通过FTP软件把JDK安装包jdk-8u162-linux-x64.tar.gz上传到该目录下 sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下
JDK文件解压缩以后,可以执行如下命令到/usr/lib/jvm目录查看一下:
cd /usr/lib/jvm ls
可以看到,在/usr/lib/jvm目录下有个jdk1.8.0_162目录。
下面继续执行如下命令,设置环境变量:
cd ~ vim ~/.bashrc
在这个文件的开头位置,添加如下几行内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME= J A V A H O M E / j r e e x p o r t C L A S S P A T H = . : {JAVA_HOME}/jre export CLASSPATH=.: JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib: J R E H O M E / l i b e x p o r t P A T H = {JRE_HOME}/lib export PATH= JREHOME/libexportPATH={JAVA_HOME}/bin:$PATH
保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:
source ~/.bashrc
使用如下命令查看是否安装成功
java -version
如果能够在屏幕上返回如下信息,则说明安装成功:
4. 使用 MapReduce进行词频统计 4.1 数据上传hadoop@ubuntu:~$ java -version
java version “1.8.0_162”
Java™ SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot™ 64-Bit Server VM (build 25.162-b12, mixed mode)
上网找一份 1w 以上英语单词量的文本进行测试
这里以 Karl Marx 整合成一份 .txt 文本为例。
在虚拟机中启动Hadoop:
将该文件上传到HDFS:
检查文件是否上传成功
- “/usr/local/hadoop/share/hadoop/common”目录下的 hadoop-common-3.1.3.jar 和 haoop-nfs-3.1.3.jar;
- “/usr/local/hadoop/share/hadoop/common/lib”目录下的所有 JAR 包;
- “/usr/local/hadoop/share/hadoop/mapreduce”目录下的所有 JAR 包,但是, 不包括 jdiff、lib、lib-examples 和 sources 目录;
- “/usr/local/hadoop/share/hadoop/mapreduce/lib”目录下的所有 JAR 包。
选择New->Class新建Java类文件名称为WordCount;
import java.io.IOException; import java.util.Iterator; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class WordCount { public WordCount() { } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs(); if(otherArgs.length < 2) { System.err.println("Usage: wordcount(6)修改配置文件[ ...] "); System.exit(2); } Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(WordCount.TokenizerMapper.class); job.setCombinerClass(WordCount.IntSumReducer.class); job.setReducerClass(WordCount.IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); for(int i = 0; i < otherArgs.length - 1; ++i) { FileInputFormat.addInputPath(job, new Path(otherArgs[i])); } FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1])); System.exit(job.waitForCompletion(true)?0:1); } public static class TokenizerMapper extends Mapper
运行 MapReduce 程序前,还需要执行一项重要 *** 作(也就是上面提到的通过复制配置文件解决参数设置问题):将 /usr/local/hadoop/etc/hadoop 中将有修改过的配置文件(如伪分布式需要 core-site.xml 和 hdfs-site.xml),以及 log4j.properties 复制到 WordCount 项目下的 src 文件夹(~/workspace/WordCount/src)中
控制台出现以下结果为成功:
- 启动Hadoop,命令如下:
cd /usr/local/hadoop ./sbin/start-dfs.sh
- 删除HDFS中与当前Linux用户hadoop对应的input和output目录,确保后续程序的运行不会出现问题
cd /usr/local/hadoop ./bin/hdfs dfs -rm -r input ./bin/hdfs dfs -rm -r output
- 把需要统计的词频文件上传到input目录中
./bin/hdfs dfs -put /usr/local/hadoop/KarlMarx.txt input
- 创建myapp文件
cd /usr/local/hadoop mkdir myapp
- 将词频统计程序放到/usr/local/Hadoop/myapp文件中
cd到 /usr/local/hadoop中使用以下命令,运行打包的程序
./bin/hadoop jar ./myapp/WordCount.jar input output4.3、处理结果 4.3.1 查看output文件夹中有无生成文件
./bin/hdfs dfs -ls output4.3.2 使用以下命令查看统计结果并将结果输入到 KarlMarxCount.txt文件中
./bin/hdfs dfs -cat part-r-0000 | sudo tee /usr/local/KarlMarxCount.txt
自此,完成使用 MapReduce 对文件进行词频统计
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)