深圳教育科技网站建设,网络公司排名,网页传奇游戏排行,免费域名备案使用IDEA直接运行Hadoop项目#xff0c;有两种方式#xff0c;分别是本地式#xff1a;本地安装HadoopIDEA#xff1b;远程式#xff1a;远程部署Hadoop#xff0c;本地安装IDEA并连接#xff0c; 本文介绍第二种。
一、安装配置Hadoop
(1)虚拟机伪分布式
见上才艺有两种方式分别是本地式本地安装HadoopIDEA远程式远程部署Hadoop本地安装IDEA并连接 本文介绍第二种。
一、安装配置Hadoop
(1)虚拟机伪分布式
见上才艺CentOS7从0到1部署Apache Hadoop生态集群
(2)云服务器分布式
如果是云主机需要注意hosts映射问题和安全组开放问题见阿里云腾讯云等云服务器搭建hadoop集群服务器内外网hosts配置文件问题
二、配置IDEA
1、安装配置Maven
IDEA自带了Maven为了更方便和更好的管理推荐自己安装Maven Maven是什么 Maven 是专门用于构建和管理Java相关项目的工具 使用Maven管理项目的3个好处: 1、使用Maven管理的Java 项目都有着相同的项目结构。 有一个pom.xml 用于维护当前项目都用了哪些jar包。所有的java代码都放在 src/main/java 下面 所有的测试代码都放在src/test/java 下面 。 2、便于统一维护jar包。把所有的jar包都放在了本地仓库“ 里然后哪个项目需要用到这个jar包只需要给出jar包的名称和版本号就行了这样就实现了jar包共享避免每一个项目都有自己的jar包带来的麻烦。 3、帮助开发人员将精力倾注在开发而不是在包的管理当中开发人员无需关注包的冲突问题和管理问题。 下载解压注意Maven版本需要和IDEA匹配否则可能会报错 下载地址apache-maven-3.6.3-bin.zip百度网盘链接 提取码hgdh 我的IDEA是201903运行实测无障碍。如果IDEA版本低可以百度升级方法配置环境变量 (1)先解压到自己的目录当中(随意) (2)打开电脑环境变量新建MAVEN_HOME为自己的解压目录紧接着添加/bib目录到Path_ (3)完成后使用mvn -v查看版本如果出现如图则环境变量配置完成配置仓库 进入解压目录备份修改setting.xml
!-- 自建maven自动下载的jar包会存放到该目录下 --
localRepositoryD:/server/maven/repository/localRepository配置镜像地址 国内镜像速度更快推荐修改
mirrorsmirroridalimaven/idmirrorOfcentral/mirrorOfnamealiyun maven/nameurlhttp://maven.aliyun.com/nexus/content/repositories/central//url/mirrormirroridalimaven/idnamealiyun maven/nameurlhttp://maven.aliyun.com/nexus/content/groups/public//urlmirrorOfcentral/mirrorOf/mirrormirroridcentral/idnameMaven Repository Switchboard/nameurlhttp://repo1.maven.org/maven2//urlmirrorOfcentral/mirrorOf/mirrormirroridrepo2/idmirrorOfcentral/mirrorOfnameHuman Readable Name for this Mirror./nameurlhttp://repo2.maven.org/maven2//url/mirrormirroridibiblio/idmirrorOfcentral/mirrorOfnameHuman Readable Name for this Mirror./nameurlhttp://mirrors.ibiblio.org/pub/mirrors/maven2//url/mirrormirroridjboss-public-repository-group/idmirrorOfcentral/mirrorOfnameJBoss Public Repository Group/nameurlhttp://repository.jboss.org/nexus/content/groups/public/url/mirrormirroridgoogle-maven-central/idnameGoogle Maven Central/nameurlhttps://maven-central.storage.googleapis.com
/urlmirrorOfcentral/mirrorOf/mirror
!-- 中央仓库在中国的镜像 --mirroridmaven.net.cn/idnameoneof the central mirrors in china/nameurlhttp://maven.net.cn/content/groups/public//urlmirrorOfcentral/mirrorOf/mirror/mirrors在IDEA中配置Maven (1)关闭所有项目防止配置只生效当前项目 (2)打开Settings,在输入框输入maven这里要注意选择了自定义的maven后 一定要勾选Override(覆盖)。同时保证 Local repository 项填写的路径和你勾选的配置文件中配置的路径是一致的。 (3)设置镜像源(如果在setting中设置可跳过) (4)配置Intellij IDEA中自动下载jar包 :依次点击File - Setting -Maven -Importing选中Automatically download中的两个多选框Sources和Documentation
2、新建Maven项目
点击File–New–Project选择Maven 新建后会出现如图所示界面 1SRC项目代码所属目录放到Java文件中正式 2TEST测试代码 3POM.xml包管理文件需要的包以键值对的方式传入 4导入包的方式点击导入 5也是导入包的方式点击后本项目的包自动导入
三、设置连接Hadoop
新建完成后需要设置导入包新建class
1、Linux中操作
(1)拷出hdfs-site.xml和core-site.xml文件 安装lrzsz后可以选择sz保存到Windows中或者使用软件拷出也可以 (2)启动集群
$HADOOP_HOME/sbin/start-all.sh(3)创建目录上传文件到hdfs中
[rootmaster ~]# hdfs dfs -mkdir /data
[rootmaster ~]# hdfs dfs -mkdir /out
[rootmaster ~]# hdfs dfs -put ./word.txt /data/
[rootmaster ~]# hdfs dfs -ls /data/
Found 1 items
-rw-r--r-- 3 root supergroup 22 2020-08-08 18:14 /data/word.txt
[rootmaster ~]# hdfs dfs -cat /data/word.txt
hello word
hello Java
[rootmaster ~]#2、IDEA中操作
(1)导入hadoop配置文件到resources中 (2)查看一下本项目的Maven是否配置生效了如果没有则修改
(3)修改pom.xml文件导入需要的包(无需更改内容)
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdJavaHadoopProJectS/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingdependenciesdependencygroupIdorg.apache.hadoop/groupIdartifactIdhadoop-client/artifactIdversion2.7.3/version/dependency
/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion2.4/versionconfigurationarchivemanifestmainClassorg.hhrz.mapreduce.demo.JobMain/mainClass/manifest/archive/configuration/plugin/plugins
/build修改文件后点击右下角的自动导入包 (4)新建wordcount类(注意编程规范)
package hadoop;
import java.io.IOException;
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;
import org.apache.log4j.BasicConfigurator;public class WordCount {public static class Map extends MapperObject,Text,Text,IntWritable{private static IntWritable one new IntWritable(1);private Text word new Text();public void map(Object key,Text value,Context context) throws IOException,InterruptedException{StringTokenizer st new StringTokenizer(value.toString());while(st.hasMoreTokens()){word.set(st.nextToken());context.write(word, one);}}}public static class Reduce extends ReducerText,IntWritable,Text,IntWritable{private static IntWritable result new IntWritable();public void reduce(Text key,IterableIntWritable values,Context context) throws IOException,InterruptedException{int sum 0;for(IntWritable val:values){sum val.get();}result.set(sum);context.write(key, result);}}static {try {System.load(D:/JavaFile/bin/hadoop.dll);//建议采用绝对地址bin目录下的hadoop.dll文件路径} catch (UnsatisfiedLinkError e) {System.err.println(Native code library failed to load.\n e);System.exit(1);}}public static void main(String[] args) throws Exception{BasicConfigurator.configure(); //自动快速地使用缺省Log4j环境。System.setProperty(HADOOP_USER_NAME, root);Configuration conf new Configuration();String[] otherArgs new GenericOptionsParser(conf,args).getRemainingArgs();if(otherArgs.length ! 2){System.err.println(Usage WordCount int out);System.exit(2);}Job job new Job(conf,word count);job.setJarByClass(WordCount.class);job.setMapperClass(Map.class);job.setCombinerClass(Reduce.class);job.setReducerClass(Reduce.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(otherArgs[0]));FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}(5)传入参数 第一个路径是输入路径可以精确到某个文件也可以模糊到文件夹但是注意输入参数是文件夹时文件夹内不能再包含文件夹第二个路径是输出路径输出路径后不能存在否则会报错。两个文件路径都是HDFS上 (6)运行
四、可能出现的问题
1.org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V 原因缺少hadoop.dll或winutils.exe等驱动需要下载对应hadoop版本的hadoop.dll(相差较少版本据说也可以如2.7.3版本Hadoop可以使用2.6的Hadoop.dll)。 解决方案(1)将文件放置到$Hadoop/bin下或者 (2)添加到代码当中 (建议放到main的上面) 链接hadoop-common-2.7.3-bin百度网盘链接 提取码qf5b
static {try {System.load(D:/JavaFile/bin/hadoop.dll);//建议采用绝对地址bin目录下的hadoop.dll文件路径} catch (UnsatisfiedLinkError e) {System.err.println(Native code library failed to load.\n e);System.exit(1);}}2.log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
原因log4j缺省问题 解决方法(1)配置log4j.properties(不推荐复杂)或者 (2)添加代码 public static void main(String[] args) throws Exception{BasicConfigurator.configure(); //自动快速地使用缺省Log4j环境。建议放到mian当中以上两个问题的解决代码已经写入到WordCount中无需额外复制粘贴 参考链接IntelliJ IDEA运行WordCount详细版