主要分为三个步骤:1、安装vmware虚拟机运行软件  2、在vmware虚拟机中安装linux操作系统   3、配置hadoop伪分布式环境

Hadoop环境部署-JDK部分
-------------------------------------------------------------------------------------------------------------
1. 先修改权限
chown -R beifeng:beifeng /opt/
2. 解压JDK到指定的目录下,目录任意,建议不要装在某个用户主目录下
tar -zxvf jdk-7u67-linux-x64.tar.gz -C /opt/modules/
3. 添加环境变量
修改vi /etc/profile文件,配置jdk环境变量
#JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile生效文件
4. 验证是否配置成功:java -version
jps命令可以查看java 进程
echo $JAVA_HOME

Hadoop伪分布式环境部署-Hadoop部分
-------------------------------------------------------------------------------------------------------------
1. 解压Hadoop到指定目录下
tar -zxvf hadoop-2.5.0.tar.gz -C /opt/modules/

2. 清理Hadoop的目录,将hadoop/share/doc目录删除,节省磁盘空间,通过这个命令查看df -h

3. 修改hadoop/etc/hadoop/hadoop-env.sh文件
修改hadoop/etc/hadoop/mapred-env.sh文件
修改hadoop/etc/hadoop/yarn-env.sh文件
指定Java安装路径
export JAVA_HOME=/opt/modules/jdk1.7.0_67

4. 注意:hadoop中的四个核心模块对应四个默认配置文件
指定默认的文件系统为HDFS,文件系统的访问入口,namenode所在的机器
9000端口是早期Hadoop 1.x使用的,现在Hadoop 2.x使用的是8020
端口号用于节点直接内部通信,使用RPC通信机制

5. 修改hadoop/etc/hadoop/core-site.xml文件
<property>
<name>fs.defaultFS</name>
<value>hdfs://hostname:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.7.3/data/tmp</value>
</property>

6. 注意:/tmp表示临时存储目录,系统每次重启会按照脚本预先设置好的删除里面的文件
重新自定义系统生成的文件路径,/tmp会被清空,无法保证数据文件安全性

7. 修改hadoop/etc/hadoop/hdfs-site.xml文件
指定HDFS文件存储的副本数个数,默认是3个,这里是单台机器就设置为1,这个数字要小于datanode的节点数
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

8. 修改hadoop/etc/hadoop/slaves文件
指定从节点的机器位置,添加主机名即可
hostname 比如:bd1.ibeifeng.com

9. 格式化namenode
bin/hdfs namenode -format

10. 启动命令
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode

11. 查看HDFS外部UI界面
bigdata-04或者IP地址 跟上50070端口号,外部通信http
dfs.namenode.http-address 50070

12. 测试HDFS环境
创建文件夹,HDFS中有用户主目录的概念,和Linux一样
bin/hdfs dfs -mkdir -p ibf_test/iuput

13. 上传文件到HDFS
bin/hdfs dfs -put etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml /

14. 读取HDFS的文件
bin/hdfs dfs -text /core-site.xml

15. 下载文件到本地(指定下载到哪里,同时可以重命名成get-site.xml)
bin/hdfs dfs -get /core-site.xml /home/beifeng/get-site.xml

HDFS的缺陷
-------------------------------------------------------------------------------------------------------------
1. HDFS存储的文件是不能够被修改的
2. HDFS不支持多用户并发写入
3. HDFS不适合存储大量小文件

yarn的配置
-------------------------------------------------------------------------------------------------------------
1. 首先找到hadoop/etc/hadoop/mapred-site.xml.template文件,重名为mapred-site.xml
修改hadoop/etc/hadoop/mapred-site.xml文件

<!--指定mapreduce程序运行在yarn平台上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

2. 修改hadoop/etc/hadoop/yarn-site.xml文件

<!--指定启动运行mapreduce上的nodemanager的运行服务-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

3. <!--指定resourcemanager主节点机器,可选项,不一定要配置,默认是本机,但是指定了之后在其他-->机器上启动,就会报错
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hostname</value>
</property>

4. 启动yarn
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager

5. 查看yarn外部web界面
bigdata-04或者IP地址 跟上8088端口号,外部通信http

6. 测试环境,运行一个mapreduce,wordcount单词统计案例
一个mapreduce分为五个阶段
input -> map() -> shuffle -> reduce() -> output
步骤:将mapreduce运行在yarn上,需要打jar包
新建一个数据文件,用于测试mapreduce
将数据文件从本地上传到HDFS
bin/hdfs dfs -put /opt/datas/1.txt /user/beifeng/iuput/
使用官方提供的示例jar包:share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar
7. 运行
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /user/beifeng/1.txt /user/beifeng/output
application_1500824570525_0001
0001表示第一个job
1500824570525表示Unixtime(格林威治时间)

