大数据之Hadoop

数据库存储:hdoop,hive,hbase,clickHouse
流式计算:flink、spark、kafka
ETL数据收集与入库: flume、sqoop

一。Hadoop介绍与下载安装

https://hadoop.apache.org/

1、Hadoop生态系统以及版本演化

1.Hadoop生态系统特点
    1.源代码开源  2.社区活跃、参与者众多  3.涉及分布式存储和计算的方方面面   4.已得到企业界验证

2.Hadoop主要核心组件
   分布式文件(存储)系统HDFS(Hadoop Distributed File System)
   分布式计算框架 MapReduce
   资源管理系统YARN(Yet Another Resource Negitiator)  2.0新加的

3.Hadoop各个发行版介绍(开源版)
   Apache Hadoop
     推荐使用最新的2.x.x 版本,比如2.4.0
     下载 地址:http://hadoop.apache.org/releases.html
     SVN :http://svn.apache.org/repos/asf/hadoop/common/branches/
   CDH (Cloudera Distributed Hadoop )
     推荐使用最新的CDH5 版本, 比如CDH5.0.0
     下载地址: http://archive.cloudera.com/cdh5/cdh/
   HDP (Hortonworks Data Platform )
    推荐使用最新的 的HDP 2.x 版本 , 比如HDP 2.1 版本
    下载 地址:http://zh.hortonworks.com/hdp/downloads/

4.Hadoop生态系统
  Hive(基于MR的数据仓库):日志分析、多维度数据分析、其他场景如:海量结构化数据离线分 低成本进行数据分析  hive语句类似sql语句
  Pig  pig语句类似excel的汇总公式语句  (hive和pig都可以做数据分析)
  Mahout  提供各种算法
  HBase 数据模型  
      table:类似于传统数据库中的表
      column family:列簇  table在水平方向有一个或多个column family组成,一个column family可以有多个任意column组成
      row key:行键   table的主键,table中的记录按照row key排序
      timestamp:时间戳  每行数据均对应一个时间戳(版本号)
  Zookeeper:服务注册中心
  Flume:数据收集系统
  Sqoop:数据同步工具 连接Hadoop与传统数据库之间的桥梁
  Oozie:作业流调度系统  目前计算框架和作业类型繁多,如何对这些框架和作业进行统一管理和调度?直接使用开源Oozie
  Azkaban:作业调度系统

2.0

2、Hadoop下载安装启动

https://hadoop.apache.org/

一、Hadoop三种运行方式
    本地模式:一台服务器,数据存储在linux
    伪分布式:一台服务器,数据存储在hdfs
    完全分布式:多台服务器,数据存储在hdfs

二、完全分布式安装
//参考自VIP扩展——用户画像项目实战
1、准备三台服务器,下载jdk-8u321-linux-x64.tar.gz和hadoop-3.2.2.tar.gz解压并配置环境变量

	 vi /etc/profile	 
	#Java环境变量配置
	  export JAVA_HOME=/home/piaoransheng/jdk/jdk1.8
	  export PATH=$PATH:$JAVA_HOME/bin
	#Hadoop环境变量配置
	  export HADOOP_HOME=/home/piaoransheng/hadoop/hadoop-3.2.2
	  export PATH=$PATH:$HADOOP_HOME/bin
	  export PATH=$PATH:$HADOOP_HOME/sbin

2、配置域名(每台服务器都操作)	
	编辑hosts文件:vi /etc/hosts
		192.168.61.151 hadoop01
		192.168.61.152 hadoop02
		192.168.61.153 hadoop03

3、配置免密登录操作集群(每台服务器都操作)
    a.所谓免密登录操作:
    	比如在hadoop01机器上要操作hadoop02机器,正常ssh hadoop02需要输入密码,如果配置有免密登录就不需要密码
    
    b.操作步骤:
    	在hadoop01上生成密钥 ssh-keygen,回车,回车,回车
    	将密钥分发到另外两台机器 ssh-copy-id hadoop02,输入yes,回车,输入hadoop02的密码,回车
							 ssh-copy-id hadoop03,输入yes,回车,输入hadoop03的密码,回车

