hadoop伪分布式集群搭建及配置记录

如果已经走到了需要搭建hadoop伪分布式的环境了,那说明你至少做好了以下三点

  1. 创建好了自己的虚拟机,ip、本机名映射、防火墙、安全子系统都已经配置好了
  2. 下载jdk1.7及以上版本,并配置好了java环境
  3. 下载hadoop2.7.0及以上版本,并解压到、opt/modules(自己存放hadoop的目录)目录下

在配置之前,我们应该先了解hadoop的三个模块及其理念


1、 HDFS模块

HDFS负责大数据的存储,通过将大文件分块后进行分布式存储方式,突破了服务器硬盘大小的限制,解决了单台机器无法存储大文件的问题,HDFS是个相对独立的模块,可以为YARN提供服务,也可以为HBase等其他模块提供服务。

存储模式:
首先,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

2、 YARN模块

YARN是一个通用的资源协同和任务调度框架,是为了解决Hadoop1.x中MapReduce里NameNode负载太大和其他问题而创建的一个框架。

YARN是个通用框架,不止可以运行MapReduce,还可以运行Spark、Storm等其他计算框架。

3、 MapReduce模块

MapReduce是一个计算框架,它给出了一种数据处理的方式,即通过Map阶段、Reduce阶段来分布式地流式处理数据。它只适用于大数据的离线处理,对实时性要求很高的应用不适用。


接下来我们就开始配置伪分布式模式

一、用户及其权限配置

1、创建一个管理hadoop的用户 hadoop

[root@maketubu ~]# useradd hadoop
[root@maketubu ~]# passwd hadoop

2、给hadoop用户sudo权限 vi /etc/sudoers   增加  hadoop   ALL=(root)  NOPASSWD:ALL

    如果这里sudoers为只读模式,则用root给其一个权限   chmod  755 /etc/sudoers使其可更改

3、切换到hadoop用户   

[root@maketubu ~]# su - hadoop
[hadoop@maketubu ~]$

4、更改存放hadoop的目录  opt/modules的所有者为hadoop,这是为了后面的hdfs的操作,如果这里不修改,后面可能会出现权限上的问题

[hadoop@maketubu ~]$ sudo chown -R hadoop:hadoop  /opt/modules

二、配置hadoop

具体下面每个文件需要的配置信息都可在Apache的官方网站上查到:hadoop.apache.org

1、配置HADOOP环境变量  vi /etc/profile  追加配置HADOOP_HOME

export HADOOP_HOME=/opt/modules/hadoop-2.7.3

export PATH=$PATH:$HADOOP_HOME/bin:$PATH:$HADOOP_HOME/sbin

修改后对 etc/profile  source一下   source 、etc/profile

测试环境是否配置成功   echo $HADOOP_HOME

2、通过notepad++的NTTftp对hadoop各个文件进行参数配置,如何用natepad++连接linux请参考:notepad++连接

有的新版本好像不支持nttftp插件,可以下载这个版本:链接: https://pan.baidu.com/s/1eQzYKUxOmI05ijv0vctkQA 密码: 6gkm


3、配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME参数

先找到自己的JAVA_HOME路径,   echo $JAVA_HOME

除了hadoop-env.sh,其他两个的JAVA_HOME都被注释掉了,去掉注释进行修改

修改JAVA_HOME参数为:
export JAVA_HOME="/opt/modules/jdk1.7.0_67"

4、配置core-site.xml

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://maketubu.com:8020</value>
</property>

上面fs.defaultFS为参数配置的是HDFS的地址。


<property>
	  <name>hadoop.tmp.dir</name>
	  <value>/opt/modules/hadoop-2.7.3/data/tmp</value>
</property>
hadoop.tmp.dir配置的是Hadoop临时目录,比如HDFS的NameNode数据默认都存放这个目录下,查看*-default.xml等默认配置文件,就可以看到很多依赖${hadoop.tmp.dir}的配置。

默认的hadoop.tmp.dir/tmp/hadoop-${user.name},此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。


5、配置hdfs-site.xml

<property>
       <name>dfs.replication</name>
       <value>1</value>
</property>
dfs.replication配置的是HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以这里设置为1。默认为3


保证数据安全性机制(副本策略)
副本数
一份文件写多份备份,写到不同机器节点上
文件切分成块之后,对于每个块的备份
放置策略
第一个block块的副本,如果client客户端在集群中的某台机器,那么第一个就放在这台
如果client不在集群中,那么第一个块就随机放置
第二个block块的副本,会放置在和第一个不同的机架的node节点上,随机的
第三个block块的副本,会放置在和第二个相同机架的不同的node节点上,随机的
其他的随便放

负载均衡,均匀分布

6、格式化HDFS

[hadoop@maketubu ~]$ hdfs namenode -format

格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中。

格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/data目录)指定的目录下是否有了dfs目录,如果有,说明格式化成功。

注意:

  1. 格式化时,这里注意hadoop.tmp.dir目录的权限问题,应该hadoop普通用户有读写权限才行,可以将/opt/data的所有者改为hadoop。 
    [hadoop@maketubu hadoop-2.7.3]$ sudo chown -R hadoop:hadoop /opt/modules/hadoop-2.7.3/data/tmp

  2. 查看NameNode格式化后的目录。

   [hadoop@bigdata-senior01 ~]$ ll /opt/modules/hadoop-2.7.3/data/tmp/dfs/name/current
  • 1
  • 1

enter image description here

fsimage是NameNode元数据在内存满了后,持久化保存到的文件。

fsimage*.md5 是校验文件,用于校验fsimage的完整性。

seen_txid 是hadoop的版本

vession文件里保存:

  • namespaceID:NameNode的唯一ID。

  • clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。

7、启动

可以再sbin目录下写一个启动脚本

/opt/module/hadoop-2.7.3/sbin/hadoop-daemon.sh start namenode
/opt/module/hadoop-2.7.3/sbin/hadoop-daemon.sh start datanode
/opt/module/hadoop-2.7.3/sbin/hadoop-daemon.sh start secondarynamenode
用jps测试,如果出现了就说明配置成功
[hadoop@bmaketubu hadoop-2.7.3]$ jps
3034 NameNode
3233 Jps
3193 SecondaryNameNode
3110 DataNode

至此,你的hdfs的配置已全部完成,可以尝试自己上传文件或者下载文件

8、操作

在hdfs上创建目录

[hadoop@maketubu hadoop-2.7.3]$ bin/hdfs dfs -mkdir /test

上传文件到测试目录

[hadoop@maketubu hadoop-2.7.3]$ bin/hdfs dfs -put /etc/hadoop/core-site.xml /test

下载文件到本地

[hadoop@maketubu hadoop-2.7.3]$ bin/hdfs dfs -get  /test/core-site.xml /get-site.xml

下载时可以对文件进行重命名   

对于后面的yarn、历史服务、日志聚合等配置,就写到另一篇学习记录里



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值