人人都可以,从0到1建立大数据平台

大数据时代这个词被提出已有10年左右了,越来越多的企业已经完成了数字化转型,或在转型中。其普及原因一是因为大数据价值在越来越多的场景中被挖掘,二是因为大数据平台的搭建门槛也越来越低。借助开源的力量,任何有基础研发能力的组织完全可以搭建自己的大数据平台,这里和大家分享0到1搭建方案,以扫盲。

总览

整体大数据平台可以分为存、管、用三部分:
存数据,主要指数据的采集和存储;
管数据,主要指数据仓库内数据模型的搭建和元数据管理;
用数据,主要指使用数据来优化决策是改善用户体验。
我们主要选择Hadoop生态系统为基础,来构建我们的数据平台。

数据流程

如上图所示,从数据源到分析报告或系统应用的过程中,主要包括数据采集同步、数据仓库存储、ETL、统计分析、写入上层DB等环节。这是一条主线,在实际的落地过程中,可能还会有分支的环节出现,比如特征工程。

数据采集

日常的数据来源主要是两块:APP/web访问日志,各业务数据库。这两类数据采集同步到数据仓库的方式有所不同,并且每种数据都分为实时和非实时两种场景。

APP/web访问日志采集

用户访问我们的产品会产生大量的日志,因此我们需要特定的日志采集系统来采集并输送这些日志。Flume是目前常用的开源选择,Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

继续阅读“人人都可以,从0到1建立大数据平台”

用R快速搭建配置web后台

在日常的数据工作中,常会碰到需要上传配置数据的情况,比如字典表、指定特定的用户或商品等。若能快速地做出相应的配置后台,只需在浏览器上就能上传数据,既方便自己,更重要的是还能够开放给需要的业务人员自己去管理。

这里分享一个用R快速搭建配置后台的方式,借助R的shiny包,能方便的做出这个web应用。

这个简单的配置管理后台具有两个模块:
1、查询现有的配置列表
2、上传更新配置列表

OK,下面开始coding。

首先,载入用到的包。这里使用xlsx上传数据,因为对于业务人员来说excel更通用,远端数据库用的是MySQL。这里你完全可以根据自己的需要修改。

library(shiny)
library(xlsx)
library(RMySQL)

接着,进行必要的信息配置。首先,在数据库中新建表,并定义字段,这是用来存储配置数据的。

yourtable <- "tmp_peizhi_test_yueshi"  #此处修改为对应的表名

# 配置数据库连续信息
host <- "xxxx"
user <- "yueshi"
password <- "VcXDBcGEC1aI"
port <- 3305
dbname <- "test"

然后,开始进行shiny的部分,shiny的代码包括ui和server两个主模块。

ui采用navbarPage的布局,分别建立两个tabPanel,对应"现有配置列表"和"上传配置"。为了保证上传的数据符合规范,这里设计提供上传模板,让用户下载模板后,按模板上传数据即可。在成功上传后,会提示上传成功状态,并说明数据位置,同时在右侧展示新上传的配置数据。

继续阅读“用R快速搭建配置web后台”

CNN实战:tensorflow训练mnist手写数字识别

用tensorflow可以轻松的搭建卷积神经网络,layer层api的加入更是方便了整个过程。本文以mnist手写数字识别的训练为例,轻松挑战99%准确率。

准备

首先,导入必要的库和函数。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

载入mnist数据,注意这里input_data.read_data_sets的参数reshape=Fales,以保留3维的图片数据,否则图片会被变换为向量。由于是黑白图片,所以这里的颜色通道数为1。这里image的shape为(None,28,28,1)。

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True, reshape=False)

定义数据流图结构

定义变量。这里我们不需要再定义各层网络的权重和偏差,这便是layers的方便之处,它们会被自动创建。

x = tf.placeholder(tf.float32, shape=(None,28,28,1))
y_ = tf.placeholder(tf.float32, shape=(None,10))
istrain = tf.placeholder(tf.bool) # dropout时参数用到

然后开始定义卷积网络结构,激活函数采用relu,这里使用卷积层⇒池化层⇒卷积层⇒池化层。 继续阅读“CNN实战:tensorflow训练mnist手写数字识别”

在ipython中引入pyspark

除了通过pyspark命令来启动pyspark外,可否在普通的python进程中调用spark呢,这样便能方便配合IDE使用了。findspark包可以实现,过程如下:

1、首先设置SPARK_HOME

如果你不清楚SPARK_HOME位置,可以在pyspark的shell里获取:
启动pyspark

import os
os.environ.get('SPARK_HOME', None)

此时会显示路径,如'/opt/cloudera/parcels/CDH/lib/spark'

在 .bashrc 里添加

export SPARK_HOME='/opt/cloudera/parcels/CDH/lib/spark’
然后重新登入终端,以使更改生效。

2、安装findspark包

pip install findspark

一切就绪。

3、启动ipython

import findspark
findspark.init()

然后你就可以自由调用pyspark的API了,如:

from pyspark.sql import SparkSession

SSH远程访问jupyter notebook

jupyter notebook的一大好处,就是可以通过浏览器进行操作,那远程访问在很多时候自然是非常必要的。配置如下:

首先,在远程端打开jupyter notebook服务:

jupyter notebook


如上图,会显示端口号(这里是8888)和token,token在之后登入时会用到。

接着,在本地终端输入:

ssh username@host_address -N -L localhost:8889:localhost:8888

前面localhost:8889是本地的端口,后面localhost:8888是要映射的远程端口。

最后,你应该可以通过在本地浏览器输入127.0.0.1:8889或者localhost:8889访问jupyter notebook了,用刚刚的token即可登入。