4、对配置文件进行配置                            
  修改解压后的目录中的文件夹etc/hadoop下的xml配置文件(如 果文件不存在,则自己创建)   
     a.hadoop-env.sh修改以下配置: export JAVA_HOME=/home/dongxicheng/hadoop/jdk1.6.0_45 
     b.Slaves文件修改为以下配置: YARN001 
     c.以下四个标签添加配置项 (四个xml文件都在etc/hadoop文件夹下)
        1、 mapred-site.xml: 
        
			<?xml version="1.0"?>
			<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
			<configuration>
				<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
				<property>
					<name>mapreduce.framework.name</name>
					<value>yarn</value>
				</property>
			</configuration>
    
        2. core-site.xml (其中“YARN001”是在/etc/hosts中设置的host,如果未设置,则换 为localhost)
        
			<?xml version="1.0" encoding="UTF-8"?>
			<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
			<configuration>
				<!-- 指定 NameNode 的地址 -->
				<property>
					<name>fs.defaultFS</name>
					<value>hdfs://hadoop01:8020</value>
				</property>
				<!-- 指定 hadoop 数据的存储目录 -->
				<property>
					<name>hadoop.tmp.dir</name>
					<value>/home/piaoransheng/hadoop/data</value>
				</property>
				<!-- 配置 HDFS 网页登录使用的静态用户为当前操作系统用户 -->
				<property>
					<name>hadoop.http.staticuser.user</name>
					<value>root</value>
				</property>
			</configuration>
                                                    
        3.  hdfs-site.xml     
			
			<?xml version="1.0" encoding="UTF-8"?>
			<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
			<configuration>
				<!-- NameNode web 端访问地址-->
				<property>
					<name>dfs.namenode.http-address</name>
					<value>hadoop01:9870</value>
				</property>
				<!-- SecondaryNameNode web 端访问地址-->
				<property>
					<name>dfs.namenode.secondary.http-address</name>
					<value>hadoop03:9868</value>
				</property>
				<!-- 备份数量 -->
				<property>
					<name>dfs.replication</name>
					<value>2</value>
				</property>
				<!-- 开启webhdfs功能 -->
				<property>
					<name>dfs.webhdfs.enabled</name>
					<value>true</value>
				</property>
			</configuration>
          
        4.  yarn-site.xml
        
        	<?xml version="1.0"?>
			<configuration>
				<!-- 指定 MR 走 shuffle -->
				<property>
					<name>yarn.nodemanager.aux-services</name>
					<value>mapreduce_shuffle</value>
				</property>
				<!-- 指定 ResourceManager 的地址-->
				<property>
					<name>yarn.resourcemanager.hostname</name>
					<value>hadoop02</value>
				</property>
				<!-- 环境变量的继承 跑示例时要用到-->
				<property>
					<name>yarn.nodemanager.env-whitelist</name>
					<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
				</property>
				<!-- 是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀死。默认是true -->
				<property>
					<name>yarn.nodemanager.pmen-check-enabled</name>
					<value>false</value>
				</property>
				<!-- 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀死。默认是true -->
				<property>
					<name>yarn.nodemanager.vmen-check-enabled</name>
					<value>false</value>
				</property>
			</configuration>

5.格式化(仅第一次启动)
	配置完成后,第一次启动需要对NameNode格式化  hadoop namenode -format 
	初始化完成后会在/home/piaoransheng/hadoop/hadoop-3.2.2/data/dfs/name/current目录下创建一个NameNode的镜像。                  
                          
6.启动服务
      启动hdfs           start-dfs.sh 
      启动yarn           start-yarn.sh
      全部启动            start-all.sh

	如果没有创建hadoop用户,用的root用户启动,还需要配置环境变量
		export HDFS_NAMENODE_USER=root
		export HDFS_DATANODE_USER=root
		export HDFS_SECONDARYNAMENODE_USER=root
		export YARN_RESOURCEMANAGER_USER=root
		export YARN_NODEMANAGER_USER=root
           
