数仓项目中的一些总结

项目总结

1.sqoop 脚本

  1. sqoop import \
  2. –connect jdbc:mysql://192.168.58.201:3306/hive?dontTrackOpenResources=true&defaultFetchSizroot \
  3. –password hive123\
  4. –table song \
  5. –target-dir /user/hive/warehouse/data/song/TO_SONG_INFO_D/ \
  6. –delete-target-dir \
  7. –num-mappers 1 \
  8. –hive-import
    9.–hive-database default
    10.–hive-overwrite
    11.–fields-terminated-by ‘\t’ \ 一定要指定分隔符 或者指定成默认”\001”
    12.–hive-table TO_SONG_INFO_D
    13.e=10000&useCursorFetch=true&useUnicode=yes&characterEncoding=utf8 \
  9. –username

失败的原因:

1.安装sqoop要细心,按照说明一步一步来
2.jdbc连接 windows的mysql 失败
只能换成连接linux-node1的mysql,这样就成功了

================================================

2 sc.readTextFile( “ ”) 当路径是hdfs://mycluster… 不识别 mycluster

不识别mycluster的解决办法,
2.1.是建resource包,粘贴hadoop的4个xml文件,注意文件中hostname,不要写node1…
要写成192.168.58.201的IP信息。另外,resource包要 mark as rescoure file
操作这一步之后,代码中的路径自动会加”hdfs://mycluster/”,如果本地文件的地址,要在本地文件前边加“file:///”即可解决。
2.2.不识别master 有可能是因为namenodeH。那么我读取的时候,可以写成sc.readTestFiel(“hdfs://192.168.58.201:8020/hello.txt”)
2.3. 还有一个解决方案:不需要把4个xml文件粘贴过来。
在window/system32/Drivers/etc/hosts 里面 写上
192.168.58.201 node1 mycluster
192.168.58.202 node2 mycluster
在代码中 写明 hdfs://mycluster 这样就能识别了
以上解决方法 我竟然花了半个晚上

======================================================================

3.数据的流向的思路

1.数据源–> flume --> kafka —> flume —> hdfs —>hive—>再清洗 hivesql或者代码

2.数据源—> sparkscore清洗---->hdfs—>hive---->代码清洗—>mysql报表

3.数据源–> flume --> kafka —> sparkstreaming---->大数据可视化平台

=======================================================

4.数据导入

日志数据源由运维同志定时上传到hdfs,日志数据是增量导入,按天分区;

订单数据源-mysql,申请后公司将开放访问权限,sqoop到我们的集群hive。
订单数据每天这么多你为什么选择全量导入?
解释:是全量导入,还是增量导入,要根据项目的实际应用场景来,比如机器学习的个性化推荐系统,就需要全量数据;每天的订单数据分析,可能就需要增量导入。

维度表,直接在hive中创建即可;或者在mysql中做好表之后,映射到hive中,全量导入,因为不排除维度表中数据会有变化的情况;

===========================================================

5.数据从源头sparkcore读取 sc.textFile( )之后,怎么通过SparkCore清洗保存到hdfs?

读取到数据成为RDD1,通过map(split),filter, 过滤长度不够格的,
多数日志数据是Json 数据或者Json数组
Json数据可以在map算子中 alibaba.fastJson.parse(数据) 得到jsonObject对象,
然后jsonObject.getString(key),把想要的数据拿出来,用\t 拼接成字符串,return 即可

save as hadoopFile()
.saveAsHadoopFile(
// s" h d f s c l i e n t l o g p a t h / a l l c l i e n t t a b l e s / {hdfsclientlogpath}/all_client_tables/ hdfsclientlogpath/allclienttables/{logDate}",
// classOf[String],
// classOf[String],
// classOf[PairRDDMultipleTextOutputFormat]
// )
class PairRDDMultipleTextOutputFormat extends MultipleTextOutputFormat[Any, Any]{}
实现MultipleTextOutputFormat的方法即可

上述方法保证了按天写入hdfs系统

另外一种是flume直接导入hdfs,flume的拦截器中能判断数据是否完整,格式是否正确,分类器可以让不同的数据走不同的channel到kafka,最后flume conf中的配置可以直接按天导入hdfs数据。

sink1

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /origin_data/gmall/log/topic_start/%Y-%m-%d

6.数据从ODS层读取 进一步实现清洗

sparkSession.sql(s"use $hiveDataBase ")
sparkSession.table(“TO_SONG_INFO_D”)
.withColumn(“ALBUM”, udfGetAlbumName(col(“ALBUM”)))
.withColumn(“POST_TIME”,udfGetPostTime(col(“POST_TIME”)))
.withColumn(“SINGER1”, udfGetSingerInfo(col(“SINGER_INFO”),lit(“singer1”),lit(“name”)))
.withColumn(“SINGER1ID”,udfGetSingerInfo(col(“SINGER_INFO”),lit(“singer1”),lit(“id”)))
.withColumn(“SINGER2”, udfGetSingerInfo(col(“SINGER_INFO”),lit(“singer2”),lit(“name”)))
.withColumn(“SINGER2ID”,udfGetSingerInfo(col(“SINGER_INFO”),lit(“singer2”),lit(“id”)))
.withColumn(“AUTH_CO”, udfGetAuthCompany(col(“AUTH_CO”)))
.withColumn(“PRDCT_TYPE”,udfGetPrdctType(col(“PRDCT_TYPE”)))
.createTempView(“TO_SONG_INFO_D”)
withColumn作用是:覆盖之前的值。 字段值通过UDF进行改造了。

将数据保存到hive中去
sparkSession.sql("""""").write.format(“Hive”).mode(SaveMode.Overwrite).saveAsTable(“TW_SONG_BASEINFO_D”)

====================================================================

7.安装azkaban时激活exec 出现闪退,无法启动的问题

问题:识别了java 1.7 没有识别1.8
解决方法:
export JAVA_HOME=/usr/local/java1.8.0_181
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
把path写到后面好了 ./ etc/profile。

另外,properties文件 配置内容的时候,千万不要粘贴,不要有空格

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值