項目搭建
- github下載源碼
- 使用idea創建maven項目,並創建如下四個模塊
- 複製源碼中的pom.xml,修改你的環境版本號
- 複製mock,commons模塊到你的項目中
common模塊解析
conf
基於文件的配置生成器,會讀取resources下的commerce.properties,並返回所有配置信息
*/
object ConfigurationManager {
// 創建用於初始化配置生成器實例的參數對象
private val params = new Parameters()
// FileBasedConfigurationBuilder:產生一個傳入的類的實例對象
// FileBasedConfiguration:融合FileBased與Configuration的接口
// PropertiesConfiguration:從一個或者多個文件讀取配置的標準配置加載器
// configure():通過params實例初始化配置生成器
// 向FileBasedConfigurationBuilder()中傳入一個標準配置加載器類,生成一個加載器類的實例對象,然後通過params參數對其初始化
private val builder = new FileBasedConfigurationBuilder[FileBasedConfiguration](classOf[PropertiesConfiguration])
.configure(params.properties().setFileName("commerce.properties"))
// 通過getConfiguration獲取配置對象
val config = builder.getConfiguration()
}
Constains
代碼規範的限制
/**
* 項目配置相關的常量
*/
val JDBC_DATASOURCE_SIZE = "jdbc.datasource.size"
val JDBC_URL = "jdbc.url"
val JDBC_USER = "jdbc.user"
val JDBC_PASSWORD = "jdbc.password"
val KAFKA_TOPICS = "kafka.topics"
/**
* Spark作業相關的常量
*/
val SPARK_APP_NAME_SESSION = "UserVisitSessionAnalyzeSpark"
val SPARK_APP_NAME_PAGE = "PageOneStepConvertRateSpark"
/**
* user_visit_action、user_info、product_info表中字段對應的字段名常量
*/
val FIELD_SESSION_ID = "sessionid"
val FIELD_SEARCH_KEYWORDS = "searchKeywords"
val FIELD_CLICK_CATEGORY_IDS = "clickCategoryIds"
val FIELD_AGE = "age"
val FIELD_PROFESSIONAL = "professional"
val FIELD_CITY = "city"
val FIELD_SEX = "sex"
val FIELD_VISIT_LENGTH = "visitLength"
val FIELD_STEP_LENGTH = "stepLength"
val FIELD_START_TIME = "startTime"
val FIELD_CLICK_COUNT = "clickCount"
val FIELD_ORDER_COUNT = "orderCount"
val FIELD_PAY_COUNT = "payCount"
val FIELD_CATEGORY_ID = "categoryid"
model
各個封裝類
/**
* 用戶廣告點擊量
* @author wuyufei
*
*/
case class AdUserClickCount(date:String,
userid:Long,
adid:Long,
clickCount:Long)
/**
* 廣告實時統計
*
*/
case class AdStat(date:String,
province:String,
city:String,
adid:Long,
clickCount:Long)
/**
* 各省top3熱門廣告
Pool
對象連接池的創建,獲取,摧毀
批量操作數據
UTILs
時間,字符串,等工具類
離線數據準備
mock模塊下的MockDataGenerate
- 如果你想用外部hive保存數據,請將hive的配置文件hive-core.xml放到mock模塊的resources目錄下
- 如果你只想用spark自帶hive保存數據,則無需做任何操作
- 如果你想用hadoop保存數據,則改以下代碼:(注意,這裏一個三個表格,所以你需要指定創建三個目錄來放三個表格的數據)
private def insertHive(spark: SparkSession, tableName: String, dataDF: DataFrame): Unit = {
// spark.sql("DROP TABLE IF EXISTS " + tableName)
//dataDF.write.saveAsTable(tableName)
dataDF.write.parquet("hdfs://hadoop1:9000/"+tableName)
}
- 最後,運行main函數,
實時數據準備
你需要到common模塊>resources>commerce.properties
修改kafka.broker.list的相關配置爲你的配置
運行Main函數,就會發送消息