7.验证是否启动成功
     jps命令  里面有DataNode/NameNode/SecondaryNameNode/NodeManager/ResourceManager进程
	     访问yarn地址:http://192.168.1.76:8088
	     访问HDFS地址:http://192.168.1.76:50070 
	     访问webHdfs:http://192.168.1.76:9870/webhdfs/v1/<文件路径>?op=操作指令
	            示例:http://hadoop01:9870/webhdfs/v1/data/?op=GETFILESTATUS
	     	    指令参考:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

	DataNode:数据存储(hdfs)
	NameNode:名单管理(hdfs)
	SecondaryNameNode:对NameNode的备份(hdfs)
	NodeManager:工作子节点(yarn)
	ResourceManager:集群协调(yarn)
	

二。Hadoop核心组件

1、HDFS

Hadoop Distributed File System 分布式文件系统

1.优点:高容错性、适合批处理、适合大数据处理、流式文件访问、可构建在廉价机器上
2.缺点:低延迟数据访问、文件存取  、发写入文件随机修改  
3.访问方式:
  webhdfs 直接http命令请求      https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
  Shell 命令
  Java API
  REST API
  Fuse:实现fuse协议
  其他语言编程API
     使用thrift实现
     支持C++,Python,php,C等语言
4.快照
  1.背景:HDFS上文件和目录是不断变化的,快照可以帮助用户保存某个时刻的数据
  2.作用:a.防止用户误操作删除数据   b.数据备份
  3.一个目录可以产生快照,当且仅当它是Snapshottable
       使一个目录可以产生快照: bin/hdfs dfsadmin allowSnapshot <path>
       
  4.创建/删除快照:          bin/hdfs dfs -createSnapshot <path> [<snapshotName>]
                            bin/hdfs dfs -deleteSnapshot <path> [<snapshotName>]

  5.快照存放位置和特定
      a.快照是只读的,不可修改
      b.<snapshottable_dir_path> /.snapshot/snapshotName

5.HDFS架构
  HDFS是一个主从体系结构,由四部分组成,Client————NameNode————Secondary NameNode————DataNode    
    1.client作用: 提供一些命令来访问HDFS,比如启动或者关闭HDFS
       a.文件切分。文件上传HDFS的时候,HDFS将文件切成一个一个的block,然后进行存储
       b.与NameNode交互:获取文件的位置信息
       c.与DataNode交互:读取或者写入数据
    2.NameNode:就是master,它是一个主管,管理者
        a.管理hdfs的名称空间
        b.管理数据块映射空间
        c.配置副本策略
        d.处理客户端读写请求
        一个文件在NameNode存放一条记录,不管这个文件多大或者多小,所以HDFS不适合存放大量小文件
    3.DataNote:就是slave,NameNode下达命令,DataNode执行实际的操作
        a.存储实际的数据库
        b.执行数据块的读写操作.
    4.Secondary NameNode:并非NameNode的热备,当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
        a.辅助NameNode,分担其工作量
        b.定期合并fsimage和fsedits,并推送给NameNode
        c.在紧急情况下,可以辅助NameNote恢复

6.hdfs命令行操作 (任意路径)
     如果提示没有该命令,加环境变量:
          export PATH = $PATH:/home/will/Hadoop/hadoop-2.7.7/bin
   显示文件列表1      ls:         hdfs dfs -ls URI
   显示文件列表2      ls -R:      hdfs dfs -ls -R URI
   创建目录1         mkdir       hdfs dfs -mkdir /dir1   创建完可以用ls测试,也可以登录50070——utilities——file——查看
   创建目录2         mkdir -p    hdfs dfs -mkdir -p /dir2/dir22  创建二级目录,但是一级目录不存在,使用这个命令就可以一级二级目录一起创建
   上传文件          put           hdfs dfs -put test.txt /dir1
   删除文件          rm            hdfs dfs -rm /aaa/stopwords.txt
   删除目录         -rm -r         hdfs dfs -rm -r /aaa/1.py 
