首页 > 编程知识 正文

hadoop工作流程,hadoop初级教程

时间:2023-05-06 09:04:23 阅读:142811 作者:1402

第一步 安装hadoop集群

1、安装jdk。 现在是jdk8。 hadoop群集安装失败,因为jdk9、10和11将删除某些类。 不详细说明安装。 2、请注意hadoop的安装细节。 Namenode和资源管理器必须在同一台计算机上才能在Namenode上启动yarn。 3358 www.Sina.com/http://www.Sina.com/* 1、服务器端直接操作使用hadoop命令操作

将文件上载到hdfs并下载到本地example

# 1st在本地创建新文件[root@node21 admin]# cat wc.txt a、1 b、1 b、5a、3 c、3 d、15 e、11a、2 d、2 # 2在sthadoop上创建目录在可以查看用于存储此文件的[ root @ nod e21 admin ] Hadoop fs-mkdir-p/user/input Hadoop的fs命令下,与linux命令有许多相似之处。 无聊的help是hello root @ nod e21 admin ] # Hadoop fs---help---help : unknowncommandusage 3360 Hadoop fs [-generic options ] [ [-checksumsrc . ] [-chgrp [-r ] group path . ] [-chmod [-r ]模式, 模式.|octalmodepath . ] [-chown [-r ] [ owner ] [ : [ group ] ] path . ] [-copy from local [-p ] ] [-copy to lop [-h ] [-v ] [-t [ storage TTT ]-p [ topax ] [-d ] src . dst ] [-createsnapshotsnapshotdir [ snapshot name ] .此迪wc.txt /user/input# 4st验证此文件是否已存在[ root @ nod e21 admin ] # Hadoop fs-ls/user/input-rw-r--2admin ] [ root @ nod e21 admin ] # Hadoop fs-get/user/input/WC.txt/home/admin/Hadoop/xzg/[ roo op/xzg ] input/WC . 2、运行hadoop简单事例,map-reduce机制http://www.Sina.com/Hadoop jar/opt/Hadoop3/share/Hadoop/MapReduce/Hadoop

上面的hadoop jar正在运行jar包。 名为Hadoop-MapReduce-examples-3.1.1.jar的jar由Hadoop自己提供。 其中有很多简单的例子(如果你感兴趣的话,请解冻或者在官方网站或github上确认相关来源)。 wordcount是其中之一。 在此指定运行用于计算单词数的wordcount实例的输入路径。 /user/input/word.txt必须自己在hdfs的/user/input路径下创建并上载文件。 内容可以参考

[ admin @ nod e21~~ ] $ Hadoop fs-cat/user/input/word.txti love you/user/output是我们指定输出的结果路径的执行结果

下(part-r-00000是默认结果生产的文件,可以hadoop fs -ls /user/outpu查看):

[admin@node21 ~]$ hadoop fs -cat /user/output/part-r-00000i 1love 1you 1

对大数据以及人工智能概念都是模糊不清的,该按照什么线路去学习,学完往哪方面发展,想深入了解,想学习的同学欢迎加入大数据学习qq群:458345782,有大量干货(零基础以及进阶的经典实战)分享给大家,并且有清华大学毕业的资深大数据讲师给大家免费授课,给大家分享目前国内最完整的大数据高端实战实用学习流程体系 。从java和linux入手,其后逐步的深入到HADOOP-hive-oozie-web-flume-python-hbase-kafka-scala-SPARK等相关知识一一分享!


 

第四步 本地开发

我这里使用的idea,作为本地开发工具

1st 首先需要导入相关jar包,jar来源就是下载hadoop后解压后的share文件里(具体以个人,不过主要common、hdfs、mapreduce、yarn这几个包下的)

图片.png

2st 将hadoop服务端的配置文件,加入项目src目录下。项目启动时会使用到,否则会报错

图片.png

3st 开发前需要配置开发环境的hadoop的path

图片.png

windows本地运行mr程序时(不提交到yarn,运行在jvm靠线程执行),hadoop.dll防止报nativeio异常、winutils.exe没有的话报空指针异常。

