HDFS简单实践以及遇到的小问题

引言

​ 哇,好久没更新,最近工作太忙了。记得上次我们简单了解了一下Hadoop的HDFS吗?今天我们就来简单的搭建一下,非常简单,带大家一起深入看看。本次使用的是虚拟机VM14版本、系统CentOS7 、Hadoop为3.X

PS:Hadoop版本不一样,做法可能有差异


至于如何安装,大家可以在网上自行查找,我认为比较有参考价值的我就粘出来:

1、 https://blog.csdn.net/babyxue/article/details/80970526【VMware安装Centos7超详细过程(图文)】

2、 https://blog.csdn.net/u010476739/article/details/86647585 【centos7.6安装配置hadoop-3.2.0笔记(单机安装、伪分布式安装)】

3、 https://blog.csdn.net/jimuka_liu/article/details/82784313【centos安装hadoop超级详细没有之一】

兄弟们,只能帮你们到这里了

这里就简单总结一下,安装hadoop的注意点:

【单机、伪分布式】

  1. 把虚拟机的网络设置好(我使用的是NAT)
  2. 下载并上传hadoop3.Xjdk1.8(可下可不下)安装包到你的虚拟机
  3. 获权root
  4. 装好centOS必要的插件rsync
  5. 关闭防火墙,并检查你虚拟机内是否存在jdk,若无请安装、修改系统环境变量
  6. 安装Hadoop,记得要在bin目录下执行指令(你懂的)——老手忽略这一点
  7. 运行伪分布式要记得合理修改配置xml文件,注意ip地址,注意能否ssh免密码登录
  8. 修改完任何配置文件后,都要进行格式化

【集群】

  1. 网络方面更需要设置好
  2. 创建多个hadoop用户,同时记得赋root权
  3. hosts设置好节点
  4. 在每台机子设置好/etc/profile的Hadoop环境

​ 这里不做过多解释了,我在上手的过程中,会出现很多小问题,供大家参考解决方案【求大家给出你们遇到的问题和更好的方案共享】

情况一

[hadoop@cenServer bin]$ ./hadoop version
ERROR: JAVA_HOME is not set and could not be found.

回答:明显是你装了java之后没有配置环境变量,记得随时java -version检查一下。

情况二

[hadoop@cenServer bin]$ ./hadoop version
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /opt/hadoop/hadoop-3.2.0/logs/fairscheduler-statedump.log (权限不够)

回答:看到权限不够或者Permission denied字样,应该懂得使用sudo塞?什么?不想输入密码?参考

https://blog.csdn.net/Z0157/article/details/82079252 【Liunx:sudo命令不在重复输入password,和不再每次都输入sudo】

情况三

[hadoop@cenServer hadoop-3.2.0]$ bin/hdfs namenode -format
ERROR: Unable to write in /opt/hadoop/hadoop-3.2.0/logs. Aborting.

回答:要么你还是sudo,要么你就chmod -R 777 /opt/hadoop/hadoop-3.2.0/logs给他赋权呗

情况四

Starting namenodes on [192.xxx.xxx.134]
上一次登录:五 5月 31 10:34:23 CST 2019pts/4 上
192.168.114.134: ssh: connect to host 192.168.114.134 port 22: Connection timed out
Starting datanodes
上一次登录:五 5月 31 10:36:23 CST 2019pts/4 上
Starting secondary namenodes [cenServer]
上一次登录:五 5月 31 10:36:34 CST 2019pts/4 上
cenServer: ssh: Could not resolve hostname censerver: Name or service not known

回答:假如在启动hadoop出现以上的情况,首先可以去logs去查日志,其次就是查看/etc/hosts内有无设置好ip地址,如上不认识censerver,就需要把censerver给一个localhost,要设置自己正确的ip窝。

情况五

[root@cenServer hadoop-3.2.0]# bin/hdfs dfs -put input input_test
2019-06-03 10:13:33,439 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
put: Cannot create directory /user/root/input_test/input. Name node is in safe mode.

回答:看见Name node is in safe mode.字样,肯定让其离开安全模式,即可输入hadoop dfsadmin -safemode leave指令。

情况六

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

回答:由于可能存在依赖包版本过低,看到这种提示,一可以选择忽略,二是可以先排除64位与32位的问题,其次就是查看glibc 版本和输入hadoop checknative -a指令查看是否出现false字样。

解决方案参考:

https://blog.csdn.net/u010003835/article/details/81127984 【1】

https://blog.csdn.net/daiqinge/article/details/83545443 【2】


开撸,首先成功启动Hadoop的时候,我们不难发现一些关键词出现在上一篇介绍hdfs的文章,

[root@cenServer hadoop-3.2.0]# sbin/start-dfs.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [cenServer]
上一次登录:五 5月 31 10:44:00 CST 2019pts/4 上
cenServer: Warning: Permanently added 'censerver,192.xxx.xxx.130' (ECDSA) to the list of known hosts.
Starting datanodes
上一次登录:五 5月 31 11:09:48 CST 2019pts/4 上
Starting secondary namenodes [cenServer]
上一次登录:五 5月 31 11:09:51 CST 2019pts/4 上