本地移动文件到hdfs   moveFromLocal hdfs dfs -moveFromLocal test.txt /dir1   将本地的文件移动到hdfs上
hdfs移动文件到本地   moveToLocal   还未实现,不能用
hdfs文件复制到本地   get           hdfs dfs -get /dir2.txt ./  (./表示当前目录)
hdfs上移动文件       mv           hdfs dfs -mv /dir2/test.text /dir1 
hdfs上复制文件       cp           hdfs dfs -cp /dir1/test/txt /dir2
查看文件            cat           hdfs dfs -cat /dir1/test.txt
修改权限            chmod         hdfs dfs -chmod 777000 /dir1/a.txt
修改所属用户和用户组 chown         hdfs dfs -chown will:will /dir1/a.txt
合并文件           appendToFile  hdfs dfs -appendToFile core-site.xml hdfs-site.xml /dir1/b.txt 本地追加到hdfs


7.hdfs高级命令
   a.数量限额配置  查看是否限额  hdfs dfs -count -q -h /dir1        第一个参数表示上传最大数量,第三个参数表示最大大小
                  数量限额     hdfs dfsadmin -setQuota 2 /dir1    设置一次最多只能上传两个文件
               去掉数量限额    hdfs dfsadmin -clrQuota   /dir1
    
   b.大小限额      大小限额     hdfs dfsadmin -setSpaceQuota 384M /dir1  dir1路径空间大小4k
               去掉大小限额    hdfs  dfsadmin -clrSpaceQuota /dir1
                   
   c.安全模式
           查看安全模式       hdfs dfsadmin -safemode get
           进入安全模式       hdfs dfsadmin -safemode enter
           离开安全模式       hdfs dfsadmin -safemode leave

8.hdfs基准测试
    a.测试写入速度   hadoop jar /share/hadoop/mapreduce/hadoop-mapreduce-client-jobClient-2.7.7-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
    b.测试读取速度   hadoop jar /share/hadoop/mapreduce/hadoop-mapreduce-client-jobClient-2.7.7-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
    c.清除测试数据   TestDFSIO -clean

9.HDFS的Java API操作
   a.winsows准备: 1.下载hadoop包  2.配置环境变量HADOOP_HOME  3.把hadoop.dll拷贝到C:\windows\system32目录下 4.重启
   b.项目导入pom依赖  hadoop-common 
                     hadoop-clent 
                     hadoop-hdfs 
                     hadoop-client-core    
                     junit
   c.使用url方式访问数据(了解) hdfs文件输入流,本地文件输入流,流拷贝实现下载 
   d.使用文件系统方式访问数据(掌握)
        1.获取FileSystem  方式1:得到configuration,再得到FileSystem)
                          方式2:FileSystem.get(new URI("hdfs://node01:8020"),new Configuraion()) 
                          方式3:
                          方式4:    
        遍历操作:  先获取FileSystem,调用方法遍历  fileSystem.listFiles(new path("/"),true);     后面的true表示递归
        创建文件夹:先获取FileSystem,然后        fileSystem.mkdir(new path("aaa/bbb/ccc"))
        创建文件:  先获取FileSystem,然后        fileSystemcreate(new path("aaa/bbb/ccc.d.txt"))
        文件的下载和上传:   下载方式1:hdfs文件输入流,本地文件输出流,流拷贝
                           下载方式2: fileSystem.copyToLocalFile(new path("/dir1/a.txt"),new path("d://a.txt"))
                           上传:     fileSyste.copyFromLocalFile(SourcePath,DesPath)
        hdfs的权限访问控制: etc/hadoop/hdfs-site.xml
               <property>
                   <name>dfs.permissions</name>
                   <value>true</value>
               </property>
        小文件的合并:先在本地合并,然后再上传到hdfs
                                      
10.问题处理记录:
  a.jps查看datanode没有启动:
     logs查看datanode的日志,复制namenode的cluster-id;然后把这个id粘贴到dfs-data里面的cluster-id;重启就好了

2、YARN

YARN产生背景—总结 
1.直接源于MRv1在几个方面的缺陷:   a.扩展性受限   b.单点故障   c.难以支持MR之外的计算
2.多计算框架各自为战,数据共享困难  
  MR:离线计算框架
  Storm:实时计算框架
  Spark:内存计算框架    

