基于阿里云计算的数据仓库方案

通过阿里云实现存储和计算分离的数据仓库架构,扩展计算能力和存储方式。通过尝试三种不同的方案,对不同的技术方案做基本的了解。

0.数据仓库-存储和计算分离。

01.将计算和存储分开可以简化操作,用户可以分别扩展和管理计算和存储系统。
     保证存储集群长期运行即可,计算集群可以随时使用随时创建
   数据仓库在企业的数据汇总有着基础功能的作用,而目前的大数据技术系统也有着对数据仓库良好的支持。
   传统和常见的数据仓库采用的架构多是存储和计算放在一起,而本文主要是汇总存储和计算分离的数据仓库架构。
   通过阿里云提供的技术,实现数据仓库的云端化。
02.基于阿里云的数据仓库-技术方案:
    存储层面上采用的OSS,
    计算层面,可以采用 阿里云 E-MapReduce 作为计算集群,
                    亦可以采用阿里云 Maxcomputer 作为计算集群。
      注意基于这种存储和计算分离的技术方案的瓶颈在哪里,要解决的问题在哪里: 将OSS作为数据源时存在的两类问题:数据读 和数据写问题

1.基于OSS+E-MapReduce构建数据仓库

步骤:
IE-MapReduce集群运行程序
    01.上传文件到OSS
        方式一:通过OSSImport
           前期环境准备:
             1.本地的环境
               本地需要有Java环境,且版本>=1.7
             2.OSS端环境配置
              001.RAM控制台创建子帐号,并授权该子账号可访问OSS
                   保存AccessKeyIDAccessKeySecret
               002.区域-目的endpoint
               003.bucket 设置
                  OSS的存储类型
                3.下载并解压文件ossimport
                  解压的位置 C:\Items\ossimport 
                              1.修改单机配置文件
            单机的配置文件名是local_job.cfg
                        001. srcPrefix=d:/work/oss/data/
                             变为自己放置的数据
                              srcPrefix=c:/Data/MapData/crawData/
                        002.
                        destDomain=http://oss-cn-hangzhou-internal.aliyuncs.com
                        修改为
                        destAccessKey=LT***j216JVY6*
                        destSecretKey=*****oufMnfAX*
                        destDomain=http://oss-cn-shanghai.aliyuncs.com
                        destBucket=comp
                        destPrefix=alidata/
                    #目的bucket,不需要加上"/"
                    destBucket=
                    2.运行import.bat/import.sh为一键导入脚本
                        Window系统下在cmd.exe中执行import.batLinux终端中执行 bash import.sh
                        步骤:Windows下执行 import.bat,将命令行转到ossimport目录下,然后执行
                          cd     C:\Items\ossimport
                          import.bat
    02.开发并打Jar
         001.安装 E-MapReduce SDK--依赖关系
                001emr.version
                        com.aliyun.emr
                                emr-core
                                emr-sdk
                002.oss.sdk.version   
          002.Spark 代码本地调试,调试结束后 打成Jar 包运行
                "spark.hadoop.mapreduce.job.run-local"
              这个配置项只是针对需要在本地调试 Spark 代码读写 OSS 数据的场景
    03创建集群
        创建集群后,您可以提交作业。
            首先,创建集群
            然后,您需要在 E-MapReduce 中创建一个作业,配置作业
            最后,创建执行计划           
    04.执行集群命令
       E-MapReduce 场景下设置 spark-submit 的参数。
      --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client --driver-memory 4g --num-executors 2 --executor-memory 2g --executor-cores 2 /opt/apps/spark-1.6.0-bin-hadoop2.6/lib/spark-examples*.jar 10
      --master yarn-cluster --driver-memory 5g --num-executors 15 --executor-memory 4g --executor-cores 4
        spark-submit --master yarn-cluster --num-executors 2 --class com.abel.userCount  /opt/jar/Spark_Amout.jar

    注意事项:
        01.常见错误: Jar包冲突
                java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy
                java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy
               依赖一个jar包往往会下载相互关联的jar包这就是依赖传递
                 :因为阿里云sdk自动依赖了httpclient-4.4.1httpcore-4.4.1跟项目中引入的httpclient其他版本冲突了
                 https://yq.aliyun.com/ask/358
                        <groupId>org.apache.httpcomponents</groupId>
                   <artifactId>httpcore</artifactId>
                    <version>4.4</version>
               </dependency>
               <dependency>
                   <groupId>org.apache.httpcomponents</groupId>
                   <artifactId>httpclient</artifactId>
                   <version>4.4.1</version>
               </dependency>

