Hadoop介绍
1 定义
Hadoop是一个由Apache基金会所开发的分布式系统基础架构
2 解决问题
海量数据的存储和海量数据的分析计算问题。
3 三大发行版本
Apache:最基础,对于入门学习最好
Cloudera:在大型互联网企业中用的较多
Hortonworks:文档较好
4 Hadoop的优势
- 高可靠性:Hadoop底层维护了多个副本(默认为3个),所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
- 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。(增加服务器时不用把系统停下来)
- 高效性:在MapReduce的思想下,Hadoop是并行工作的(多个服务器一起计算),以加快任务处理的速度。
- 高容错性:能够自动将失败的任务重新分配。
5 Hadoop的组成
Hadoop1.x和2.x的区别
| Hadoop1.x的组成 | Hadoop2.x的组成 | | -------------------------- | ------------------ | | Common(辅助工具) | Common(辅助工具) | | HDFS(数据存储) | HDFS(数据存储) | | MapReduce(计算+资源调度) | Yarn(资源调度) |
1.x中MapReduce需要同时负责计算和资源调度
2.x中Yarn负责资源调度,MapReduce负责计算
HDFS
- NameNode(nn): 存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode。
(相当于是目录) - DataNoade(dn):在本地文件系统存储块数据,以及块数据的校验和。具体的内容
- Secondary NameNode(2nn): 用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
(用来辅助NameNode工作)
YARN架构概述
Resource Manager相当于部门经理,负责整个部门的运行
NodeManager是单节点的负责对象。
App Mstr相当于项目经理,负责某个项目。负责在集群上某一个任务的协调
Container是YARN中的资源抽象,它封装了某个节点的多维度资源,如内存、CPU、磁盘、网络等(虚拟化技术)
![8bdb9f5971a85b0d301236c027d5f270.png](https://i-blog.csdnimg.cn/blog_migrate/504d9f7a40a5e00dac9af9d2dd2b2966.jpeg)
MapReduce架构概述
MapReduce将计算过程分为两个阶段:Map和Reduce (1) Map阶段并行处理输入数据 (2) Reduce阶段对Map结果进行汇总
Hadoop运行环境搭建
1 虚拟机环境准备
网络配置
第一步,更改网卡设置
![ff2e87c6f12238b86fbee1fbcd1f5be8.png](https://i-blog.csdnimg.cn/blog_migrate/3885f9bbd9d4f593329fcd93038b7483.jpeg)
同时记录下mac地址,为00:0c:29:d2:60:7a
第二步:更改网络设置
![9557edec08802300ab873b2c52e086a8.png](https://i-blog.csdnimg.cn/blog_migrate/f1706e8930c9256f592b611731ddf1d0.jpeg)
第三步:更改主机名
![438a14d9f0064fb564d01f048a106190.png](https://i-blog.csdnimg.cn/blog_migrate/b44262a73a9c5285c521ca8ab4f95465.png)
第四步:添加映射
![3825ba014b6f2e2b3edbd6e87bb24fbe.png](https://i-blog.csdnimg.cn/blog_migrate/ad6460656086d5ff5716848bd810d977.jpeg)
第五步:更改网络配置
![1fcbfb2e181040abbacfce167bc24464.png](https://i-blog.csdnimg.cn/blog_migrate/77e496e802160608c9aa136f46b34ea0.jpeg)
![9242849926c5102c73d1660067e5c943.png](https://i-blog.csdnimg.cn/blog_migrate/da0fefa26dee900987689fe5f062632d.jpeg)
(注意!!mac是.1不是.2)
总结
![2b667a654a263189217d6078a485c08e.png](https://i-blog.csdnimg.cn/blog_migrate/7ee12520e312a46c5f90e4a320f80627.png)
结果
![f1a0792fe1a155c9ac34ff6d0890055e.png](https://i-blog.csdnimg.cn/blog_migrate/8a2ac683088af9d194cf60addb1d0921.jpeg)
用户配置
修改配置文件/etc/sudoers
![a30aa0e76d65311068c3d572524a728c.png](https://i-blog.csdnimg.cn/blog_migrate/3824e6fa34085e3667f3845c43af9d37.png)
java和hadoop环境安装
- 在/opt目录下创建module、software文件夹
software用来存储所有程序的jar包(类似安装包)
module就是所有的jar包解压之后放置的地方(安装的地方)
- 将jdk包和hadoop包传到/opt/software中
- 将这两个包解压到/opt/module中
命令
tar -zxvf xxx -C /opt/module
![cb2b1adf921b44877f29f82a2fb41e4b.png](https://i-blog.csdnimg.cn/blog_migrate/72396ec51cf49e6668fd27141f9dfee5.png)
![7ac00543f076e007b9dfb31ba9335283.png](https://i-blog.csdnimg.cn/blog_migrate/debd73fa457995d1978b6d686c14697e.png)
注意
此时的文件是属于root的,需要将其改为自己的
在文件/etc/profile中添加JAVA_HOME和HADOOP_HOME
![eef4a50aade8f07cfacf35907ef7e00d.png](https://i-blog.csdnimg.cn/blog_migrate/3da145b4ffa06b846c827d5f88ca273f.jpeg)
source /etc/profile
就可以了
结果
![fe5079fe439cce01ed843f34cae8056e.png](https://i-blog.csdnimg.cn/blog_migrate/68ca1b96903ab2d669b686cfdf95b89e.jpeg)
2 官方案例
我自己在/home目录下建立了一个hadoop_learning文件夹,然后在里面的examples进行演示。
① grep案例
a. 首先将hadoop文件夹下的etc目录下的.xml文件复制到grep_input文件中:
cp /opt/module/hadoop-2.7.2/etc/hadoop/*.xml grep_input/
![9f7ed9bdea146759bc6fc7b87675980e.png](https://i-blog.csdnimg.cn/blog_migrate/e6ecebd15af5d97f49f963b758a3b57f.png)
b. 然后运行hadoop示例的example文件来执行grep
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep grep_input/ grep_output 'dfs[a-z.]+'
![c9f112efa33b792cd5fb504cd7ee1b05.png](https://i-blog.csdnimg.cn/blog_migrate/e87695bb02309ca6dff20106bb1ef23b.png)
c. 最后在grep_output里面看结果
![7ba42974a72b1c011271251d79357b92.png](https://i-blog.csdnimg.cn/blog_migrate/22b332862dccd51d128ce405d9187e27.png)
② WordCount案例
a. 首先自己创建一个wc_input文件,里面放入自己写的文件
![dac03ffd265e0da62a5ae73a09faf068.png](https://i-blog.csdnimg.cn/blog_migrate/d3f8e1ea44d8fa2b3eba864727832416.jpeg)
b. 运行hadoop示例的example文件来执行
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wc_input/ wc_output
![4dfbcba2eb0921db321123892faf33b7.png](https://i-blog.csdnimg.cn/blog_migrate/9f7f8815515ff2421f574cfe509a2618.png)
c. 就可以得到词频的统计结果
![879d4e3846f24f5b084ab25c6c4ad01b.png](https://i-blog.csdnimg.cn/blog_migrate/5f140d3c7466e3b865a1f3e4f834e55c.jpeg)
伪分布式模式
1 启动HDFS并运行MR文件
伪分布式模式介绍
按照分布式来进行配置,只是只有一台服务器而已。
伪分布式配置
在hadoop目录下的etc/hadoop里面是所有的配置文件
![e05f26f7cf4486f8d606ad63cd718b60.png](https://i-blog.csdnimg.cn/blog_migrate/f94a53aadc8a07823b697e2d121541d0.jpeg)
1. 修改env文件
只要看到env,就改JAVA_HOME
修改前:
![44b8f4278490fec5433dd634de33f3a4.png](https://i-blog.csdnimg.cn/blog_migrate/717d85af7a3482cac01f4a5fb49f44b5.jpeg)
修改后:
![6581eed95821bf9271f13ce052cf606b.png](https://i-blog.csdnimg.cn/blog_migrate/bf226632943a142bab62338c280138d4.png)
2. 修改core-site.xml
修改前
![a707781f6ed19a0b86acbfca59589508.png](https://i-blog.csdnimg.cn/blog_migrate/c1bca9346e9f0f4598badf751b8acf23.jpeg)
修改后
![4d7593ea4a5f182ae3fdaf87efc2e136.png](https://i-blog.csdnimg.cn/blog_migrate/425a8ad131cd41b4436e1683618b9b5e.jpeg)
3. 修改hdfs-site.xml
指定HDFS副本的数量
修改前
![cd4adafeff671df02297825e37f45505.png](https://i-blog.csdnimg.cn/blog_migrate/5c878affd4243e012751d8696280bd08.jpeg)
修改后
![505fd6613d9a30a1f39c3a0ba9136c86.png](https://i-blog.csdnimg.cn/blog_migrate/d3e97f1860684797c343f256df0a8025.png)
启动集群
1. 格式化NameNode
第一次启动时格式化即可,以后就不要总格式化了。
bin目录下的hdfs可以做到
![0f4593a286dd7d03c28e540aa24bf736.png](https://i-blog.csdnimg.cn/blog_migrate/b5e0f70f7c76e845605c14cbb1ca80cf.jpeg)
bin/hdfs namenode -format
![a546f315c7cce65a77175d068b3ea150.png](https://i-blog.csdnimg.cn/blog_migrate/bfae9493755a03e024bf8dca7367fc01.jpeg)
2. 启动NameNode
所有的启动命令都在sbin目录下面
![d11fc012bfc9309d797bf55b4e87f5ce.png](https://i-blog.csdnimg.cn/blog_migrate/aef428a4e0468dc63fd7890782eb0715.jpeg)
输入
hadoop-daemon.sh start namenode
![0fdd2f4d0bd8fafe80e26a179eecaaff.png](https://i-blog.csdnimg.cn/blog_migrate/e7239389ffe14f83278e7e8dfe278934.png)
3. 检查是否启动成功
用jps检查
jps:java的ps进程
![517d1ae6ab88ec8752e1f58f07dc4071.png](https://i-blog.csdnimg.cn/blog_migrate/a7ea711603ba658dab183630899904c7.png)
4. 启动DataNode
还是用hadoop-daemon.sh来启动
![f8cd8134975c96233a244f5ddda5104f.png](https://i-blog.csdnimg.cn/blog_migrate/5bf4855c2b7b06ccc4f699689c1e2ac2.png)
5. 检查datanode是否启动成功
还是jps
![b7200ccf8a07e8ce12a749fb3843acf6.png](https://i-blog.csdnimg.cn/blog_migrate/78fde6f8503779088d20d994df28ff2b.png)
6. 检查集群是否启动
去window主机的谷歌浏览器上输入ip地址:50070查看是否能正常进入
![7bde4c486ca70b9924884170b7f566f8.png](https://i-blog.csdnimg.cn/blog_migrate/42690d8f8cd3c82145d5aa6f394bd720.jpeg)
注意!!!
必须关闭防火墙!否则不能正常进入
添加目录和文件
最开始的时候只有根目录
![456b6d3ff1cc3ad97b858518baf2f3f4.png](https://i-blog.csdnimg.cn/blog_migrate/bc4a4df9479895dd7252bfbaacd87415.png)
若要添加目录,则需要用hadoop的指令
bin/hdfs dfs -mkdir -p /home/hadoop_learning/coachhe
![f15ad02e7587c0a91e1178cd3bb672e1.png](https://i-blog.csdnimg.cn/blog_migrate/1f288f36d58fb34c594483c59e02eb9f.png)
ls用法
bin/hdfs dfs -ls /home/hadoop_learning/
![3268890b162709d7094aae8628491546.png](https://i-blog.csdnimg.cn/blog_migrate/418b1963d1bf9d96e1581ab04e006407.jpeg)
上传文件
hdfs dfs -put /home/hadoop_learning/examples/wc_input/wc.input /home/hadoop_learning/examples/wc_input/
![0b7a938d519579566c130b9f9e1e57f6.png](https://i-blog.csdnimg.cn/blog_migrate/65a77427bea52a57841b7a4d40120667.png)
重新格式化NameNode
首先
关闭jps查询得到的NameNode和DataNode进程
然后
删除$HADOOP_HOME目录下面的data和logs文件。
注意
一定要先退出进程再删除文件
思考:为么不能一直格式化NameNode?
因为DataNode和NameNode共享同一个集群 ID,两者之间需要相互通信,因此如果格式化之后NameNode会变化集群ID,导致两者不能通信。
具体分析
![44162b4f23419b00d0ad9dcd46d7b307.png](https://i-blog.csdnimg.cn/blog_migrate/2362605ae219d4690df2ae14e7f798d2.jpeg)
2 启动YARN并运行MR文件
分析
- 配置集群在YARN上运行MR
- 启动、测试集群增、删、查
- 在YARN上执行WordCount案例。
配置
1. 修改yarn-env.sh(同样也在etc/hadoop目录下)
![0006529c540d670e902b3acf83fd50f2.png](https://i-blog.csdnimg.cn/blog_migrate/cee4b58f801387e79d8d209f1e8aebc8.jpeg)
2. 配置yarn-site.xml
![596157a7e57f99862ef4714461e909f6.png](https://i-blog.csdnimg.cn/blog_migrate/18d627f8d44dbf3a621d37914076fac8.png)
修改后格式如下
![85dd6ae7a6424a14b5148c05974a73f9.png](https://i-blog.csdnimg.cn/blog_migrate/dd157a172d94d7cd8ac204b8c7f94dd2.png)
3. 配置mapred-env.sh
![d280f03df403b3b1e59a26234f73e7e7.png](https://i-blog.csdnimg.cn/blog_migrate/40921781a8f8ac9c945b8ac384d0051c.png)
4. 配置mapreds-site.xml.template,重新命名为mapred-site.xml
![076007ea35cbc9d40dbba47cba1a1f4a.png](https://i-blog.csdnimg.cn/blog_migrate/cdbcce77fa517c8da7679eb5dcee7adb.png)
5. 修改mapred-site.xml
![343df2a060fb13420ce08145f1d6eba2.png](https://i-blog.csdnimg.cn/blog_migrate/511d44ce96291de4ed3b07445df59648.png)
修改后如下
![fa74c963e388bd7a6614dec37c62fbb3.png](https://i-blog.csdnimg.cn/blog_migrate/309a94cb9c07bd689ffa8332eceab69c.png)
总结
![71fe3635c670f6bf02f7afb03683a0e7.png](https://i-blog.csdnimg.cn/blog_migrate/b715a4287c5aa582fc86ef2bd8ca58c0.jpeg)
![da497a5bf3d4daea996336d9e8c2c8e2.png](https://i-blog.csdnimg.cn/blog_migrate/e06e59c2bb998f5b4f45b6273f3ec800.jpeg)
![5d3dd0591b5b206b148a179c521dd9f3.png](https://i-blog.csdnimg.cn/blog_migrate/177669046f31d524fa4eea8395eea873.png)
启动集群
1. 保证NameNode和DataNode已经启动
![19b7342340480f5e30e8e0e60800b324.png](https://i-blog.csdnimg.cn/blog_migrate/2c581afaf37eea758bb61607c6be1c4f.png)
2. 启动resourcemanager和nodemanager
使用sbin目录下的yarn-daemon.sh脚本,启动方法和hadoop-daemon.sh一样
![ab0be88d70c7007357b05ad91232428b.png](https://i-blog.csdnimg.cn/blog_migrate/aff45a588b498bfa5e728e6f663aa701.jpeg)
标志
![63ee595b81687fac26dd62a59384682c.png](https://i-blog.csdnimg.cn/blog_migrate/ff4fef595f56e0389a57fe2d04f61340.jpeg)
运行MR程序
运行方式和没有YARN完全相同
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /home/hadoop_learning/examples/wc_input/wc.input /home/hadoop_learning/examples/wc_output_yarn
![e2e76db5ba289b0ebf67087eefd7fddd.png](https://i-blog.csdnimg.cn/blog_migrate/9ed83fe59aaf30bb8b13afdc23b5177f.jpeg)
注意
运行得到的输出(wc_output_yarn)不能直接在服务器上看见,需要用hdfs指令才能看到
![b8aa59d34fc41d2dc91b37376f11f4aa.png](https://i-blog.csdnimg.cn/blog_migrate/60b2e91f6a4e109eb4dffd6e07b65f94.png)
配置文件总结
![fabb27f74dfbd280a68cad5cd06666bb.png](https://i-blog.csdnimg.cn/blog_migrate/006b20505403fb6f8a35790e165418d6.jpeg)
自定义配置文件
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。