3、MapReduce

1.运行过程
  MapReduce将整个运行过程分为两个阶段,Map阶段和Reduce阶段
     Map阶段由一定的Map Task组成
         a.输入数据格式解析:InputFormat
         b.输入数据处理:    Mapper
         c.数据分组:        Partitioner
     Reduce阶段由一定数量的Reduce Task组成   
         a.数据远程拷贝
         b.数据按照key排序
         c.数据处理:Reducer
         d.数据输出格式:OutputFormat(TextOutPutFormat)
2.编程接口
   1.Hadoop提供了三种MapReduce编程方式
      a.Java(最原始的方式)
      b.Hadoop Streamng(支持多语言)
      c.Hadoop Pipes(支持C++)
   2.JAVA编程接口是所有编程方式的基础
   3.不同的编程接口只是暴露给用户的形式不同而已,内部执行引擎是一样
     不同编程方式效率不同
     
3.案例 wordcount
   编程规范:有八个步骤(map2,shuffle4,reduce2)
     条件:新建一个a.txt并上传到hdfs(如果仅仅测试mapreduce程序可以在本地新建)
     1.指定文件的读取方式和读取路径
     2.将第一步的结果转换成k2,v2                          //map阶段 和第七步类似
     
     3.对k2,v2进行分区
     4.对分区的数据进行排序
     5.(可选)对分组过的数据初步规约,降低数据的网络拷贝
     6.对数据进行分组,相同key和value放入一个集合中       //shuffle阶段
     
     7.将k2,v2转成k3,v3                                //reduce阶段   和第二步类似           
     8.处理保存reduce输出的数据                         
     
  
        k1,v1  0  hello world
               11 hello hadoop
        k2,v2  hello 1  world 1    新k2,v2  hello <1,1,1>
               hello 1  hadoop1             world <1,1>
        k3,v3  hello 3
               world 2
  
4. wordcount运行的两种方式
  a.yarn集群运行:将程序打包成JAR并上传,然后在集群上用hadoop命令启动(jar包点击maven-package,生成在项目target里面)   
      hadoop jar  4d5f5d.jar  com.mapreduce.mapreduce.MainJob(jar包名称,主方法全路径名)
  b.本地运行
   
5.mapreduce分区(大于15的和小于等于15的分出来)
   步骤:定义mapper  自定义partition  定义reduce   主类
  
6.计数器 (这个文件有多少行)
//wordcount map
public class WordCountMapper extends Mapper<LongWritable, Text,Text,LongWritable> {
    /**
     * 将K1,v1转换成功k2,v2
     *
     * @param key       0
     * @param value     hello,word,hello,hadoop
     * @param context   上下文
     */
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        Text text = new Text();
        LongWritable longWritable = new LongWritable();
        //1.将一行文本拆分
        String[] arr = value.toString().split(".");
        //2.遍历拆分后的数组
        for (String word : arr){
            text.set(word);
            longWritable.set(1);
            //3.将k2,v2写入上下文
            context.write(text,longWritable);
        }
    }
}


//wordcount  reduce
public class WordCountReduce extends Reducer<Text,LongWritable,Text,LongWritable> {
    /**
     * 将k2,v2转换成功k3,v3
     *
     * @param key        hadoop
     * @param values     {1,1,1}
     * @param context    上下文
     */
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
        long count = 0;
        //1.遍历v2得到v3
        for (LongWritable longWritable : values){
            count += longWritable.get();
        }
        //2.将k3,v3写入上下文
        context.write(key,new LongWritable(count));
    }
}


//wordcount  job任务
public class MainJob extends Configured implements Tool {

