目前在某公司的数据部门实习,会经常遇到scala, spark, hive, 定时执行,回调, hdfs等名词, 通过一个月的实习,大概清楚了大公司数据部门每个人每天的工作工作流程,仅供小白参考。然后围绕定数任务调度问题详细展开。
感觉数据部门做的最多的还是数据分析以及数据展示工作, 只不过这里的数据分析使用的工具更加高大上了一些,简单的用hive,复杂一点的用scala,然后提交到集群上去跑。恰好在实习这一个月hive和spark都接触了,来谈谈它们的大体流程吧。
先看hive。 首先,在数据工厂里创建自己的作业:创建hive作业, 在编辑作业的过程中,需要填入hive作业的名词, hive执行命令(这个是主体, 也就是查询语句,语法类似与sql),接着是选择运行的集群,队列等等,同时还会让你选择是否回调, 回调的含义是你可以自己定义hive命令的执行时间,然后系统会在自动的在你定义的时间上运行hive命令。这样,每天生成的hdfs上的数据就可以利用回调函数自动生成统计结果, 同时,统计结果还可以利用管理后台将hive生成的结果图形化显示到统计平台上。
复杂一点的数据分析使用scala编写,通常涉及到的是从hdfs中把数据读出来,然后经过一系列的分析操作,然后再写到hdfs中。通常,如果需要从hdfs中读数据,代码是需要放到集群上去跑的。这时,就需要登录服务器,把工程在本地打包, 使用mvn clean package(meavn 工程,需要事先配置到IDE中), 接着,把打包后的文件传到服务器,然后在服务器上跑打包文件中的一个类。
/home/work/infra-client/bin/spark-submit --cluster 集群 --class 对象路径以及名字 --master yarn-cluster --queue 运行队列 --num-executors 32 --driver-memory 6g --executor-memory 6g --executor-cores 1 打的包(以.jar结束)
这样,程序可以从hdfs中读取文件然后将操作结果写入hdfs中,但是这样的运行是手动的,是一次性的,如果,我要每天根据hdfs中更新的数据,利用同样的代码,每天都在固定的时间跑出结果来,这样比较符合一般,而且一般公司也是这么干的。那么liunx中这么自动定时调度任务呢。