lee的个人空间

    关注数据的存储计算及可视化

    假定Qlik + Kylin各自服务正常

    1,Qlik Server安装ODBC驱动

    在Qlik Server所在的机器上安装好,如果QlikServer是集群模式,则需要在每个节点都安装配置上数据源
    配置ODBC数据源:
    打开控制面板,管理工具,ODBC数据源中系统DSN,选择添加,选中Kylin驱动,按照如下格式配置, 点击connect 选择project
    odbc_config

    continue reading…

    一,安装环境准备

     1, hadoop  hive  hbase 已经安装并且运行正常
     2, 在1的基础上,要确保hadoop hive hbase 命令行可用(加入到了当前用户的 Path下) ,kylin是通过command cli方式调用集群的
    二,安装Kylin
    1,下载Kylin最新版 http://kylin.apache.org/download/
    选择合适的版本,因为我的集群版本是cdh5.7.0 需要下载与CDH相匹配的Kylin
    2,解压Kylin到KYLIN_HOME=/data/work/kylin
    3,确保Kylin能直接在shell调用hadoop hbase hive命令行,可以运行bin/check-env.sh 检查环境是否满足Kylin运行的要求
    4,启动kylin  运行bin/kylin.sh start
    5,停止Kylin  运行bin/kylin.sh stop

    Spark集群的资源(CPU&Memory)是有限的,如何充分利用资源计算更多的任务,就必须要理解File 节点数 Executors数 cores tasks的关系

    这里主要解决集群资源的合理使用包括cores executors memory 等

    从一个问题说起,我曾经启动spark-sql cli时经常出现Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

    测试集群配置如下图所示,13个节点,每个节点配置了8-12cores  & 30g memory ,启动了thriftserver占用72cores,此时我启动一个spark-sql cli默认占用6个cores——defaultCores,由于每个节点剩下可用的只有4cores,无法在任何一个节点启动一个Executor,所以就会轮训该日志;如果内存成稀缺资源了,同样会引起该问题,因此怎么配置任务所使用的资源需要根据集群当前的资源分布的。

    spark1

    continue reading…

    1,新建工程
    file–>new project 如下图,然后输入工程名,确定
    idea1

    2,引入spark jar包依赖
    准备好:spark jar包,我集群版本是:spark-assembly-1.6.1-hadoop2.0.0-mr1-cdh4.2.0.jar
    选中工程,快捷键ctrl+shift+alt+s 或者 file–>project structure
    在弹出的对话框左侧选中 Libraries,然后在中间点绿色的+号,选择spark jar所在的位置即可
    continue reading…

    1, collect_set

    将有相同key的值,收集成一个set里,返回array

    比如,返回某台设备 装了哪些App(package_name),一台设备一条记录
    deviceId1    [ App1,App2,App3,App3]
    …….
    …….
    select deviceId,collect_set(package_name) from table group by deviceId

    2, get_json_object &  json_tuple
    get_json_object:从JSON里抽取字段值,如果获取多个字段,需要写多个函数获取,效率较低
    select get_json_object(content,’$.field_key’) from  table_name ;
    json_tuple:可以结合lateral view同时获取多个字段,获取多个字段效率较高
    select a.* from table_name lateral view  json_tuple(jsonstr,’deviceId’,’userId’,’realmId’) a as f1,f2,f3 where dt=’2016-07-01′

    3, regexp_extract
    regexp_extract(str, regexp[, idx])   字符串正则解析函数

    str是被解析的字符串

    regexp 是正则表达式

    idx是返回结果 取表达式的哪一部分  默认值为1。

    0表示把整个正则表达式对应的结果全部返回

    1表示返回正则表达式中第一个() 对应的结果 以此类推

    注意点:

    要注意的是idx的数字不能大于表达式中()的个数。

    select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4′,’x=([0-9]+)([a-z]+)’,0) from default.dual;

    得到的结果为:

    x=18abc

    select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4′,’x=([0-9]+)([a-z]+)’,1) from default.dual;

    得到的结果为:

    18

    select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4′,’x=([0-9]+)([a-z]+)’,2) from default.dual;

    得到的结果为:

    abc


     

    4,Parse_url

    parse_url(url, partToExtract[, key]) 解析URL字符串,partToExtract的选项包含[HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO]。

    【host,path,query,ref,protocol,file,authority,userinfo】

    select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘PROTOCOL’) from dual;   –http
    select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘HOST’) from dual;—facebook.com​
    select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘REF’) from dual;—空​
    select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘PATH’) from dual;—/path/p1.php​
    select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘QUERY’) from dual;—空​
    ​select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘FILE’) from dual;​—/path/p1.php?query=1​
    ​select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘AUTHORITY’) from dual;​—facebook.com​
    ​select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘USERINFO’) from dual;​—空


     

    5,lateral view

    lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
    多个lateral view:
    select a.*,c.*,b.* from lestore_dsp_log_mid lateral view   json_tuple(ad,’placeid’,’cadtype’,’adowner’,’adid’,’pkg’,’apk’,’creativetype’,’price’) a as placeid,cadtype,adowner,adid,pkg,apk,creativetype,price   lateral view json_tuple(dsp,’site_id’,’requestid’,’impressionid’) c as site_id,requestid,impressionid  lateral view json_tuple(device,’mac’,’anid’,’imei’,’imsi’) b as mac,anid,imei,imsi  where dt=’2016-07-14′ and action = ‘click’ ;

    数据平台做一些计算需要通过hive jdbc方式连到hiveserver2执行job,但是hiveserver 正常运行一段时间后,总是会报如下OOM:

    continue reading…

    使用aws的mapreduce前,要先了解三个名词:
    EC2:主机,所有服务运行在上面;分不同类型,计算能力不一样,收费也不一样
    EMR:Aws的mapreduce,可运行hadoop/hive/spark/hue…等大数据框架,优势是几分钟可以搭建好集群,并且节点数可根据实际需要随时调整
    S3:分布式存储系统,在EMR中一般替代hdfs来存储大数据,价格相对更低廉
    aws计费包括计算(Ec2&EMR)、存储(S3)、流量(导出流量,导入暂时不计费)
     
    我处理的数据量还算比较大,每天将近900G的LOG存储于第三方的s3上,需要把每天的LOG借助EMR做ETL后存储到自己的s3
    在这过程中踩过不少的坑,这里总结一下:
     
    1,s3的授权访问问题
    原始LOG都存储在三方的s3上,ETL直接将三方的s3作为输入,需要对方授权访问,问题在与对方开放权限了,通过命令行可以访问(aws s3 ls s3://xxx),但通过external hive table locate到对方s3提示权限问题
    后来aws技术支持答复按下面配置解决
    为了利用角色访问,请将S3 bucket中的Principal不指定为账号下的特定IAM user,而是用root,如下:
          “Principal”: {
           “AWS”: “arn:aws-cn:iam::025053319564:root”
           }

    continue reading…

    CDH5.7.0默认情况下是没有提供spark-sql cli的,我曾尝试用tarball以standalone模式部署过spark集群,都是自带spark-sql命令,于是就想到Copy Tarball里的spark-sql文件到$SPARK_HOME/bin目录下

    cp ./bin/spark-sql /opt/cloudera/parcels/CDH/lib/spark/bin/

    执行./spark-sql,可悲的是报错

    异常提示已经很明显,在网上查了很多资料,千篇一律是要加入hive&hivethriftserver重新编译源码才能支持,对我等不是搞基础架构只要能熟练用好spark的人来说,还没编译源码的习惯,自动就过滤该方法了。

    既然是org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver 类找不到,那就Copy Tarball到底,将与之相关的jar也同样拷贝过来,其实就是spark-assembly-1.6.1-hadoop2.6.0.jar(我下载的是官网spark1.6.1 on hadoop2.6),接着修改spark-sql脚本,将依赖的jar加入进来

    export _SPARK_CMD_USAGE=”Usage: ./bin/spark-sql [options] [cli option]”
    exec “${SPARK_HOME}”/bin/spark-submit –jars /opt/cloudera/parcels/CDH/lib/spark/spark-assembly-1.6.1-hadoop2.6.0.jar –class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver “$@”

    标红的–jars部分是额外增加的

    再执行./spark-sql,  命令行启动起来了,紧接着执行了show tables;   select * from table* ,都没任何问题,大功告成!

    严重说明:本人装的是CDH5.7.0集成的是SPARK1.6.0,Tarball是下载的SPARK1.6.1 on hadoop2.6,其他旧的版本没有测试过。