用php做电子商务网站,长沙网红小吃,拓普建站推广,知名品牌形象设计公司文章目录 配置环境环境准备连接 Hadoop查看 hadoop 文件 导入 Hadoop 包创建 MapReduce 项目测试 Mapreduce 编程代码注意事项常见报错 配置环境
环境准备
本次实验使用的 Hadoop 为 2.7.7 版本#xff0c;实验可能会用到的文件
百度网盘链接#xff1a;https://pan.baidu… 文章目录 配置环境环境准备连接 Hadoop查看 hadoop 文件 导入 Hadoop 包创建 MapReduce 项目测试 Mapreduce 编程代码注意事项常见报错 配置环境
环境准备
本次实验使用的 Hadoop 为 2.7.7 版本实验可能会用到的文件
百度网盘链接https://pan.baidu.com/s/1HZPOpg5MAiWXaN9DIcIUGg 提取码gahr
迅雷云盘链接https://pan.xunlei.com/s/VNkp2rp8az9m70YWCe5ifxm3A1?pwdggeq#
1下载hadoop-eclipse-plugin-2.7.3.jar包
2将jar包把放置到eclipse文件的plugins目录下
3将hadoop解压到E盘
配置环境变量添加用户变量HADOOP_HOME值为E:\hadoop-2.7.7
Path新建%HADOOP_HOME%\bin、%HADOOP_HOME%\sbin
连接 Hadoop
1打开 Eclipse ➡ Window ➡ Perspective ➡ Open Perspective ➡ other 2Map/Reduce ➡ Open 3进入界面后选择 Map/Reduce Locations点击蓝色图标配置连接。 4配置 hadoop 集群连接位置 Location namemyhadoop随便填 Host192.168.88.102填虚拟机IP地址 Port9000填之前 Hadoop 中 core-site.xml 配置文件中fs.defaultFS 对应的端口号 查看 hadoop 文件
打开 myhadoop 查看文件内容测试完全正确。 导入 Hadoop 包
选择Window ➡ Perferencces ➡ Hadoop Map/Reduce ➡ Browse
选择所对应的 hadoop 安装包目录 创建 MapReduce 项目
1创建 ProjectFile ➡ New ➡ Project 2创建 MapReduce 项目 3填写项目名 Wordcnt 4打开引入的库可以看到 hadoop 的 jar 包已经导入如图所示不过我们此次要测试的 WordCount 类在测试包里面我们现在需要先导入 hadoop 里自带的 examples 测试包。 5构建路径配置步骤Reference Libraries ➡ Build Path ➡ Configure Build Path 6导入 jar 包Java Build Path ➡ Add External JARs ➡ examples.jar ➡ Apply and Close 如图所示 7创建类 测试 Mapreduce 编程代码
1Java 测试代码如下
package org.apache.hadoop.examples;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.examples.WordCount.*;
import org.apache.hadoop.fs.FileSystem;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;public class Wordcnt {public Wordcnt() {}public static void main(String[] args) throws Exception {// 使用 hadoop 的用户System.setProperty(HADOOP_USER_NAME, user);Configuration conf new Configuration();String[] otherArgs (new GenericOptionsParser(conf, args)).getRemainingArgs();if (otherArgs.length 2) {System.err.println(Usage: wordcount in [in...] out);System.exit(2);}// 每次运行前检查输出路径是否存在存在就删除FileSystem fs FileSystem.get(conf);Path outPath new Path(otherArgs[1]);if(fs.exists(outPath)) {fs.delete(outPath, true);}// 启用跨平台将应用程序从Windows客户端提交到Linux / Unix服务器conf.set(mapreduce.app-submission.cross-platform,true);Job job Job.getInstance(conf, word count);job.setJarByClass(WordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReducer.class);job.setReducerClass(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);}
}2将 core-site.xml、hdfs-site.xml、log4.properties 三个文件下载放到 src 目录下 3右击 java 文件 ➡ Run As ➡ Run Configurations 4创建一个Java Application双击就可以了 ➡ Arguments ➡ 第一个路径为 hadoop 上测试文件路径第二个为输出文件路径第二个路径用 jar 包中是不可以存在的测试代码以更改可以存在 5查看运行提示信息与结果与 Linux 中结果一致 注意事项
1这里的 user 需要改成自己所用的用户名
// 使用 hadoop 的用户
System.setProperty(HADOOP_USER_NAME, user);2同系统中不需要这行代码这里加上是因为我的 Hadoop 是部署在 Linux 系统上代码是在 Windows 系统上运行的
// 启用跨平台将应用程序从Windows客户端提交到Linux / Unix服务器
conf.set(mapreduce.app-submission.cross-platform,true);这个参数在 mapred-default.xml 文件里写到如果启用用户可以跨平台提交应用程序即从 Windows 客户端提交应用程序到 Linux/Unix 服务器反之亦然。默认情况下是关闭的。链接hadoop.apache.org/docs/r2.7.7/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
namevaluedescriptionmapreduce.app-submission.cross-platformfalseIf enabled, user can submit an application cross-platform i.e. submit an application from a Windows client to a Linux/Unix server or vice versa.
请注意由于在 Windows 上使用 Eclipse 编写 MapReduce 程序但实际运行是在 Linux 虚拟机上的 Hadoop 集群所以需要 确保主机名和 IP 地址的映射 在虚拟机和 Windows 主机的 hosts 文件中都是正确的。
常见报错
1报错内容如下
Could not locate executable winutils.exe in the Hadoop binaries这是因为 Hadoop 都是运行在 Linux 系统下的在 Windows 下 Eclipse 中运行 Mapreduce 程序需要支持插件
下载 hadoop-common-2.2.0-bin-master 把其中的 winutils.exe 和 hadoop.dll 放到 windows 安装的 hadoop 的 bin 目录下或者直接放到 C:\Windows\System32 目录下就可以了版本最好对应
2报错内容如下
INFO mapreduce.JobSubmitter: Cleaning up the staging area /tmp/hadoop-yarn/staging/root/.staging/job_1510302622448_0003出错原因单机读取的是本地的文件分布式环境下需要从hdfs 上读取文件。
解决方案将本地的文件上传到 hdfs 上然后再运行可以成功执行。
报错内容
Output directory xxx already exists出错原因输出目录已存在
解决方案修改输出目录输出目录需要为空目录所以在后面随便加上一个目录名则会在 /output 目录下创建目录如果是多次计算每次都需要指定不同的目录用于存储结果。
Hadoop文件系统命令参考FileSystem Shell
下面给出几个常用命令
# 1 新建文件夹
hadoop dfs -mkdir [-p] paths
# 2 上传本地文件
hadoop fs -put localfile /hadoopdir
# 3 查看 hadoop 文件
hadoop fs -ls /hadoopfile
hadoop fs -ls -e /hadoopdir
# 4 修改文件夹权限
hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
# 5 删除文件夹
hadoop fs -rm -r /hadoopdir