namenodesdatanodes还有secondary namenodes的进程启动,你甚至可以输入jps去查看这些进程是否启动。

为了不同于链接中的例子,整一个demo演示一波hadoop-mapreduce-examples-3.2.0.jar这个包的作用,以此简单介绍一下map-reduce。

首先当然是创建目录

[root@cenServer hadoop-3.2.0]# mkdir input
[root@cenServer hadoop-3.2.0]# cd input/

再创建两份文件,分别输入内容hello worldhello hadoop

[root@cenServer input]# touch fileA.txt;echo "hello world" >> fileA.txt
[root@cenServer input]# touch fileB.txt;echo "hello hadoop" >> fileB.txt

将input目录上传到hadoop上命名为input_test,并查看

[root@cenServer hadoop-3.2.0]# bin/hdfs dfs -put input input_test

[root@cenServer hadoop-3.2.0]# bin/hdfs dfs -ls
Found 1 items
drwxr-xr-x   - root supergroup          0 2019-05-31 17:26 input_test

运行map-reduce包的wordcount功能,待运行完毕后会生成output文件夹

[root@cenServer hadoop-3.2.0]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount input_test output

运行成功的话,打开output文件夹里面的part-r-00000 的文件内容

[root@cenServer hadoop-3.2.0]# bin/hdfs dfs -cat output/part-r-00000
hadoop  1
hello   2
world   1

表面上的确是单词统计的功能,我们先反编译这个jar包看看源码:

源码

加上官方文档的解释

MapReduce - 用户界面

本节提供了MapReduce框架的每个面向用户方面的合理数量的详细信息。这应该有助于用户以细粒度的方式实现,配置和调整他们的工作。但请注意,每个类/接口的javadoc仍然是最全面的文档; 这只是一个教程。

我们先来看看MapperReducer接口。应用程序通常会实现它们以提供mapreduce方法。

然后我们将讨论其他核心接口,包括JobPartitionerInputFormatOutputFormat等。

最后,我们将讨论框架的一些有用功能,如DistributedCacheIsolationRunner等。

Mapper

Mapper将key/value对映射到一组中间key/value对。

Maps是将输入记录转换为中间记录的各个任务。转换后的中间记录不需要与输入记录的类型相同。给定的输入对可以映射到零个或多个输出对。

Hadoop MapReduce框架为作业的InputFormat生成的每个InputSplit生成一个map任务。``

总的来说,Mapper实现通过Job.setMapperClass(Class)方法传递给作业。然后,框架为该任务的InputSplit中的每个键/值对调用map(WritableComparable,Writable,Context)。然后,应用程序可以覆盖清理(Context)方法以执行任何所需的清理。````

输出对不需要与输入对具有相同的类型。给定的输入对可以映射到零个或多个输出对。通过调用context.write(WritableComparable,Writable)来收集输出对。

应用程序可以使用Counter报告其统计信息。

随后将与给定输出键关联的所有中间值按框架分组,并传递给Reducer以确定最终输出。用户可以通过Job.setGroupingComparatorClass(Class)指定Comparator来控制分组。

Mapper输出进行排序,然后根据Reducer进行分区。分区总数与作业的reduce任务数相同。用户可以通过实现自定义分区程序来控制哪些键(以及记录)转到哪个Reducer。``

用户可以选择通过Job.setCombinerClass(Class)指定组合器,以执行中间输出的本地聚合,这有助于减少从Mapper传输到Reducer的数据量。````

中间排序的输出始终以简单(key-len,key,value-len,value)格式存储。应用程序可以控制是否以及如何压缩中间输出,以及通过配置使用CompressionCodec。``

有多少Map?

Maps的数量通常由输入的总大小驱动,即输入文件的块总数。

Maps的正确并行度似乎是每个节点大约10-100个maps,尽管已经为非常cpu-light地图任务设置了300个maps。任务设置需要一段时间,因此最好是maps至少需要一分钟才能执行。

因此,如果您期望10TB的输入数据并且块大小为128MB,那么除非使用Configuration.set(MRJobConfig.NUM_MAPS,int)(仅提供框架提示)来设置82,000个映射,否则将使用它来设置它甚至更高。

Reducer

Reducer减少了一组中间值,这些中间值与一组较小的值共享一个键。

作业的减少次数由用户通过Job.setNumReduceTasks(int)设置

总的来说,Reducer实现通过Job.setReducerClass(Class)方法传递Job的作业,并且可以覆盖它以初始化它们自己。然后,框架为分组输入中的每个<key,(list of values)>对调用reduce(WritableComparable,Iterable ,Context)方法。然后,应用程序可以覆盖清理(Context)方法以执行任何所需的清理。````

Reducer有3个主要阶段:shuffle,sort和reduce。

为了更好的解释其作用,我还有以下的图片作为参考
图形化参考

​ 由于时间关系,在这里也不能大篇幅给你们讲解,希望在之后的文章中,以更好的形式(或者分析部分源码)让大家了解到Map-Reduce,大家也可以只知道他有助于用户以细粒度的方式实现、配置和调整他们的工作的作用就好了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容