HDFS架构
-------------------------------------------------------------------------------------------------------------
1. 数据块block

2. 每个块默认大小:128MB,大小可以用户自定义修改

3. 如果要修改就写到hdfs-site.xml中
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
<description>
The default block size for new files, in bytes.
You can use the following suffix (case insensitive):
k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa) to specify the size (such as 128k, 512m, 1g, etc.),
Or provide complete size in bytes (such as 134217728 for 128 MB).
</description>
</property>

4. 500MB,默认大小:128MB
- 128MB
- 128MB
— 128MB
- 128MB(12MB)

5. 如果一个文件的大小小于块的大小,是不会占据整个块的空间的

6. 存储模式:
首先,HDFS默认会分块,大小是128M(这个值是可以设置的)
那么HDFS上面的块的大小可以大于128吗,答案是肯定的。
有不同的方式去设定
1)通过HDFS的API的create方法,可以指定创建的文件块的大小(可以任意大小)
2)hive当中也可以在hive-site当中设定,hive输出的块的大小(可以大于128M)
3)也会有其他的方法,这里就不一一列举
但是,当我储存一个129MB的文件的时候,存了几块!?
存储了2块!
第一块128M,第二块1M
计算数据:
HDFS上的文件进行mapreduce计算,默认情况下一个map当中会有128M(和块大小一样)的数据输入
所以这里就涉及到我的一个129M的文件会启动几个Map任务来操作
答案是:1个
mapreduce有这样的机制,最后一个文件的输入如果小于128*1.1(其实就是可以多10%)
那么只会启动一个Map来执行这个job,避免了第一个Map跑了128M的数据,第二个Map只跑了1M的数据的尴尬
这种情况只会在最后一块出现
再举个例子,比如522M的文件,分成几个Map来处理呢?
第一个map-》128M
第二个map-》128M
第三个map-》128M
第四个map-》138M ——》138小于128*1.1,所以这里就不会再开启一个map来处理最后剩余的那10M的数据
直接在最后一个map当中把所有138M的数据输入!!谨记
HDFS不适合存储大量的小文件
可以考虑合并大文件,效果不明显
阿里巴巴开源了TFS淘宝文件系统,参考了HDFS

7. 保证数据安全性机制
副本数
一份文件写多份备份,写到不同机器节点上
文件切分成块之后,对于每个块的备份

8. 放置策略
第一个block块的副本,如果client客户端在集群中的某台机器,那么第一个就放在这台
如果client不在集群中,那么第一个块就随机放置
第二个block块的副本,会放置在和第一个不同的机架的node节点上,随机的
第三个block块的副本,会放置在和第二个相同机架的不同的node节点上,随机的
其他的随便放
负载均衡,均匀分布
数据块的扫描机制
HDFS文件生成key,定期检查,生成KEY,如果块被损坏,当你执行操作的时候就会报错
块的修复(需要人工参与)
把这个块所在的机器节点停掉(有可能是磁盘坏了,或者磁盘满了,也有可能是进程原因)

HDFS上的节点
-------------------------------------------------------------------------------------------------------------
主节点:namenode
管理元数据
文件属性
名称
位置
权限
数据块
....
元数据是存储在namenode内存中
元数据在本地也有备份,fsimage镜像文件
namenode在启动的时候会去读取加载fsimage镜像文件
edits称作编辑日志文件,用于记录用户对于HDFS所有的行为操作
namenode在启动的时候还会去读取加载edits编辑日志文件
edits越来越大,考虑将fsimage和edits合并

secondarynamenode进行合并,功能
合并文件
减少下一次namenode启动时间

namenode在重新启动之后会读取新的合并的文件
生成新的fsimage镜像文件和edits编辑日志文件
原来的初始化的两个文件就没有用了
配置
修改hdfs-site.xml,指定机器以及外部交互端口号
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>class-bigdata01.ibeifeng.com:50090</value>
</property>
-》启动
sbin/hadoop-daemon.sh start secondarynamenode

从节点:datanode
物理磁盘存储数据的
会和nodemanager部署在一起,通过slaves配置文件来指定
注意:HDFS数据块,存储在linux的/opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-275988769-192.168.163.104-1504420277120/current/finalized/路径下

优化配置(在hdfs-site中)
-------------------------------------------------------------------------------------------------------------
1. 单独指定fsimage文件存放的路径
注意:你可以自己选择路径,也可以不修改使用默认的
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
<description>Determines where on the local filesystem the DFS name node
should store the name table(fsimage). If this is a comma-delimited list
of directories then the name table is replicated in all of the
directories, for redundancy. </description>
</property>

