zoukankan      html  css  js  c++  java
  • 智传播客hadoop视频学习笔记(共2天)

    第一天:
    1、答疑解惑
    •  就业前景
    •  学习hadoop要有什么基础
    •  hadoop会像塞班一样,热一阵子吗
    •  hadoop学习起来容易还是困难
    •  课堂上的学习方法(所有实验必须按照要求做,重原理、重实践)
    •  通过本课程能学到什么

    2、 课程简介
    •  以真实的电信详单分析程序为主线,讲解Hadoop,Hbase,Hive在大数据处理的应用场景与过程
    •  通过此课程,你能
         •  掌握Hadoop基本知识,进行HadoopHDFS和MapReduce应用开发,搭建Hadoop集群
         •  掌握Hbase基本知识,搭建Hbase集群,Hbase的基本操作
         •  掌握数据仓库基本知识,用Hive建立数据仓库,并进行多维分析

    3、7天课程体系
    •  Day1  单间伪分布和分布式实验环境
    •  Day2  介绍HDFS体系结构及shell、java操作方式
    •  Day3  介绍MapReduce系统结构及各种算法(1)
    •  Day4  介绍MapReduce系统结构及各种算法(2)
    •  Day5  介绍Hadoop集群、ZooKeeper操作
    •  Day6  介绍HBase体系结构及基本操作
    •  Day7  介绍Hive、sqoop体系结构及基本操作和最后项目

    4、学习hadoop的就业前景


    5、第一天  课程安排
    •  Hadoop项目简介*
    •  搭建Hadoop的伪分布环境***
    •  使用Eclipse查看Hadoop源码*

    6、LOGO


    7、     Hadoop的生态图

    (3)File System:HDFS,相当于windows下的资源管理器,存储文件的管理系统(5)Engine+Logic:MapReduce,对来自于HDFS的数据进行计算。
    (1)浏览器
    (2)Nutch
    (6)Unstructured Data  :非结构化数据,Flume、Scribe,收集日志
    (7)Structured Data:结构化数据,RDBM,存储在表中的数据,hiho,Sqoop。
    (14)HBase:OLTP,在线处理应用,低延迟
    (11)Monitor/manage:监控管理器,Hue,Eclipse
    (8)High Level Interfaces:高级别接口,JAQL,数据流处理语言,Hive
    (12)Support:底层支持化工具
    (10)Workflow:工作流
    (13)More High Level Interfaces:更高级别接口,mahout,封装了的算法,amazon
    (4)作为终端的BI的东西

    8、Hadoop是什么?
         适合大数据的分布式存储与计算平台
         •  作者:Doug Cutting
         •  受Google三篇论文的启发

    9、版本
    •  Apache
         官方版本(1.1.2)
    •  Cloudera
         使用下载最多的版本,稳定,有商业支持,在Apache的基础上打上了一些patch。推荐使用。
    •  Yahoo
         Yahoo内部使用的版本,发布过两次,已有的版本都放到了Apache上,后续不在继续发布,而是集中在Apache的版本上。

    10、Hadoop核心项目
    •  HDFS:Hadoop Distributed File System  分布式文件系统
    •  MapReduce:并行计算框架

    11、HDFS的架构
    •  主从结构
         •  主节点,只有一个:namenode
         •  从节点,有很多个:datanode
    •  namenode负责:
         •  接收用户操作请求
         •  维护文件系统的目录结构
         •  管理文件与block之间关系,block与datanode之间关系
    •  datanode负责:
         •  存储文件
         •  文件被分成block存储在磁盘上
         •  为保证数据安全,文件会有多个副本

    12、MapReduce的架构
    •  主从结构
         •  主节点,只有一个:JobTracker
         •  从节点,有很多个:TaskTracker
    •  JobTracker负责:
         •  接收客户提交的计算任务
         •  把计算任务分给TaskTracker执行
         •  监控TaskTracker的执行情况
    •  TaskTracker负责:
         •  执行JobTracker分配的任务

    13、Hadoop的特点
    •  扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。
    •  成本低(Economical):可以通过普通机器组成的服务器群来分布以及处理数据。这些服务器群总计可达数千个节点。
    •  高效率(Efficient):通过分布数据,Hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
    •  可靠性(Reliable):hadoop能自动地维护数据的多份副本,并且在任务失败后能自动地重新部署(redeploy)计算任务。

    14、Hadoop集群的物理分布

    跨虚拟机通信:WebServe。

    15、单节点物理结构


    16、Hadoop部署方式
    •  本地模式
    •  伪分布模式
    •  集群模式

    17、安装前准备软件
    •  Vitual Vox
    •  rhel-server-6.3-i386-dvd.iso
    •  jdk-6上-linux-xxx.bin
    •  hadoop-1.1.2.tar.gz

    18、伪分布模式安装步骤
    •  关闭防火墙
    •  修改ip
    •  修改hostname
    •  设置ssh自动登录
    •  安装jdk
    •  安装hadoop

    *****网络连接方式
    1、宿主机(windows)与客户机(安装在虚拟机中的linux)网络连接
         1.1  host-only  宿主机与客户机单独组网。
              好处:网络隔离
              坏处:虚拟机与其他服务器之间不能通信    
         需要将VMnet1适配器打开
         1.2 bridge    客户机与宿主机在同一个局域网中。
              好处:都在同一个局域网,可以互相访问
              坏处:不安全 


    19、常用linux命令




    20、hadoop的伪分布安装步骤
         【使用root用户登陆】
         20.1  设置静态ip
         •  在centos桌面右上角的图标上,右键修改。
         •  重启网卡,执行命令service network restart
         •  验证:执行命令ipconfig
         20.2  修改主机名
         •  修改当前会话中的主机名,执行命令hostname  hadoop
         •  修改配置文件中的主机名,执行命令 vi /etc/sysconfig/network
         •  重启机器 reboot -h now
         20.3  把主机名和ip绑定起来
         •  执行命令vi /etc/hosts,增加一行内容,如下:
                192.168.22.100  hadoop-yang
         •  验证:ping hadoop-yang
         20.4  关闭防火墙
         •  执行命令  service iptables stop
         •  验证: service iptables status
         20.5  关闭防火墙的自动运行
         •  查看所有进程  chkconfig –list
         •  执行命令 chkconfig  iptables off
         •  验证:chkconfig –-list | grep iptables
         20.6  SSH(secure shell)的免密码登陆
         •  执行命令ssh-keygen -t rsa 产生密钥,位于~/.ssh文件夹中
         •  执行命令 cp ~/.ssh/id_rsa.pub authorized_keys
         •  验证  ssh localhost
         20.7  安装jdk
         •  执行命令rm -rf /usr/local/*  删除所有内容
         •  使用工具winscp把jdk文件从windows复制到/usr/local目录下
         •  执行命令 chomd u+x jdk-6u24-linux-i586.bin 授予执行权限
         •  执行命令 ./jdk-6u24-linux-i586.bin解压缩
         •  执行命令 mv jdk1.6.0_24 jdk 重命名
         •  执行命令vi /etc/profile 设置环境变量,增加了2行内容
              export JAVA_HOME=/usr/local/jdk
              export PATH=.:$JAVA_HOME/bin:$PATH
             执行source /etc/profile
         •  验证:java -version
         20.8  安装hadoop
         •  执行命令 tar –zxvf hadoop-1.1.2.tar.gz 进行解压缩
         •  执行命令mv hadoop-1.1.2 hadoop 重命名
         •  执行命令 vi /etc/profile 设置环境变量,增加了1行内容
              export HADOOP_HOME=/usr/local/hadoop 
              修改了1行内容
              export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
              保存退出
              执行命令source /etc/profle让该设置立即生效
         •  修改hadoop的配置文件,位于$HADOOP_HOME/conf目录下
         修改4个配置文件,分别是hadoop-env.sh、core-site.xml、hadfs-site.xml、mapred-site.xml。具体内容看PPT P23
              【hadoop-env.sh的修改内容如下】
                   export JAVA_HOME=/usr/local/jdk

              【core-site.xml的修改内容如下】
              <configuration>
                      <property>
                      <name>fs.default.name</name>
                      <value>hdfs://localhost:9000</value>
                      <description>change your own hostname</description>
                      </property>
                      <property>
                      <name>hadoop.tmp.dir</name>
                      <value>/usr/local/hadoop/tmp</value>
                      </property> 
              </configuration>

              【hdfs-site.xml的修改内容】
              <configuration>
                       <property>
                           <name>dfs.replication</name>
                           <value>1</value>
                       </property>
                       <property>
                           <name>dfs.permissions</name>
                          <value>false</value>
                       </property>
              </configuration>

         【mapred-site.xml的修改内容】
              <configuration>
                      <property>
                                <name>mapred.job.tracker</name>
                           <value>hadoop0:9001</value>
                      <description>change your own hostname</description>
                       </property>
              </configuration>

         •  执行命令hadoop namenode –format 对hadoop进行格式化
         •  执行命令start-all.sh进行启动
         •  验证:(1)执行命令jps,发现5个java进程,分别是NameNode、DataNode、SecondaryNameNode、JobTracker、TaskTracker。
         •   通过浏览器http://lcoalhost:50070 和 http://localhost:50030
         可以修改windows的C:WindowsSystem32driversetchosts文件******
         20.9  NameNode进程没有启动成功?
         •  没有格式化
         •  配置文件只copy,不修改
         •  hostname与ip没有绑定
         •  SSH的免密码登陆没有配置成功    
         20.10  多次格式化hadoop也是错误的?
         •  方法:删除/usr/local/hadoop/tmp文件夹,重新格式化,因为可能版本不一致。















    第二天
    1、课程安排
    •  分布式文件系统与HDFS
    •  HDFS体系结构与基本概念***
    •  HDFS的shell操作***
    •  java接口及常用api***
    加深拓展
    •  RPC调用**
    •  HDFS的分布式存储架构的源码分析**

    2、Distributed File System
    •  数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。
    •  是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
    •  通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。
    •  容错。即使系统中有些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。
    •  分布式文件管理系统很多,hdfs只是其中一种。适用于一次写入多次查询的情况,不支持并发写情况小文件不合适。

    3、HDFS的shell操作:
    3.1对hdfs的操作方式:hadoop fs xxx
      hadoop fs -ls  /     查看hdfs的根目录下的内容的
      hadoop fs -lsr /     递归查看hdfs的根目录下的内容的
      hadoop fs -mkdir /d1     在hdfs上创建文件夹d1
      hadoop fs -put <linux source> <hdfs destination> 把数据从linux上传到hdfs的特定路径中         
      hadoop fs -get <hdfs source> <linux destination> 把数据从hdfs下载到linux的特定路径下
      hadoop fs -text <hdfs文件>     查看hdfs中的文件
      hadoop fs -rm          删除hdfs中文件
      hadoop fs -rmr          删除hdfs中的文件夹
      hadoop fs -ls hdfs://hadoop0:9000/
    3.2、HDFS的datanode在存储数据时,如果原始文件大小 > 64MB,按照64MB大小切分;如果 < 64MB,只有一个block,占用磁盘空间是源文件实际大小。

    4、Namenode
    •  是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
    •  文件包括:
         •  fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
       •   edits:操作日志文件。
       •  fstime:保存最近一次checkpoint的时间。
    •  以上这些文件是保存在linux的文件系统中。

    5、SecondaryNameNode
    •  HA的一个解决方案。但不支持热备。配置即可。
    •  执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成信息的fsimage,在本地保存,并将其推送到NameNode,同时重置NameNode的edits。
    •  默认在安装在NameNode节点上,但这样…不安全!

    6、Datanode
    •  提供真实文件数据的存储服务。
         •  文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是64MB,以一个256MB文件,共有256/4=4个Block。
         •  不同于普通文件的系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。
         •  Replication。多复本。默认是三个。

    7、使用浏览器查看HDFS目录结构
    http://localhost:50070   只能看不能写

    8、使用java操作HDFS
    Alt + Shift + M : 创建方法
    Alt + Shift + L : 创建局部变量

    例子1:
    package hdfs;

    import java.io.InputStream;
    import java.net.URL;
    import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
    import org.apache.hadoop.io.IOUtils;

    public class App1{
        public static final String HDFS_PATH = "hdfs://localhost:9000/hello";

             public static void main(String[] args) throws Exception{
             URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
             final URL url = new URL(HDFS_PATH);
             final InputStream in = url.openStream();
             Object system;
              /*  @param in 输入流
             *   @param out  输出流
             *   @param buffSize  缓冲区大小
             *   @param close  是否关闭流
             */
             IOUtils.copyBytes(in,System.out ,1024,true);
         }
    }


    例子2:
    package hdfs;
    import java.net.URI;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;

    /*使用一个类FileSystem*/
    public class App2{
    public static void main (String[] args) throws Exception{
    public static final String HDFS_PATH = “hadfs://localhost:9000”
    public static final String DIR_PATH =”/d1000”;
    public static final String FILE_PATH = “/d1000/f1000”
    final FileSystem fileSystem = FileSystem.get(new URI(HDFS_PATH),new Configuration());
    //创建文件夹
    fileSystem.mkdirs(new Path(DIR_PATH));

    //上传文件
    final FSDataOutputStream out = fileSystem.create(new Path(FILE_PATH));
    final FileInputStream in = new FileInputStream(“c:/log.txt”);
    IOUtils.copyBytes(in,out,1024,true);

    //下载文件
    final FSDataInputStream in = fileSystem.open(new Path(FILE_PATH));
    IOUtils.copyBytes(in,System.out,1024,true);

    //删除文件(夹)
    fileSystem.delete(new Path(FILE_PATH),true);

    }
    }


    9、RPC(remote procedure call)
         •  不同java进程间的对象方法的调用。
         •  一方称作服务端(server),一方称为客户端(client)。server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在server端。
         •  RPC是hadoop框架运行的基础。
    例子3:服务器端:
    package rpc;
    import org.apache.hadoop.ipc.VersionedProtocol;
    public interface MyBizable extends VersionedProtocol{
        public static final Long VERSION = 2453245L;
        public abstract String hello(String name);
    }

    package rpc;

    import java.io.IOException;
    import org.apache.hadoop.ipc.VersionedProtocol;

    public class MyBiz implements VersionedProtocol,MyBizablen{
         public String hello(String name){
            System.out.println(“我被调用了!”);
            return “hello”+name;
    }
         public long getProtocolVersion(String protocol,long clientVersion) throws IOException{
         return MyBizable.VERSION;
    }
    }

    package rpc;
    import org.apache.hadoop.ipc.RPC;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC.Server;


    public class MyServer{
         public static final String SERVER_ADDRESS = “localhost”;
         public static final int SERVER_PORT = MyBizable.VERSION;

         public static void main(String[] args) throws Exception{
          /*
          * 构造一个RPC Server。
          * instance  实例中的方法会被客户端调用
          * binAddress 绑定的这个地址用于监听连接的到来
          * port 绑定的这个端口用于监听连接的到来
          *
            RPC.getServer(new MyBiz(), SERVER_ADDRESS,SERVER_PORT,new Configuration());
            server.start();

        }
    }


    例子4:客户端:
    package rpc;

    import org.apache.hadoop.ipc.RPC;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC.VersionedProtocol;

    public class MyClient{
    public static void main(String[] args) throws Exception{
        /*构造一个客户端的代理对象。*/
       final MyBiz proxy =  (MyBizable)RPC.waitForProxy(MyBizable.class,234534343L,new InetSocketAddress(MyServer.SERVER_ADDRESS,MyServer.SERVER_PORT),new Configuration());
    final String result = proxy.hello(“world”);
    system.out.println(“客户端调用结果:”+result);

    RPC.stopProxy(proxy);
    }

    }

    9.1、通过rpc小例子获得的认识?
    •  服务端提供的对象必须是一个接口,接口extends VersioinedProtocal
    •  客户端能够的对象中的方法必须位于对象的接口中。

  • 相关阅读:
    suse linux 下的 altera 软件 安装。
    全国教育网DNS(转)
    Upan量产 金士顿 G3
    备忘一 wget
    Linux IP 设置方法
    Linux 如何 mount 挂载 iso 虚拟光驱
    安卓学习资料总结
    自己实现的一个Android上面TreeView效果
    Android 学习资料推荐
    Android ListView下拉刷新 Demo
  • 原文地址:https://www.cnblogs.com/yangyquin/p/5017806.html
Copyright © 2011-2022 走看看