    /**
     * 指定一个Job任务,mian方法中ToolRunner.run执行的就是这个方法
     */
    @Override
    public int run(String[] strings) throws Exception {
        //1.指定一个job任务对象
        Job job = Job.getInstance(super.getConf(), "wordcount");

        //2.配置job任务对象(八个步骤)

        //第一步:指定文件的读取方式和读取路径
        job.setInputFormatClass(TextInputFormat.class);
        TextInputFormat.addInputPath(job,new Path("hdfs://192.168.1.76:8020/wordcount"));
        //第二步:Map阶段  k1,v1转成k2,v2
        job.setMapperClass(WordCountMapper.class);        //哪个处理类
        job.setMapOutputKeyClass(Text.class);             //k2类型
        job.setMapOutputValueClass(LongWritable.class);   //v2类型

        //第三,四,五,六 先采用默认的方式,先不做处理; 以后再详细说明

        //第七步 reduce阶段
        job.setReducerClass(WordCountReduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        //第八步 设置输出类型
        job.setOutputFormatClass(TextOutputFormat.class);

        //设置输出类型
        TextOutputFormat.setOutputPath(job,new Path("hdfs://192.168.1.76:8020/wordcount_out"));
        //等待任务结束
        boolean result = job.waitForCompletion(true);
        return  result? 0:1;
    }


    public static void main(String[] args) throws Exception {
        //启动job任务
        int run = ToolRunner.run(new Configuration(), new MainJob(), args);
        //退出
        System.exit(run);
    }
}

二。数据收集与入库系统

1、数据收集—— flume
1.都有哪些技术?
   Flume  Kfaka  Scribe
2.Flume OG基本架构   
   Agent:用于采集数据,agent是flume中产生数据流的地方,同时agent会将产生的数据流传输到collcotor中.
          agent通常包含两部分,source和sink;source用于获取数据,sink用于将获得的数据传给后面的collector          
   Collector:汇总多个agent结果,用于对数据进行聚合(数据收集器),往往会产生一个更大的数据流,然后加载到storage中   
   Master:协调agnet和collector的配置信息,负责配置及通信管理,是集群的控制器
3.flume为什么引入collector
   a.对agent数据进行汇总,避免产生过多小文件
   b.避免多个agent连接对hadoop造成过大压力
   c.中间件,屏蔽agent和hadoop间的异构性
2、传统数据库与Hadoop同步 —— sqoop
1.sqoop是什么
   sqoop:SQL-to-Hadoop,连接传统关系型数据库和Hadoop的桥梁
   把关系型数据库的数据导入hadoop系统(如Hdfs,Hbase,Hive),把hadoop系统的数据导出到传统数据库

2.导入语法(mysql导入hadoop)
  sqoop import
    --connection jdbc:mysql://mysql.example.com/sqoop   --mysql的信息
    --username sqoop                                    --mysql的信息                            
    --password sqoop                                    --mysql的信息
    --table tableName                                   --mysql的信息
    会导入到目录 bin/hadoop fs -cat cities/part-m-*
  
