第一天:
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:\Windows\System32\drivers\etc\hosts文件******
     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
•  客户端能够的对象中的方法必须位于对象的接口中。

智传播客hadoop视频学习笔记(共2天)的更多相关文章

  1. 传智播客C++视频学习笔记(3)

    #include<iostream> using namespace std; //内存分区模型 //代码区,存放二进制代码,由操作系统进行管理 //全局区,存放全局变量.静态变量.常量( ...

  2. 传智播客C++视频学习笔记(5)

    #include <iostream> using namespace std; void swapInt(int& a, int& b) { int temp = a; ...

  3. 传智播客C++视频学习笔记(1)

    下载Visual Studio Community版本, #include<iostream> using namespace std; int main() { cout << ...

  4. 传智播客.NET视频学习课件

    传智播客.NET视频学习课件访问.NET网站了解更多课程详情http://net.itcast.cn(小提示:为什么本书中超链接打不开?)此套课件是伴随 传智播客.net实况教学视频 (小提示:为什么 ...

  5. 【传智播客】Libevent学习笔记(三):事件循环

    目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...

  6. 【传智播客】Libevent学习笔记(五):基本类型和函数

    目录 00. 目录 01. 基本类型 1.1 evutil_socket_t类型 1.2 标准类型 1.3 各种兼容性类型 02. 可移植的定时器函数 03. 套接字API兼容性 04. 可移植的字符 ...

  7. 【传智播客】Libevent学习笔记(四):事件event

    目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. ...

  8. 【传智播客】Libevent学习笔记(二):创建event_base

    目录 00. 目录 01. 简介 02. 创建默认的event_base 03. 创建复杂的event_base 3.1 event_config_new函数 3.2 event_base_new_w ...

  9. 【传智播客】Libevent学习笔记(一):简介和安装

    目录 00. 目录 01. libevent简介 02. Libevent的好处 03. Libevent的安装和测试 04. Libevent成功案例 00. 目录 @ 01. libevent简介 ...

随机推荐

  1. 正文字体大小:大 中 小 解决configure: error: Cannot find libmysqlclient under /usr

    今天在64位centos5.6系统上编译PHP5.2.17报错 checking for MySQL support... yes, shared checking for specified loc ...

  2. windows github 搭建与使用

    git/github使用以下是全部在命令行使用(windows/github) 注册账户以及创建仓库先在github建立账号和创建仓库,此时为空的仓库 配置git下载并安装 git windows版本 ...

  3. JS传参出现乱码(转载)

    问题说明:在进行网站开发时,将表单的提交功能交给JS来传递,但是在传递中文的过程中出现类似于繁体字的乱码. 解决方案:为了解决这个问题,首先从底层的C#代码审查,重新设置页面传值进行模拟,但是几经测试 ...

  4. 一种C# TCP异步编程中遇到的问题

    最近在维护公司的一个socket服务端工具,该工具主要是提供两个socket server服务,对两端连接的程序进行数据的透明转发. 程序运行期间,遇到一个问题,程序的一端是GPRS设备,众所周知,G ...

  5. 阶段性放弃 wxPython 前的总结

    为了实现一个管理本地电子书的程序,搞了一段时间 GUI,使用 wxPython. 实在难以适应和习惯,也搞不出什么太好看的效果. 最不能忍受的是,多线程处理能力太弱.遂决定放弃 GUI. 放弃之前,整 ...

  6. Win32的绘图消息大集合

    AbortPath 抛弃选入指定设备场景中的所有路径.也取消目前正在进行的任何路径的创建工作AngleArc 用一个连接弧画一条线Arc 画一个圆弧BeginPath 启动一个路径分支CancelDC ...

  7. easy ui 下拉级联效果 ,下拉框绑定数据select控件

    html代码: ①两个下拉框,一个是省,另一个市 <tr> <td>省:</td> <td> <select id="ProvinceI ...

  8. easy ui 表单元素input控件后面加说明(红色)

    <%-- 上传图片到图库基本信息且将图片关联到图集 开始--%> <div id="win_AddPicLib" class="easyui-windo ...

  9. 研读代码必须掌握的Eclipse快捷键

    1. Ctrl+左键 和F3 这个是大多数人经常用到的,用来查看变量.方法.类的定义跳到光标所在标识符的定义代码.当按执行流程阅读时,F3实现了大部分导航动作. 2 Ctrl+Shift+G在工作空间 ...

  10. python 读写INI配置文件

    # -*- coding: utf-8 -*-import ConfigParserimport os '''读写配置文件的类[section]logpath = D:\log\imageminsiz ...