Hadoop基础教程,hadoop写流程
第一步 安装hadoop集群
1.安装jdk。现在是jdk8。Hadoop集群安装失败,因为jdk9、10和11将删除一些类。不要详细解释安装。2.请注意hadoop的安装细节。Namenode和资源管理器必须在同一台计算机上才能在Namenode上启动yarn。www.Sina.com/http://www.Sina.com/*一路358号。服务器端直接操作使用hadoop命令。
将文件上传到hdfs并下载到本地示例。
# 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 @ node 21 admin]Hadoop fs-mkdir-p/user/来存储这个文件。无聊的帮助是hello root @ node 21 admin]# Hadoop fs-help-help:未知命令用法3360 Hadoop fs[-generic options][[-checksumsrc。] [-chgrp [-r] grouppath。] [-chmod [-r]模式,模式。八进制模式路径。][-chown[-r][所有者][:[组]]路径。][-从本地[-p]][-复制到lop[-h][-v][-t[storage TTT]-p[topax][-d]src . dst][-createsnapshotsnapshotdir[snapshot name]。这个diwc.txt/user/input # 4ST验证这个文件是否已经存在[root @ nod e21 admin]# Hadoop fs-ls/user/input-rw-r-2 admin][root @ nod e21 admin]# Hadoop fs-get/user/input/WC . txt/home/admin/Hadoop/xzg/[roo op/xzg]input/WC。2、运行hadoop的简单例子,http://www.Sina.com/Hadoop JAR/OPT/Hadoop 3/Share/Hadoop/map-reduce/Hadoop。
上面的Hadoop jar运行的是jar包。名为Hadoop-MapReduce-Examples-3 . 1 . 1 . jar的jar是Hadoop自己提供的。还有很多简单的例子(如果有兴趣,请在官网或github上解冻或确认相关来源)。Word就是其中之一。在这里,指定运行用于计算字数的wordcount实例的输入路径。/user/input/word.txt必须在hdfs的/user/input路径下创建并上传文件本身。可以参考一下内容。
[admin @ node 21 ~ ~]$ Hadoop fs-cat/user/input/word . txt ilove you/user/output是我们指定输出的结果路径的执行结果。
以下(part-r-00000是默认产生的文件,可以通过hadoop fs -ls /user/outpu查看):
[admin @ node 21 ~]$ Hadoop fs-cat/user/output/part-r-00000 I 1 love 1 you 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包下)。
Image.png
2st将hadoop server的配置文件添加到项目src目录中。它将在项目启动时使用,否则将报告错误。
Image.png
3st开发之前,需要在开发环境中配置hadoop的路径。
Image.png
当windows在本地运行mr程序时(不交给yarn,而是在jvm中运行,由线程执行),hadoop.dll会防止nativeio异常和空指针异常,如果winutils.exe没有的话。所以我们需要根据服务器和本地hadoop版本,把这个winutils.exe添加到你本地hadoop的欢呼夕阳目录,(github下载地址)[https://github.com/steveloughran/winutils],不过我用的是3.1的3.0版本。
4st一个简单的测试连接服务端分布式文件系统类public class第3章{ public static void main(String[]args){ try { String filename= HDFS://10。11 .91 .225:9000/用户/输入/数据。txt ;配置配置=新配置();conf.set(fs.defaultFS , HDFS://10。11 .91 .225:9000 );//conf。set( MapReduce。工作追踪。地址, 10。11 .91 .255:9000 );//这个解决分布式文件系统问题conf.set(fs.hdfs.impl ,org。阿帕奇。Hadoop。HDFS。分布式文件系统。班级。getname());//这个解决本地文件问题conf.set(fs.file.impl ,org。阿帕奇。Hadoop。fs。本地文件系统。班级。getname());文件系统。get(conf);如果(文件系统存在(新路径(文件名))){ System.out.println(文件存在);//fs .}else{ System.out.println(文件不存在);} }捕捉(异常e){ e . printstacktrace();} }} 上面代码本地开发环境和远程服务的连通测试
3st编写一个任务,从本地开发环境丢到大数据集群上运行(这是一个计算单词钥匙,合并价值的例子)先写个文件丢到分布式文件系统上[admin @ node 21 ~]$ Hadoop fs-cat/user/input/WC。txta,1 b,1 b,5a,3 c,3 d,15 e,11a,2 d,2预期我们想要的结果如下:
6b 6c 3d 17e 11代码实现,主要三个类
单词计数映射器类用于使分离和地图阶段////这个制图人类是一个泛型类型,它有四个形参类型,分别指定地图函数的输入键、输入值、输出键、输出值的类型公共类单词计数映射器扩展了MapperLongWritable,Text,Text,IntWritable { //该方法循环调用,从文件的使分离中读取每行调用一次,把该行所在的下标为钥匙,该行的内容为值保护的void map(LongWritable键,文本值,上下文上下文)抛出IOException,中断的异常{ String[]words=String utils。分割(值。tostring(), );for(String w :words){ //a,1 a,2重新组装a:1 a:2 String[] kevs=w.split(,);context.write(新文本(kevs[0]),new int writable(整数。(kevs[1])的值;} }} WordCountReducer类用于洗牌和减少阶段公共类WordCountReducer扩展ReducerText,IntWritable,Text,IntWritable { //每组调用一次,这一组数据特点:键相同,值可能有多个受保护的void reduce(Text arg0,IterableIntWritable arg1,Context arg2)抛出IOException,InterruptedException { //增加所有的值int sum=0;for(int writable I:arg 1){ sum=sum I . get();} arg2.write(arg0,new int writable(sum));}}运行作业类为程序的入口和工作的设置公共类运行job { public static void main(String[]args){ Configuration config=new Configuration();//config.set(fs.defaultFS , HDFS://Hadoop master:9000 ); fs.defaultFS , HDFS://10。11 .91 .225:9000 );//node22为hadoopyarn-site.xml中的配置配置。设置(纱线。资源经理。主机名,节点22 );//设置执行的用户,需要是服务端的大数据用户,否则无权限执行,报错AccessControlException:权限被拒绝系统。设置属性( HADOOP _ USER _ NAME , admin );//config.set(mapred.jar , C:\ \ Users \ \ Administrator \ \ Desktop \ \ WC。jar’);//先打包好WC。jar try {文件系统fs=文件系统。get(config);工作工作=工作。getinstance(config);工作。setjarbyclass(运行作业。类);工作。setjobname( WC );工作。setmapper类(字数映射器。类);工作。setreducerclass(字数减少器。类);工作。setmapoutputkeyclass(text。类);工作。setmapoutputvalueclass(int可写。类);文件输入格式。addinputpath(作业,新路径(/用户/输入/WC。txt’));//新建好输入路径,且数据源路径输出路径=新路径(/用户/输出/WC );如果(fs。存在(路径外)){ fs。delete(out path,true);}文件输出格式。setoutputpath(作业,输出路径);布尔f=作业。等待完成(真);if(f){ System.out.println(job任务执行成功);} }捕捉(异常e){ e . printstacktrace();} }}注意:由于本地为windows下环境需要修改hadoop源码,否则会出现NativeIO$Windows.access错误(hadoop源码)【https://github.com/apache/hadoop】下载本地后修改如下文件
\ Hadoop-common-project \ Hadoop-common \ src \ main \ Java \ org \ Apache \ Hadoop \ io \ native io \ native io。爪哇
图片100 . png
修改后添加到本地,新建的包名要和大数据的相同,这样本地执行引入的冲突会优先加载该类。
图片100 . png
最后运行成功后,查看运行结果
[admin @ node 21 ~]$ Hadoop fs-cat/user/output/WC/part-r-00000 a 6b 6c 3d 17e 11和预期相同,很好最后顺便贴出项目结构吧
图片100 . png
第五步剩下的理解上面的代码,然后根据自己想法编写,已经理解大数据运行原理和源码。好了,你已经算是入门了,哦错了应该是我
什么源码?那就上传到gayhub
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。