2. 单独指定edits文件的路径
<property>
<name>dfs.namenode.edits.dir</name>
<value>${dfs.namenode.name.dir}</value>
<description>Determines where on the local filesystem the DFS name node
should store the transaction (edits) file. If this is a comma-delimited list
of directories then the transaction file is replicated in all of the
directories, for redundancy. Default value is same as dfs.namenode.name.dir
</description>
</property>

3. 指定datanode数据本地路径
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
<description>Determines where on the local filesystem an DFS data node
should store its blocks. If this is a comma-delimited
list of directories, then data will be stored in all named
directories, typically on different devices.
Directories that do not exist are ignored.
</description>
</property>

MapReduce historyserver
-------------------------------------------------------------------------------------------------------------
1. 历史服务器:查看已经运行完成的应用记录
修改mapred-site.xml
指定historyserver的地址,内部和外部通信端口号,如果不指定默认是本机
historyserver是一个轻量级的服务,可以部署在任意一台节点上
2. 配置(在mapred-site.xml中):
注意:这里的端口号不能随便修改
<property>
<name>mapreduce.jobhistory.address</name>
<value>bd24-server1.ibeifeng.com:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bd24-server1.ibeifeng.com:19888</value>
</property>

日志聚合功能
-------------------------------------------------------------------------------------------------------------
1. 修改yarn-site.xml
指定开启聚合功能
指定日志存放在HDFS上的时间期限,一般建议3-7天左右,存放在HDFS的/tmp/用户之下
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
2. 重启yarn进程
3. 启动历史日志服务 sbin/mr-jobhistory-daemon.sh start historyserver
4. 指定存放已经完成的Hadoop的作业记录
(接下来的4、5、6的操作可以使用默认的值,不用修改,只是让大家看下,是可以修改的)
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
</property>
5. 指定存放的正在运行的Hadoop作业记录
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
<description></description>
</property>
6. 提交job作业记录的目录位置
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/tmp/hadoop-yarn/staging</value>
<description>The staging dir used while submitting jobs.</description>
</property>

HDFS权限检测
-------------------------------------------------------------------------------------------------------------
1. 取消HDFS权限检测功能
2. 修改hdfs-site.xml
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>

常见问题
-------------------------------------------------------------------------------------------------------------
1. 格式化问题
一般情况格式化一次即可
bin/hdfs namenode -format
生成fsimage
操作HDFS之后生成edits
多次格式化之前,需要清空hadoop.tmp.dir参数下设置的路径下的所有文件和目录

2. 出现错误
一定要学会查看日志文件,查看logs/下的对应进程的.log后缀的文件
【框架名】【用户名】【进程名】【主机名】【文件后缀】
hadoop-beifeng-datanode-bigdata-04.log
查看最新的日志记录,最新时间

3. clusterID
[dfs/name/current]:namenode
clusterID=CID-6172ab83-9c0a-4da0-8d14-d5e14a2c57cd

[dfs/data/current]:datanode
clusterID=CID-6172ab83-9c0a-4da0-8d14-d5e14a2c57cd
集群ID不一致
第一种解决方法:修改VERSION文件,以namenode的ID为准,改为一致即可
第二种解决方法:重新格式化生成