II.Hive计算步骤
        创建外部表以及命令
        Hive并不会自动关联指定目录的partitions目录,需要手动操作  alter table storage_log add partition(ds=123);  
    -- 创建外部表
             DROP TABLE IF EXISTS lt_da_item_external;
             CREATE EXTERNAL TABLE IF NOT EXISTS lt_da_item_external
             (
             item_id  string,
              item_geohash  string,
              item_category  string
             )
             STORED BY 'com.aliyun.odps.CsvStorageHandler' 
             WITH SERDEPROPERTIES (
              'odps.properties.rolearn'='acs:ram::1**6061588274:role/aliyunodpsdefaultrole'
             ) 
             LOCATION 'oss://oss-cn-shanghai-internal.aliyuncs.com/comp/alidata/item/';

2.基于OSS+MaxCompute构建数据仓库

AliyunODPSDefaultRole
ODPS请求获取访问您云资源的权限
使用
    DataWorks -数据工厂
        包含数据集成-数据开发-数据运算MaxCompute
    01.账号和权限
        准备阿里云账号中的步骤检查账号是否已可用
        Access Key 
    02.项目配置--注意依赖关系
        项目名称
        主账号登录DataWorks管理控制台创建MaxCompute项目
        配置新建项目的基本信息和高级设置
开发工具与环境设置:
    通过 MaxCompute Studio开发-开发者客户端的大数据集成开发环境工具:
    Studio支持 MaxCompute SQL 和Java UDF 以及MapReduce的开发
    Idea 创建MaxCompute项目链接  --项目空间连接管理
        MaxCompute 项目浏览器 (Project Explorer)
        end_point=http://service.odps.aliyun.com/api
    使用Cost SQL估算费用 --阿里云Maxcomputer 内的支持,从OSS中读取数据是否支持?目前版本应该不支持,待确认!

3.基于OSS+DataLake Analytics构建数据仓库

新一代数据仓库- 数据湖     
 Source            NoSQL  RDBMS   OSS 跨多路数据源
 Serverless 分析层 Data Lake Analytics
 结果层
 BI-SaaS
>  CREATE SCHEMA my_test_schema with DBPROPERTIES
>  (LOCATION= 'oss://compt/alidata/item/', 
>  catalog= 'oss') ;
> 
> use my_test_schema
> 
> CREATE EXTERNAL TABLE IF NOT EXISTS item_external
> (
> item_id  string,
>  item_geohash  string,
>  item_category  string
> )
> ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
> LOCATION 'oss://compt/alidata/item/'; 
> 
> show tables;
> 
> desc item_external;
> 
> SELECT * from  item_external limit 100;
> DROP TABLE  IF EXISTS item_external;
> show databases;
> DROP database   my_test_schema;

3.名词注释:

RAM --权限管理机制包括访问控制(Resource Access Management,简称 RAM)
STS --和安全凭证管理(Security Token Service,简称 STS)
MaxCompute计费方式
    按CU预付费:1CU包含的计算资源为4GB内存加上1核CPU
    按量后付费
Bucket - 存储空间(Bucket)
控制地域、访问权限、生命周期
Object - 对象(Object)
对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成
OSS提供标准、低频访问、归档三种存储类型
Standard - Infrequent Access  - Archive
Endpoint:Bucket所在数据中心的访问域名,您需要填写外网Endpoint
AccessKeyId,AccessKeySecret
数据转换过程中思考的问题:
       结构化数据
      半结构化数据:常见的半结构数据有XML和JSON
      非结构化数据:各种文档、图片、视频/音频等都属于非结构化数据
                                一般直接整体进行存储,而且一般存储为二进制的数据格式
      半结构化数据 转化为结构化数据
        1. 常规的转化-健壮-以及易于定位问题和恢复 
        2.其他问题
            数据量的考虑  
            变化维度的考虑
        增加维度-历史数据怎么处理?

4.参考:

单机部署
https://help.aliyun.com/document_detail/57053.html?spm=a2c4g.11186623.6.1187.31a129d8QUKRRK
默认参数设置:
https://helpcdn.aliyun.com/document_detail/42802.html?spm=a2c4g.11186623.4.4.181f1aa1dmbB5j
E-MapReduce SDK 发布说明
 https://www.alibabacloud.com/help/zh/doc-detail/43970.htm?spm=a2c63.p38356.b99.168.33f35afc9NZdfs
MaxCompute常用语句汇总(更新ing) https://yq.aliyun.com/articles/222955?utm_content=m_32180
帮助企业做好MaxCompute大数据平台成本优化的最佳实践 https://yq.aliyun.com/articles/257512?spm=5176.8091938.0.0.uoFG4n
OSS常用工具汇总
https://help.aliyun.com/document_detail/44075.html?spm=a2c4g.11186623.6.1161.64f7779c54ZqFa
https://yq.aliyun.com/ask/58660
MaxCompute Studio
https://help.aliyun.com/document_detail/50855.html?spm=a2c4g.11186623.2.4.3ac36fc2kukxGb

blogroll

social