HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo
26 集群使用初步
HDFS的设计思路
l 设计思想
分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;
l 在大数据系统中作用:
为各类分布式运算框架(如:mapreduce,spark,tez,……)提供数据存储服务
l 重点概念:文件切块,副本存放,元数据
26.1 HDFS使用
1、查看集群状态
命令: hdfs dfsadmin –report
可以看出,集群共有3个datanode可用
也可打开web控制台查看HDFS集群信息,在浏览器打开http://hadoop:50070/
2、上传文件到HDFS
查看HDFS中的目录信息
命令:hadoop fs –ls /
上传文件
命令:hadoop fs -put ./findbugs-1.3.9 /
[toto@hadoop software]$ hadoop fs -put ./findbugs-1.3.9 / put: `/findbugs-1.3.9/LICENSE-ASM.txt': File exists put: `/findbugs-1.3.9/LICENSE-AppleJavaExtensions.txt': File exists put: `/findbugs-1.3.9/LICENSE-bcel.txt': File exists put: `/findbugs-1.3.9/LICENSE-commons-lang.txt': File exists put: `/findbugs-1.3.9/LICENSE-docbook.txt': File exists put: `/findbugs-1.3.9/LICENSE-dom4j.txt': File exists put: `/findbugs-1.3.9/LICENSE-jFormatString.txt': File exists |
查看上传后的信息列表(hadoop fs –ls / 或 hadoop fs -ls /findbugs-1.3.9)
从HDFS下载文件
命令:hadoop fs -get /findbugs-1.3.9/LICENSE-ASM.txt
[toto@hadoop learn]$ cd /home/toto/learn /home/toto/learn [toto@hadoop learn]$ pwd /home/toto/learn [toto@hadoop learn]$ hadoop fs -get /findbugs-1.3.9/LICENSE-ASM.txt [toto@hadoop learn]$ ls LICENSE-ASM.txt |
yarn的管理界面是:http://hadoop:8088/cluster
26.2模拟运行一个mapreduce程序
模拟运行一个mapreduce程序的时候,需要先启动hdfs,启动命令是:
[toto@hadoop1 hadoop-2.8.0]$cd /home/toto/software/hadoop-2.8.0 [toto@hadoop1 hadoop-2.8.0]$sbin/start-dfs.sh |
在/home/toto/software/hadoop-2.8.0/share/hadoop/mapreduce下有一个mapreduce的运行例子:
[toto@hadoop mapreduce]$ cd /home/toto/software/hadoop-2.8.0/share/hadoop/mapreduce [toto@hadoop mapreduce]$ pwd /home/toto/software/hadoop-2.8.0/share/hadoop/mapreduce [toto@hadoop mapreduce]$ ll 总用量 5088 -rw-r--r--. 1 toto hadoop 562900 3月 17 13:31 hadoop-mapreduce-client-app-2.8.0.jar -rw-r--r--. 1 toto hadoop 782739 3月 17 13:31 hadoop-mapreduce-client-common-2.8.0.jar -rw-r--r--. 1 toto hadoop 1571179 3月 17 13:31 hadoop-mapreduce-client-core-2.8.0.jar -rw-r--r--. 1 toto hadoop 195000 3月 17 13:31 hadoop-mapreduce-client-hs-2.8.0.jar -rw-r--r--. 1 toto hadoop 31533 3月 17 13:31 hadoop-mapreduce-client-hs-plugins-2.8.0.jar -rw-r--r--. 1 toto hadoop 66999 3月 17 13:31 hadoop-mapreduce-client-jobclient-2.8.0.jar -rw-r--r--. 1 toto hadoop 1587158 3月 17 13:31 hadoop-mapreduce-client-jobclient-2.8.0-tests.jar -rw-r--r--. 1 toto hadoop 75495 3月 17 13:31 hadoop-mapreduce-client-shuffle-2.8.0.jar -rw-r--r--. 1 toto hadoop 301934 3月 17 13:31 hadoop-mapreduce-examples-2.8.0.jar drwxr-xr-x. 2 toto hadoop 4096 3月 17 13:31 jdiff drwxr-xr-x. 2 toto hadoop 4096 3月 17 13:31 lib drwxr-xr-x. 2 toto hadoop 4096 3月 17 13:31 lib-examples drwxr-xr-x. 2 toto hadoop 4096 3月 17 13:31 sources [toto@hadoop mapreduce]$ 使用命令运行mapreduce命令: [toto@hadoop mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.8.0.jar pi 5 5 Number of Maps = 5 Samples per Map = 5 Wrote input for Map #0 Wrote input for Map #1 Wrote input for Map #2 Wrote input for Map #3 Wrote input for Map #4 Starting Job 17/05/29 14:47:36 INFO client.RMProxy: Connecting to ResourceManager at hadoop/192.168.106.80:8032 17/05/29 14:47:37 INFO input.FileInputFormat: Total input files to process : 5 17/05/29 14:47:37 INFO mapreduce.JobSubmitter: number of splits:5 17/05/29 14:47:38 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1495998405307_0001 17/05/29 14:47:39 INFO impl.YarnClientImpl: Submitted application application_1495998405307_0001 17/05/29 14:47:39 INFO mapreduce.Job: The url to track the job: http://hadoop:8088/proxy/application_1495998405307_0001/ 17/05/29 14:47:39 INFO mapreduce.Job: Running job: job_1495998405307_0001 17/05/29 14:48:00 INFO mapreduce.Job: Job job_1495998405307_0001 running in uber mode : false 17/05/29 14:48:00 INFO mapreduce.Job: map 0% reduce 0% |
进入hdfs的管理界面(http://hadoop:8088/cluster/apps),查看程序运行情况:
26.2 MAPREDUCE使用
mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序
26.2.1 Demo开发——wordcount
1、需求
从大量(比如T级别)文本文件中,统计出每一个单词出现的总次数
2、mapreduce实现思路
Map阶段:
a) 从HDFS的源数据文件中逐行读取数据
b) 将每一行数据切分出单词
c) 为每一个单词构造一个键值对(单词,1)
d) 将键值对发送给reduce
Reduce阶段:
a) 接收map阶段输出的单词键值对
b) 将相同单词的键值对汇聚成一组
c) 对每一组,遍历组中的所有“值”,累加求和,即得到每一个单词的总次数
d) 将(单词,总次数)输出到HDFS的文件中
1、 具体编码实现
(1)定义一个mapper类
//首先要定义四个泛型的类型 //keyin: LongWritable valuein: Text //keyout: Text valueout:IntWritable public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ //map方法的生命周期: 框架每传一行数据就被调用一次 //key : 这一行的起始点在文件中的偏移量 //value: 这一行的内容 @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //拿到一行数据转换为string String line = value.toString(); //将这一行切分出各个单词 String[] words = line.split(" "); //遍历数组,输出<单词,1> for(String word:words){ context.write(new Text(word), new IntWritable(1)); } } } |
(2)定义一个reducer类
//生命周期:框架每传递进来一个kv 组,reduce方法被调用一次 @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { //定义一个计数器 int count = 0; //遍历这一组kv的所有v,累加到count中 for(IntWritable value:values){ count += value.get(); } context.write(key, new IntWritable(count)); } } |
(3)定义一个主类,用来描述job并提交job
public class WordCountRunner { //把业务逻辑相关的信息(哪个是mapper,哪个是reducer,要处理的数据在哪里,输出的结果放哪里。。。。。。)描述成一个job对象 //把这个描述好的job提交给集群去运行 public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job wcjob = Job.getInstance(conf); //指定我这个job所在的jar包 // wcjob.setJar("/home/hadoop/wordcount.jar"); wcjob.setJarByClass(WordCountRunner.class); wcjob.setMapperClass(WordCountMapper.class); wcjob.setReducerClass(WordCountReducer.class); //设置我们的业务逻辑Mapper类的输出key和value的数据类型 wcjob.setMapOutputKeyClass(Text.class); wcjob.setMapOutputValueClass(IntWritable.class); //设置我们的业务逻辑Reducer类的输出key和value的数据类型 wcjob.setOutputKeyClass(Text.class); wcjob.setOutputValueClass(IntWritable.class); //指定要处理的数据所在的位置 FileInputFormat.setInputPaths(wcjob, "hdfs://hdp-server01:9000/wordcount/data/big.txt"); //指定处理完成之后的结果所保存的位置 FileOutputFormat.setOutputPath(wcjob, new Path("hdfs://hdp-server01:9000/wordcount/output/")); //向yarn集群提交这个job boolean res = wcjob.waitForCompletion(true); System.exit(res?0:1); } |
26.2.2 程序打包运行
1. 将程序打包
2. 准备输入数据
vi /home/hadoop/test.txt
Hello tom Hello jim Hello ketty Hello world Ketty tom |
在hdfs上创建输入数据文件夹:
hadoop fs mkdir -p /wordcount/input
将words.txt上传到hdfs上
hadoop fs –put /home/hadoop/words.txt /wordcount/input
3. 将程序jar包上传到集群的任意一台服务器上
4. 使用命令启动执行wordcount程序jar包
$ hadoop jar wordcount.jar cn.toto.bigdata.mrsimple.WordCountDriver/wordcount/input /wordcount/out
5. 查看执行结果
$ hadoop fs –cat /wordcount/out/part-r-00000
原文链接http://blog.csdn.net/tototuzuoquan/article/details/72802439
HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo的更多相关文章
- Hadoop生态圈-Azkaban实现文件上传到hdfs并执行MR数据清洗
Hadoop生态圈-Azkaban实现文件上传到hdfs并执行MR数据清洗 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果你没有Hadoop集群的话也没有关系,我这里给出当时我 ...
- Ubuntu本地文件上传至HDFS文件系统出现的乱码问题及解决方案
1.问题来源及原因 用shell命令上传到HDFS中之后出现中文乱码,在shell命令窗口查看如图: 在eclipse中的文件HDFS查看工具查看如图: 原因:上传至HDFS文件系统的文本文件(这里是 ...
- Hadoop_13_Hadoop Shell脚本采集日志上传到HDFS
案例1:开发shell采集脚本 1.点击流日志每天都10T,在业务应用服务器上,需要准实时上传至数据仓库(Hadoop HDFS)上 2.一般上传文件都是在凌晨24点操作,由于很多种类的业务数据都要在 ...
- FTP文件上传到HDFS上
在做测试数据时,往往会有ftp数据上传到hdfs的需求,一般需要手动操作,这样做太费事,于是有了下边代码实现的方式: ftp数据上传到hdfs函数: import java.io.InputStrea ...
- 解决从本地文件系统上传到HDFS时的权限问题
当使用 hadoop fs -put localfile /user/xxx 时提示: put: Permission denied: user=root, access=WRITE, inode=& ...
- PHP设计的超强大的文件上传类(单文件上传)
form.html <!DOCTYPE html> <html> <head> <title>文件上传</title> </head& ...
- Jenkins通过FTP上传站点太多文件导致太慢且不稳定,切换为压包上传再解压的思路(asp.net)
在本地先处理好要上传的站点文件之后,可能会因为一些网页切图导致ftp上传不稳定,中断,或者文件占用的问题. 那么换了一种实现思路,要借助jenkins的工具jenkins-cli.jar. 解决思路: ...
- Elasticsearch利用cat api快速查看集群状态、内存、磁盘使用情况
使用场景 当Elasticsearch集群中有节点挂掉,我们可以去查看集群的日志信息查找错误,不过在查找错误日志之前,我们可以通过elasticsearch的cat api简单判断下各个节点的状态,包 ...
- HDFS操作--文件上传/创建/删除/查询文件信息
1.上传本地文件到HDFS //上传本地文件到HDFS public class CopyFile { public static void main(String[] args) { try { C ...
随机推荐
- java 中 SVN 设置所有文件及子目录 needs-lock, svn 提交时自动设置 needs-lock, 及版本不一致问题
摘自: http://my.oschina.net/zhangzhihao/blog/72177 设置后的效果:文件会自动带上svn:needs-lock属性,默认是只读的要签出才能修改以防止修改完后 ...
- JS-得到屏幕宽高、页面宽高
window.screen.availWidth 返回当前屏幕宽度(空白空间) window.screen.availHeight 返回当前屏幕高度(空白空间) window.screen.width ...
- Linux挂载命令mount用法及参数详解
导读 mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了. 挂接命令(mount) 首先,介绍 ...
- Kettle中根据一个输入行派生出多个输出行
依然在北京,早上停电了,整个人感觉对不好了,接下来就说一下在使用ETL工具kettle做数据校验的时候遇到的一些问题,一级解决方案. 1:数据校验效果图下图: 原始表数据(需要校验的表数据) 对上表数 ...
- nmon 命令(转)
转载:https://www.cnblogs.com/kongzhongqijing/articles/4057487.html 一.基本使用 nmon目前可支持AIX和LINUX,可到以下地址去免费 ...
- 获取ArcGIS安装路径
在要素类进行符号化时,使用axSymbologyControl需要安装路径下的Style文件路径,在AE9.3+VS2008中是这样的: Microsoft.Win32.RegistryKey reg ...
- tomcat服务器开启gzip功能的方法
http://blog.csdn.net/wang_159369/article/details/8107163 tomcat5.0以后的版本是支持对输出内容进行gzip格式的压缩的.该功能默认是关闭 ...
- CSS命名规范 BEM
良好的代码结构,HTML和css元素之间的关系,对于项目交付是很重要的! BEM解释: (1).block 是BEM的区块(B),包含内容和风格.如bootstrap框架的.container. (2 ...
- 转:configure/make/make install的作用 linux 安装 卸载 make uninstall
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./configure 是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GC ...
- activeMQ Jms Demo
概述 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经 ...