4. pid进程号(注意权限问题)
系统进程每次启动之后会有一个pid编号,每次启动会随机生成
多个用户启动进程,会记录不同用户的pid进程编号
建议不要多个用户混用
如果出现pid进程编号多个的话,直接删除rm /tmp/*.pid
再用同一个用户去启动

5. host主机名与IP不一致
检查core-site
检查/etc/hosts
检查ip

6. 细节问题,能复制的尽量复制,不要手打,容易出错

权限错乱问题解决思路
------------------------------------------------------------------------------------------------------
1. cd /tmp hadoop-root-namenode.pid hadoop-root-datanode.pid 带root的全部删掉
2. 用root身份chown ibeifeng:ibeifeng -R hadoop-2.7.3
3. cd /opt/modules/hadoop-2.7.3
rm -rf logs/
4. cd /opt/modules/hadoop-2.7.3/data(如果前三步操作完,可以成功启动,那就不需要后续步骤)
rm -rf dfs/
5. bin/hdfs namenode -format

打不开web界面(HDFS,YARN)解决办法
--------------------------------------------------------------------------------------------
1.在虚拟机里执行jps,检查namenode,datanode,resourcemanager,nodemanager这些进程服务
是否启动
2.检查windows下的hosts文件,是否有配置网络映射
-》例子:192.168.109.31 bd24-server1.ibeifeng.com
-》hosts文件位置:C:\Windows\System32\drivers\etc\hosts
3.检查虚拟机防火墙是否关闭 sudo service iptables status

Hadoop伪分布式的搭建的更多相关文章

  1. Hadoop伪分布式模式搭建

    title: Hadoop伪分布式模式搭建 Quitters never win and winners never quit. 运行环境: Ubuntu18.10-server版镜像:ubuntu- ...

  2. 【Hadoop离线基础总结】CDH版本Hadoop 伪分布式环境搭建

    CDH版本Hadoop 伪分布式环境搭建 服务规划 步骤 第一步:上传压缩包并解压 cd /export/softwares/ tar -zxvf hadoop-2.6.0-cdh5.14.0.tar ...

  3. CentOS7下Hadoop伪分布式环境搭建

    CentOS7下Hadoop伪分布式环境搭建 前期准备 1.配置hostname(可选,了解) 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(p ...

  4. hadoop伪分布式平台搭建(centos 6.3)

    最近要写一个数据量较大的程序,所以想搭建一个hbase平台试试.搭建hbase伪分布式平台,需要先搭建hadoop平台.本文主要介绍伪分布式平台搭建过程. 目录: 一.前言 二.环境搭建 三.命令测试 ...

  5. Hadoop伪分布式环境搭建+Ubuntu:16.04+hadoop-2.6.0

    Hello,大家好 !下面就让我带大家一起来搭建hadoop伪分布式的环境吧!不足的地方请大家多交流.谢谢大家的支持 准备环境: 1, ubuntu系统,(我在16.04测试通过.其他版本请自行测试, ...

  6. 《OD大数据实战》Hadoop伪分布式环境搭建

    一.安装并配置Linux 8. 使用当前root用户创建文件夹,并给/opt/下的所有文件夹及文件赋予775权限,修改用户组为当前用户 mkdir -p /opt/modules mkdir -p / ...

  7. hadoop伪分布式环境搭建

    环境:Centos6.9+jdk+hadoop1.下载hadoop的tar包,这里以hadoop2.6.5版本为例,下载地址https://archive.apache.org/dist/hadoop ...

  8. hadoop伪分布式环境搭建之linux系统安装教程

    本篇文章是接上一篇<超详细hadoop虚拟机安装教程(附图文步骤)>,上一篇有人问怎么没写hadoop安装.在文章开头就已经说明了,hadoop安装会在后面写到,因为整个系列的文章涉及到每 ...

  9. hadoop伪分布式平台搭建

    1. 安装jdk1.7 JAVA_HOME=/home/hadoop/app/jdk1.7.0 vi /etc/profile.d CLASSPATH=.:$JAVA_HOME/lib/dt.jar: ...

随机推荐

  1. centos安装node环境

    一.安装wget yum install -y wget 二.下载node最新的安装包 wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linu ...

  2. 如何确定Kafka的分区数、key和consumer线程数

    [原创]如何确定Kafka的分区数.key和consumer线程数   在Kafak中国社区的qq群中,这个问题被提及的比例是相当高的,这也是Kafka用户最常碰到的问题之一.本文结合Kafka源码试 ...

  3. [BJOI2019] 光线

    看起来很麻烦,做起来并不难的题 以下设:$a_i=\frac{a_i}{100},b_i=\frac{b_i}{100}$ 显然,如果$b_i=0$的话,直接求$\Pi a_i$就是答案. 解决反射问 ...

  4. <二>ELK-6.5.3学习笔记–使用rsyslog传输管理nginx日志

    http://www.eryajf.net/2362.html 转载于 本文预计阅读时间 28 分钟 文章目录[隐藏] 1,nginx日志json化. 2,发送端配置. 3,接收端配置. 4,配置lo ...

  5. hive笔记

    cast cast(number as string),  可以将整数转成字符串 lpad  rpad lpad(target, 10, '0')   表示在target字符串前面补0,构成一个长度为 ...

  6. 深入剖析Kubernetes学习笔记:预习篇(01-04)

    01 初出茅庐 1.PaaS 项目被大家接纳的一个主要原因? 就是它提供了一种名叫"应用托管". 2.像 Cloud Foundry 这样的 PaaS 项目,最核心的组件是? 一套 ...

  7. VS2012/2013/2015/Visual Studio 2017 关闭单击文件进行预览的功能

    Visual Studio在2010版本后推出了点击项目管理器预览文件的功能,但是对于配置不咋地的旧电脑总是觉得有点卡,下面是解决方案. 英文版方法:Tools->Options->Env ...

  8. [物理学与PDEs]第5章习题10 多凸函数一个例子

    证明函数 $$\bex \hat W({\bf F})=\sedd{\ba{ll} \cfrac{1}{\det{\bf F}},&if\ \det{\bf F}>0,\\ +\inft ...

  9. 《尚学堂_史上最易懂的设计模式视频》--章节5 动态代理-JDK6自带的编译器

    所有的设计模式中最难的一个 ==组合和聚合是有很大区别的 组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上: 比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象 ...

  10. find xargs 简单组合使用

    简单总结下,留作自己以后拾遗...... 一.find xargs 简单组合 ## mv 小结find ./ -type f -name "*.sh"|xargs mv -t /o ...