大数据晋级之路:hadoop的搭建:第一天

Hadoop是什么,出现的原因,解决什么样的的问题:

 1. 降低成本

 2.框架,解决大数据的框架

 3.当数据量增加,业务时间增长

谷歌三大论文(hadoop时代的"三驾马车"):

       Google File System

       Google  Bigtable

       Google  MapReduce

个人觉得当做好奇点还是可以看一看的

四大数据来源:

     用户行为数据(推荐系统)

扫描二维码关注公众号,回复: 56598 查看本文章

                 ->搜索习惯

                 ->消费记录,支付宝,微信

   业务数据:

                ->公司内部产生的数据

   爬虫技术采集:

                ->python,java

   生产机器上的日志文件

               ->生产日志文件


hadoop三大发行版本:

       Apache  --apache顶级项目

      CDH      --cloudera

      HDP       --hortonworks

分布式:

分布存储,分布计算,最后将数据结果返回到一个或多个文件当中

hadoop生态圈: 

        最初:HDFS MR

       现在:  HDFS  hive  +storm  + spark

【hadoop三种运行模式】

Local(Standalone) Mode          本地模式    开发人员debug调试使用   local把文件存到本地的文件系统中

pseudo_Distributed Mode       伪分布式    开发人员debug调试使用   在本地搭建HDFS,伪分布式,完全分布

                                           1.公司把数据给你,你自己在自己的win上搭建hadoop,hive

                                           2.可能有测试集群,数据已经放好,CM(必备),通过登陆服务器运行,本地win提交

                                                        CM:Cloudera Manager(学习这个的时候记得内存需要很大哦)

Fully_Distrtbuted Mode         完全分布式(集群)         生产环境使用      如何搭建?!!!HA:高可用性,如:突然有个节点出问题,保证               集群还可用.在大部分大数据框架中都可以做HA

【hadoop环境部署——JDK部分】

1.修改权限:

       chown -R 用户名.用户名 /opt/

  公司中:CM文件的权限是root权限,用其他用户的原因:

       1.删错东西

        2.rm -rf /xx  公司里几乎不要用

              使用mv移动到tmp目录后,一周之后再考虑是否完全删除(有可能负法律责任):炉石传说宕机12个小时,就是因为删错了,          导  致最后都没有还原过来

2.解压JDK到指定目录下,建议不要装在某个用户主目录下: 

   tar -zxvf xxxx -C /opt/modules/

3.添加环境变量

   使用root修改/ect/profile文件,配置jdk环境变量

    #JAVA_HOME

    export JAVA_HOME=jdk目录

    export  PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

4.验证:java -version 

      jps可以查看java进程

     echo $JAVA_HOME

【hadoop伪分布式环境部署--hadoop部分】

1.解压hadoop到目录

    tar -zxvf xxx  -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安装路径

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.5.0/data/tmp</value>

</property>

6.注意:/tmp表示临时存储目录,系统每次重启会按照脚本预先设置好的删除里面的文件

          重新自定义系统生成的文件路径,/tmp会被清空,无法保证数据文件安全性

7.修改hadoop/etc/hadoop-site.xml文件

         指定HDFS文件安存储的副本个数,默认是3个,,这里是单台机器就设置为1,这个数字要小于datanode的节点数

    <property>
        <name>dfs.replication</name>

        <value>1</value>

    </property>

8.修改hadoop/etc/hadoop/slaves文件

   ->指定从节点的机器位置,添加hostname

9.格式化namenode

    bin/hdfs namenode -format

10.启动命令

    sbin/hadoop-daemon.sh start namenode

   sbin/hadoop-daemon.sh start   datanode

11.查看HDFS外部UI界面

     hostname或者IP地址,跟上50070端口号,外部通信http

      dfs.namenode.http-address 50070

12.测试HDFS环境

   创建文件夹,hdfs中有用户主目录的概念,和linux是一样的

     bin/hdfs dfs -mkdir -p  user/test/input

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  /tmp/get-site.xml


【HDFS的缺陷】

->hdfs存储的文件是不能够被修改的

->hdfs不支持多用户并发写入

->hdfs不适合存储大量小文件

【yarn的配置】

1.修改hadoop/etc/hadoop/mapre-site.xml文件

       指定mapreduce计算模型运行在yarn上

   <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>

</property>

2.修改hadoop/etc/hadoop/mapre-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页面

     hostname:8088

6.测试运行一个mapreduce,wordcount单词统计案例

    一个mapreduce可分为五个阶段

           inpu->map()->shuffle->reduce()->output

            步骤:将mapreduce运行在yarn上,需要打jar包

                                   新建一个数据文件,测试mapreduce

                                  将数据文件从本地上传到HDFS 

                                 bin/hdfs  dfs  -put /opt/love.txt    user/test/input

                                 使用官方的示例: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/test/input/love.txt   user/test/output

查看:bin/hdfs dfs -cat    user/test/output/part*

【HDFS架构】

     1.数据块block

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

    3.修改的话就要写到hdfs-site.xml中

128的文件块,namenode会为他创建一个元数据信息,这个信息也要占空间,存在namenode的内存中

secondarynamenode,HA

    <property>
     <name>dfs.blocksize</name>
    <value>134217728</value>
    <description>
    新文件的默认块大小(以字节为单位):
       可以使用以下后缀(不区分大小写):
       k(千),m(兆),g(千兆),t(泰拉),p(贝塔),e(埃萨)指定大小(如128k,512m,1g等)
       或者以字节为单位提供完整的大小(例如128 MB的134217728)。
     </description>

  </property>

4.500mb,默认大小:128MB   【128  128    128   128(12)】

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

6.  存储模式:

        hdfs默认会分块,大小可以设置的

                       有不用的方式设定:

                               1)通过hdfs的api的cteate方法,可以指定创建的文件块大小(任意)

                               2)hive中可以在hive-site.xml中设定,hive输出的块的大小(可以大于128)

                     eg:当我存储了一个129mb的文件是,存了几块?  :一共两块(128+1)?

计算数据 :

       hdfs上的文件进行mapred运算,默认情况下map当中会有128m(和块大小一样)的数据输入

                    所以这里就涉及到我的129m的文件会启动几个map来操作

                   答案:1个   因为mapred有这样的机制,最后一个文件如果小于128*1.1,那么只会启动一个map来执行job,避免浪费资源,当然这种情况只有最后一块出现

              eg:522m的文件,有几个map来处理呢?(4个)

              如果不懂的话自己想下咯

谨记:

    hdfs不适合存储太多的小文件 

                 可以考虑合并大文件.效果不明显

                  阿里开源了tfs淘宝文件系统,参考了hdfs

7.保证数据安全性机制

                  副本数

                   一份文件写成多分备份,写到不同机器节点上

                  文件切分成块之后,对于每个块备份

8.放置策略:

               第一个block块的副本,如果Client客户端在集群中的某台机器,那么第一个就放在这台

              如果Client不在集群上,就随即放置

             第二个block块的副本,会放置在和第一个不同的机架的node节点上,随机

              第三个block块的副本,会放置在和第二个相同机架的不同的node节点上,随机

              其他的随便  

               负载均衡,均匀分布

        机架感知的机制          

        数据块的扫描机制

       hdfs文件生成key,定期检查,生成key,如果块被损坏,当你执行操作的时候会报错

        块的修复(人工)    

         把这个块所在的机器节点停掉(磁盘可能损坏,或者爆满,也可能是进程原因)

         很多大数据框架是有balancer,负载均衡

猜你喜欢

转载自blog.csdn.net/weixin_40334693/article/details/80060043