  也可以指定导入的目录   --target-dir /etl/input/cities
       指定导出的条件   --where "country = 'USA' " 
       导入多个表
       增量导入(两种方式) append
    
3.导出语法(hadoop导出到MySQL)
  sqoop export
     --connection jdbc://mysql://mysql.example.com/sqoop  --mysql的信息
     --username sqoop                                     --mysql的信息
     --password sqooop                                    --mysql的信息
     --table cities                                       --mysql的信息
     --export -dir cities                                 --haddoop信息     

三。Hbase

1.概述
  Hbase是一个构建在HDFS上的分布式列存储系统
  是Hadoop生态系统中重要的一员,主要用于海量结构化数据存储
  从逻辑上讲,HBase将数据按照表,行和列进行存储
  
2.Hbase和HDFS对比
   a.两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点
   b.hdfs适合批处理场景
      不支持数据随机查找
      不支持增量数据处理
      不支持数据更新

3.Hbase表特定(列式数据库,传统的行式数据库)
  a.大:        一个表可以有数十亿行,上百万列
  b.无规模:     每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列     
  c.面向列:     面向列的存储和权限控制,列独立检索
  d.稀疏:       对于空的列,并不占用存储空间,表可以设计得非常稀疏
  e.数据多版本:  每个单元格中的数据有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳
  f.数据类型单一:数据都是字符串,没有类型
  
4.habse访问方式
  a.java API
  b.Hbase Shell命令行工具
  c.rest gateway,支持rest风格的HTTP API访问Hbase,解除了语言限制
  d.使用mapReduce,pig,hive处理Hbase数据

5.java API访问hbase
    1.创建一个configuration对象 (包含各种配置信息)                   Configuration conf = HbaseConfiguration.create();
    2.构建一个HTable句柄        (提供Configuration对象,提供待访问table的名称)  Htable table = new Htable(conf,tableName);
    3.执行相应的操作             (put get delete scan等操作)                   table.getTableName();
    4.关闭Htable句柄            (将内存数据刷新到磁盘上柄关闭资源)             table.close();
                  

六。Mahout

1、Mahout是什么

Mahout是Apach旗下的一个开源项目

提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序

Mahout包含许多实现,包括聚类,分类,推荐过滤,频繁子项挖掘。此外,通过Hadoop库,

Mahout可以有效地扩展到云中

2、Mahout的下载安装

Mahout是运行在Hadoop服务之上的算法工具,安装Mahout的前提是Hadoop集群服务运行正常。

Mahout的安装非常的简单,安装步骤如下:
  1.下载 mahout-distribution-0.7.tar.gz  (下载地址:http://mahout.apache.org/)
  2.解压到 /opt目录

3、Mahout的算法库

包括三大块:聚类,分类,协同过滤等算法
   a.Classfication(分类算法)  
       Logisitc Regression      逻辑回归
       Bayeslan                 贝叶斯分类算法
       Support Vector Machines  支持向量机
   b.lustering(聚合)   
   c.Dimension Reduction    
   d.Freq.Pattern Mining
   e.Examples Non-MR Algorithms       
   f.Non-MR Algorithms
   g.Recommenders
   h.Regression
   i.Evolution
   j.Vecotr Similarty
   k.等等

八。作业流调度引擎

1.作业流调度系统介绍

1.基本概念
  目前计算框架和作业类型繁多,对这些框架和作业进行统一管理和调度
2.有多重解决方案
   a.Crontab (Linux内置提供的一种脚本工具,举例:定时触发mapreduce作业)
   b.自己设计调度系统
   c.直接使用开源系统
3.Hadoop作业流调度系统基本功能
   a.对常见作业类型进行调度 (mapreduce作业,Hive作业,Pig作业,Shell)
   b.根据需要对作业进行调度(按周期调度,定时调度)
   c.支持容错与报警
   d.可视化作业流运行过程
4.常见的开源作业流调度系统
  a.Oozie         雅虎,基于xml表达作业依赖关系
  b.Azkaban       Linkedin开源,通过Java property配置作业依赖关系
  c.Zeus(宙斯)   阿里开源,通过界面配置作业依赖关系
  d.其他开源系统   Cascading,通过Java API编程实现作业依赖关系

2.Oozie 作业流调度系统

1.Oozie基本架构
  a.Oozie Client:
  b.Oozie Server:包括作业流管理系统和定时器(Oozie Workflow 和 Oozie Coordinator)
  
2.Oozie使用方式
  a.Oozie CLI(命令行)
  b.java api
  c.rest api
  d.web ui(只读)

3.Oozie基本概念
  a.作业流由一种节点构成,且这些节点通过控制流节点相连
  b.Oozie工作流通过hPDL语言(一种xml过程定义语言)编写

4.Oozie层次结构
   action(节点):支持mapreduce,hdfs,pig,ssh,http,email
   workflow(作业):
   coordinator(一群作业)
   bundle(更大的群)
                          

3.Azkaban 作业流调度系统

1.Azkaban基本架构
  mysql
  azkaban executor server:调度mysql语句
  azkaban web      server:显示

2.Azkaban使用方式
  a.rest api
  b.web ui(用户管理权限,提交作业流,查看作业流运行进度)

3.Azkaban作业流表达方式
  a.每个作业描述对应一个".job"文件
  b.作业依赖关系在".job"文件设置
  c.一个作业流打包成.zip,提交到Azkaban上

4.Azkaban作业示例
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘然生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值