所以我们需要额外添加这winutils.exe到你本地hadoop的欢呼的夕阳目录下, (github下载地址)[https://github.com/steveloughran/winutils] 根据服务端及本地hadoop版本选择,不过我使用3.1的选择的3.0版本

4st 一个简单的测试连接服务端hdfs类 public class Chapter3 { public static void main(String[] args) { try { String filename = "hdfs://10.11.91.225:9000/user/input/data.txt"; Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://10.11.91.225:9000");// conf.set("mapreduce.jobtracker.address", "10.11.91.255:9000"); // 这个解决hdfs问题 conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); // 这个解决本地file问题 conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName()); FileSystem fs = FileSystem.get(conf); if(fs.exists(new Path(filename))) { System.out.println("文件存在");// fs. }else{ System.out.println("文件不存在"); } } catch (Exception e) { e.printStackTrace(); } }}

上面代码本地开发环境和远程服务的连通测试

3st 编写一个任务,从本地开发环境丢到hadoop集群上运行(这是一个计算单词key,合并value的例子) 先写个文件丢到hdfs上 [admin@node21 ~]$ hadoop fs -cat /user/input/wc.txta,1 b,1 b,5a,3 c,3 d,15 e,11a,2 d,2

预期我们想要的结果如下:

a 6b 6c 3d 17e 11

代码实现,主要三个类

WordCountMapper 类用于split和map阶段 // //这个Mapper类是一个泛型类型,它有四个形参类型,分别指定map函数的输入键、输入值、输出键、输出值的类型public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { //该方法循环调用,从文件的split中读取每行调用一次,把该行所在的下标为key,该行的内容为value protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] words = StringUtils.split(value.toString(), ' '); for(String w :words){ //a,1 a,2 重新组装a:1 a:2 String[] kevs = w.split(","); context.write(new Text(kevs[0]), new IntWritable(Integer.valueOf(kevs[1]))); } }} WordCountReducer类用于Shuffle和reduce阶段 public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { //每组调用一次,这一组数据特点:key相同,value可能有多个。 protected void reduce(Text arg0, Iterable<IntWritable> arg1, Context arg2) throws IOException, InterruptedException { //增加所有的值 int sum =0; for(IntWritable i: arg1){ sum=sum+i.get(); } arg2.write(arg0, new IntWritable(sum)); }} RunJob类为程序的入口和job的设置 public class RunJob { public static void main(String[] args) { Configuration config =new Configuration();// config.set("fs.defaultFS", "hdfs://HadoopMaster:9000"); config.set("fs.defaultFS", "hdfs://10.11.91.225:9000"); //node22为hadoopyarn-site.xml中的配置 config.set("yarn.resourcemanager.hostname", "node22"); //设置执行的用户,需要是服务端的hadoop用户,否则无权限执行,报错.AccessControlException: Permission denied System.setProperty("HADOOP_USER_NAME", "admin");// config.set("mapred.jar", "C:\Users\Administrator\Desktop\wc.jar");//先打包好wc.jar try { FileSystem fs =FileSystem.get(config); Job job = Job.getInstance(config); job.setJarByClass(RunJob.class); job.setJobName("wc"); job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path("/user/input/wc.txt"));//新建好输入路径,且数据源 Path outpath =new Path("/user/output/wc"); if(fs.exists(outpath)){ fs.delete(outpath, true); } FileOutputFormat.setOutputPath(job, outpath); boolean f= job.waitForCompletion(true); if(f){ System.out.println("job任务执行成功"); } } catch (Exception e) { e.printStackTrace(); } }}

注意:由于本地为windows下环境需要修改hadoop源码,否则会出现NativeIO$Windows.access错误 (hadoop源码)[https://github.com/apache/hadoop] 下载本地后修改如下文件

hadoop-common-projecthadoop-commonsrcmainjavaorgapachehadoopionativeioNativeIO.java

图片.png

修改后添加到本地,新建的包名要和hadoop的相同,这样本地执行引入的jar会优先加载该类。

图片.png

最后运行成功后,查看运行结果

[admin@node21 ~]$ hadoop fs -cat /user/output/wc/part-r-00000a 6b 6c 3d 17e 11

和预期相同,很好 最后顺便贴出项目结构吧

图片.png

第五步 剩下的理解上面的代码,然后根据自己想法编写,已经理解hadoop运行原理和源码。好了,你已经算是入门了,哦 错了 应该是我

什么 源码? 那就上传到gayhub

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。