大数据总结

Hadoop 学习

1.hvie 不是一个完整的数据库,其中最大的限制是hive不支持记录级别的更新,插入,删除。但是用户可以通过查询生成新表或者将查询结果导入到文件中

PYTHON学习

  1. 可以把模块想像成导入到python以增强其功能的扩展。需要使用命令import来导入块。
    例子:>>>import math >>>math.floor(23.6)

  2. python idle 的打开方式
    假定你的python装在C盘,那就去C:\Python27下面搜索一个叫 idle.bat 的文件比如C:\Python27\Lib\idlelib\idle.bat

  3. python 转义字符为“\”
    el:>>>’let\’s go’

  4. raw_input和input区别
    raw_input 会把所有输入当原始输入
    input是假设用户输入的是合法python表达式
    区别:
    尽量使用raw_input

  5. 原始字符串 以r开头
    el:print‘hello \nworld’输出: hello 隔行 world
    el:printr‘hello \nworld’输出 hello \nworld

第二章 列表和元组

  1. 序列是python的一种数据结构。序列中每一个元素都被分配一个序号——即元素的位置,也称为索引。
  2. Python包含6种内建序列,包括列表、元组、字符串、unicode字符串、buffer对象和xrange对象。列表和元组的主要区别在于列表可以修改,元组不能修改。通常情况下列表可以取代元组。列表的元素通过逗号分隔。
  3. 序列相加也就是序列的连接操作,两种相同类型的序列才可以进行连接。
  4. 序列的乘法是对原始序列进行重复n次。
  5. 成员资格函数 in 实例: ‘a’ in ‘afd’ 返回为布尔值true
  6. List函数显示序列所有成员 实例:list(‘hello’) 返回[‘h’, ‘e’, ‘l’, ‘l’, ‘o’]
  7. 删除序列元素del
    实例: b=[1,2,3] ;执行del b2结果b=[1,2];

PYTHON PIP是什么?
pip是一个安装和管理 Python 包的工具 ,是easy_install的替代品

  1. python:open/文件操作
    open/文件操作 f=open(’/tmp/hello’,‘w’)
    #open(路径+文件名,读写模式)
    #读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式如:‘rb’,‘wb’,'r+b’等等
    读写模式的类型有:
    rU或Ua以读方式打开, 同时提供通用换行符支持 (PEP 278)
    w 以写方式打开,
    a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
    r+ 以读写模式打开
    w+ 以读写模式打开 (参见 w )
    a+ 以读写模式打开 (参见 a )
    rb以二进制读模式打开
    wb以二进制写模式打开 (参见 w )
    ab 以二进制追加模式打开 (参见 a )
    rb+ 以二进制读写模式打开 (参见 r+ )
    wb+ 以二进制读写模式打开 (参见 w+ )
    ab+ 以二进制读写模式打开 (参见 a+ )

注意:

1、使用’W’,文件若存在,首先要清空,然后(重新)创建,
2、使用’a’模式,把所有要写入文件的数据都追加到文件的末尾,即使你使用了seek()指向文件的其他地方,如果文件不存在,将自动被创建。
f.read([size]) size未指定则返回整个文件,如果文件大小>2倍内存则有问题.f.read()读到文件尾时返回""(空字串)
file.readline() 返回一行
file.readline([size]) 返回包含size行的列表,size 未指定则返回全部行
for line in f: print line #通过迭代器访问
f.write(“hello\n”) #如果要写入字符串以外的数据,先将他转换为字符串.
f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).
f.seek(偏移量,[起始位置])
用来移动文件指针
偏移量:单位:比特,可正可负
起始位置:0-文件头,默认值;1-当前位置;2-文件尾
f.close() 关闭文件

  1. python is、 id 、== 的差别,cmp方法
     Id()函数可以获得对象的内存地址,如果两个对象的内存地址是一样的,那么这两个对象肯定是一个对象。和is是等价的
     python解释器在对值很小的int和很短的字符串的时候做了一点小优化,只分配了一个对象,让它们id一样了。
     is :比对2个变量的对象引用(对象在内存中的地址,即id() 获得的值)是否相同。如果相同则返回True,否则返回False。换句话说,就是比对2个变量的对象引用是否指向同一个对象。
     ==:比对2个变量指向的对象的内容是否相同
     cmp函数的用法,原型为cmp(x, y),作用是比较两个对象x,y,如果x大于y返回正数,相等则返回0,否则返回负数

  2. range()函数
    range函数工作方式类似于分片。它包含下限,不包含上限。如range(0,10)的区间为[0,10)

  3. python中的深拷贝(deepcopy)和浅拷贝(copy)介绍
     利用切片操作和工厂方法list方法拷贝就叫浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。
     利用copy中的deepcopy方法进行拷贝就叫做深拷贝,外围和内部元素都进行了拷贝对象本身,而不是引用。

  4. Python split()方法
    描述
    Python split()通过指定分隔符对字符串进行切片,如果参数num有指定值,则仅分隔num个子字符串
    split()方法语法:
    str.split(str="", num=string.count(str)).
    参数
    str – 分隔符,默认为空格。
    num – 分割次数。
    返回值
    返回分割后的字符串列表。
    实例:

str=“abc 123 456”
print str
abc 123 456

print str.split(’ ')
[‘abc’, ‘123’, ‘456’]

print str.split(’ ',1)
[‘abc’, ‘123 456’]

print str.split(’ ',0)
[‘abc 123 456’]

  1. python os.path模块
    os.path.abspath(path) #返回绝对路径
    os.path.basename(path) #返回文件名
    os.path.commonprefix(list) #返回list(多个路径)中,所有path共有的最长的路径。
    os.path.dirname(path) #返回文件路径
    os.path.exists(path) #路径存在则返回True,路径损坏返回False
    os.path.lexists #路径存在则返回True,路径损坏也返回True
    os.path.expanduser(path) #把path中包含的""和"user"转换成用户目录
    os.path.expandvars(path) #根据环境变量的值替换path中包含的” n a m e ” 和 ” name”和” name{name}”
    os.path.getatime(path) #返回最后一次进入此path的时间。
    os.path.getmtime(path) #返回在此path下最后一次修改的时间。
    os.path.getctime(path) #返回path的大小
    os.path.getsize(path) #返回文件大小,如果文件不存在就返回错误
    os.path.isabs(path) #判断是否为绝对路径
    os.path.isfile(path) #判断路径是否为文件
    os.path.isdir(path) #判断路径是否为目录
    os.path.islink(path) #判断路径是否为链接
    os.path.ismount(path) #判断路径是否为挂载点()
    os.path.join(path1[, path2[, …]]) #把目录和文件名合成一个路径
    os.path.normcase(path) #转换path的大小写和斜杠
    os.path.normpath(path) #规范path字符串形式
    os.path.realpath(path) #返回path的真实路径
    os.path.relpath(path[, start]) #从start开始计算相对路径
    os.path.samefile(path1, path2) #判断目录或文件是否相同
    os.path.sameopenfile(fp1, fp2) #判断fp1和fp2是否指向同一文件
    os.path.samestat(stat1, stat2) #判断stat tuple stat1和stat2是否指向同一个文件
    os.path.split(path) #把路径分割成dirname和basename,返回一个元组
    os.path.splitdrive(path) #一般用在windows下,返回驱动器名和路径组成的元组
    os.path.splitext(path) #分割路径,返回路径名和文件扩展名的元组
    os.path.splitunc(path) #把路径分割为加载点与文件
    os.path.walk(path, visit, arg) #遍历path,进入每个目录都调用visit函数,visit函数必须有
  2. Python 多进程并发操作
    样例:
    from multiprocessing import Pool
    from time import sleep
    def f(x):
    fori in range(5):
    print '%s — %s ’ % (i, x)
    sleep(3)
    def main():
    pool = Pool(processes=5) # set the processes max number 3
    fori in range(100,105):
    result = pool.apply_async(f, (i,))
    pool.close()
    pool.join()
    ifresult.successful():
    print ‘successful’
    if name == “main”:
    main()
    输出:
    0 — 100
    0 — 101
    0 — 102
    0 — 103
    0 — 104
    1 — 100
    1 — 101
    1 — 102
    1 — 104
    1 — 103
    2 — 100
    2 — 101
    2 — 104
    2 — 103
    2 — 102
    3 — 100
    3 — 101
    3 — 104
    3 — 103
    3 — 102
    4 — 100
    4 — 101
    4 — 104
    4 — 102
    4 — 103

说明:先创建容量为5的进程池,然后将f(i)依次传递给它,运行脚本后利用ps aux | grep pool.py查看进程情
况,会发现最多只会有三个进程执行。pool.apply_async()用来向进程池提交目标请求,pool.join()是用来等待进程池中的worker进程执行完毕,防止主进程在worker进程结束前结束。但必pool.join()必须使用在pool.close()或者pool.terminate()之后。其中close()跟terminate()的区别在于close()会等待池中的worker进程执行结束再关闭pool,而terminate()则是直接关闭。result.successful()表示整个调用执行的状态,如果还有worker没有执行完,则会抛出AssertionError异常。

apply_async(func[, args[, kwds[, callback]]])函数
主进程循环运行过程中不等待apply_async的返回结果,在主进程结束后,即使子进程还未返回整个程序也会就退出。

  1. pandas
    Pandas是一个开源的Python数据分析库。Pandas把结构化数据分为了三类:
    • Series,1维序列,可视作为没有column名的、只有一个column的DataFrame;
    • DataFrame,同Spark SQL中的DataFrame一样,其概念来自于R语言,为多column并schema化的2维结构化数据,可视作为Series的容器(container);
    • Panel,为3维的结构化数据,可视作为DataFrame的容器;
    DataFrame较为常见,因此本文主要讨论内容将为DataFrame。DataFrame的生成可通过读取纯文本、Json等数据来生成,亦可以通过Python对象来生成:

常见错误
1.1"SyntaxError: Non-ASCII character ‘/xe6’
调试,查看由于第一行代码都是中文的注释,中文会出现乱码。经过查阅,找到解决方法,即在代码开始的第一行添加如下一条语句:

This Python file uses the following encoding: utf-8

  1. date_range()
    在pandas中有一个非常常用的函数date_range,尤其是在处理时间序列数据时,这个函数的作用就是产生一个DatetimeIndex,就是时间序列数据的索引。这个函数的使用方式就是如下所示:
    函数原型
    pandas.date_range(start=None, end=None, periods=None, freq=’D’, tz=None, normalize=False, name=None, closed=None, **kwargs)
    参数
    • start:string或datetime-like,默认值是None,表示日期的起点。
    • end:string或datetime-like,默认值是None,表示日期的终点。
    • periods:integer或None,默认值是None,表示你要从这个函数产生多少个日期索引值;如果是None的话,那么start和end必须不能为None。
    • freq:string或DateOffset,默认值是’D’,表示以自然日为单位,这个参数用来指定计时单位,比如’5H’表示每隔5个小时计算一次。
    • tz:string或None,表示时区,例如:’Asia/Hong_Kong’。
    • normalize:bool,默认值为False,如果为True的话,那么在产生时间索引值之前会先把start和end都转化为当日的午夜0点。
    • name:str,默认值为None,给返回的时间索引指定一个名字。
    • closed:string或者None,默认值为None,表示start和end这个区间端点是否包含在区间内,可以有三个值,’left’表示左闭右开区间,’right’表示左开右闭区间,None表示两边都是闭区间。
    返回值
    DatetimeIndex

  2. numpy.random.randn()
    numpy中有一些常用的用来产生随机数的函数,randn就是其中一个,randn函数位于numpy.random中,函数原型如下:

  3. DataFrame
    DataFrame翻译为数据框,是一种数据组织方式,这么说你可能无法从感性上认识它,举个例子,你大概用过Excel,而它也是一种数据组织和呈现的方式,简单说就是表格,而在在pandas中用DataFrame组织数据,如果你不print DataFrame,你看不到这些数据

  4. Windows环境下安装PyMySQL(已安装Anaconda)
    我的Anaconda安装目录为c:\Anaconda2
    1.cmd进入到C:\Anaconda2\Scripts
    2.执行pip install PyMySQL
    截图:

  5. Python split()方法

    数据挖掘与R语言

  6. 数据挖掘基础
    1.1数据挖掘基本任务
    数据挖掘基本任务包括用分类与预测、聚类分析、关联规则、时序模式、偏差检测、智能推荐等,帮企业提取数据中蕴含的价值
    1.2数据挖掘建模过程

  7. R语言简介

  8. 数据探索
    3.1数据质量分析
    数据质量分析是数据挖掘中数据准备过程的重要一环,数据质量分析的主要任务是检查原始数据中是否存在脏数据。脏数据包括:
     缺失值
     异常值
     不一致的值
     重复数据或含义特殊符号(如#、KaTeX parse error: Unexpected character: '' at position 17: …*等) 脏数据内容 处理方式 ̲ 缺失值 1.删除缺失值记录…、*等)

重要概念
标准差
也被称为标准偏差,或者实验标准差,公式为
标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值。

方差
设X是一个随机变量,若 存在,则称
为X的方差,记为D(X),Var(X)或DX,其中E(X)指的是对X的预期值,而X是实际值1 。即 称为方差,而 称为标准差(或均方差)。它与X有相同的量纲。标准差是用来衡量一组数据的离散程度的统计量2 。
方差刻画了随机变量的取值对于其数学期望的离散程度。(标准差、方差越大,离散程度越大。否则,反之)
若X的取值比较集中,则方差D(X)较小,若X的取值比较分散,则方差D(X)较大。
因此,D(X)是刻画X取值分散程度的一个量,它是衡量取值分散程度的一个尺度。
变异系数
当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大,或者数据量纲的不同,直接使用标准差来进行比较不合适,此时就应当消除测量尺度和量纲的影响,而变异系数可以做到这一点,他是原始数据标准差与原始数据平均数的比。CV没有量纲,这样就可以进行客观比较了。事实上,可以认为变异系数和极差、标准差和方差一样,都是反映数据离散程度的绝对值。其数据大小不仅受变量值离散程度的影响,而且还受变量值平均水平大小的影响。
变异系数 C•V =(标准偏差 SD / 平均值Mean )× 100%

协方差
协方差分析是建立在方差分析和回归分析基础之上的一种统计分析方法。方差分析是从质量因子的角度探讨因素不同水平对实验指标影响的差异。一般说来,质量因子是可以人为控制的。回归分析是从数量因子的角度出发,通过建立回归方程来研究实验指标与一个(或几个)因子之间的数量关系。但大多数情况下,数量因子是不可以人为加以控制的。
协方差用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为:

从直观上来看,协方差表示的是两个变量总体误差的期望。

随机变量
随机变量(random variable)表示随机试验各种结果的实值单值函数。例如某一时间内公共汽车站等车乘客人数,电话交换台在一定时间内收到的呼叫次数等等,都是随机变量的实例。
数学期望
离散型随机变量的一切可能的取值xi与对应的概率pi乘积之和称为该离散型随机变量的数学期望1 (设级数绝对收敛),记为E(x)。
离散程度
所谓离散程度(Measures of Dispersion),即观测变量各个取值之间的差异程度。它是用以衡量风险大小的指标。可用来测度观测变量值之间差异程度的指标有很多,在统计分析推断中最常用的主要有极差、平均差和标准差等几种。
中位数
将一组观察值从小到大按顺序排列,位于中间的那个数据。如果观察值个数为n,当n为奇数和为偶数时,中位数为:

N为偶数时,

分位数

众数
指的是数据集中出现最频繁的数

相关系数
相关关系是一种非确定性的关系,相关系数是研究变量之间线性相关程度的量。

3.2数据特征分析
3.2.1数据分布分析
 定量数据分布分析
步骤:

  1. 就极差(最大值-最小值)
  2. 确定组数和组距
  3. 决定分点
  4. 列出频率分布表
  5. 绘制频率分布直方图

 定性数据分布分析
采用扇形图计算各类数据占比

3.2.2对比分析
适合指标间的纵向和横向对比、时间序列的比较分析,关键点在指标间的可比性和对比标准。
3.2.3周期性分析(时间序列)
3.2.4贡献度分析(2/8定律)
3.2.5相关性分析
分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来的过程称为相关分析。主要方法:

  1. 直接绘制散点图 (适合判定两个变量间的线性相关性)

  2. 散点图矩阵(多个指标间的线性相关性)

  3. 相关系数
    相关关系是一种非确定性的关系,相关系数是研究变量之间线性相关程度的量。

  4. 数据预处理
    在数据挖掘过程中,数据预处理工作量占整个过程60%。
    4.3数据变换
    4.3.2数据规范化
    通过将属性值按比例缩放,使之落入一个小的特定区间,如0.0~1.0,对属性规范化。对于涉及神经网络或距离度量的分类算法(如最近邻分类)和聚类,规范化特别有用。对于基于距离的方法,规范化可以帮助防止具有较大初始值域的属性(如income)与具有较小初始值域的属性(如二元属性)相比权重过大。有许多数据规范化的方法,最小-最大规范化、z-score规范化和按小数定标规范化。
    最小-最大规范化:

z-score规范化

4.3.2连续属性散列化
目的:
离散化方法:

  1. 等宽法
  2. 等频法
  3. 聚类

4.4数据规约
数据规约的意义:
 降低无效、错误数据对建模影响
 降低存储数据成本
 通过产生更小但保持原数据完整性的新数据集,提高分析和挖掘效率
4.4.1属性规约
通过属性合并来创建新属性维数,或者直接通过删除不相关的属性来减少数据维数,从而提高数据挖掘效率。
方法:
 合并属性
 逐步向前选择
 逐步向后删除
 决策树归纳
 主成分分析
4.4.2数值规约
通过选择替代的,较小的数据来减少数据量,包括有参数方法和无参数方法类。有参数方法是使用一个模型来评估数据,秩序存放参数,不需存放实际数据,如回归(线性回归和多元回归)。无参数方法就需要存放实际数据,如直方图、聚类、抽样。

  1. 挖掘建模
    常用的模型:分类与预测、聚类分析、关联规则、时序模式、偏差检测
    5.1分类与预测
    分类和预测是预测问题的两种主要类型,分类主要是预测分类标号(离散标号)而预测主要是建立连续值函数模型。预测给定自变量对应的应变量的值。
    5.1.1实现过程
  1. 分类
    分类是构造一个分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别。
    分类算法分两步:1.学习步,通过归纳分析训练样本集来建立分类模型得到分类规则;2.分类步,先用已知的测试样本集评估分类规则的准确率,如果标准率是可以接受的,则使用该模型对样本集进行预测。
  2. 预测
    预测是建立两种或两种以上变量间相互依赖的函数模型,然后进行预测或控制。
    预测模型实现也有两步,1.通过训练集建立预测属性(数值型)函数模型;2.模型通过校验后进行预测和控制
    5.1.2分类与预测算法
    分类与预测算法:回归分析(线性回归、非线性回归、主成分回归)、决策树、神经网络
    5.1.3回归分析
    回归分析是通过建立模型来研究变量之间相互关系的密切程度、结构状态以及进行模型预测的一种有效工具,在工商管理、经济、社会、医学和生物领域运用广泛。
    5.1.4决策树
    决策树方法在分类、预测、规则提取等领域应用广泛。
    ID3算法简介及基本原理
    ID3算法基于信息熵来选择最佳测试属性。它选择当前样本集中具有最大信息增益值的属性作为测试属性;样本集的划分则依据测试属性的取值进行,测试属性有多少不同的取值就将样本集划分为多少子样本集。
    ID3算法具体流程
  3. 对当前样本集合,计算所有属性的信息增益
  4. 选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划为同一个子样本集;
  5. 若子样本集的类别属性只含有单个属性,则分支为叶子节点,判断其属性值并标上响应的符号,然后返回调用处;否则对子样本集递归调用本算法。

    Scala编程
    Scala入门初探
    Scala代码块每行都缩进两个空格,是推荐的缩进风格。

函数式语言的主要特征之一就是,函数是头等结构。

函数字面量语法:

  1. Scala入门再探
    3.2列表
    列表元素不可变
    列表类List中定义了”:::”方法实现列表叠加功能。
    List定义了”::”,发音为”cons”,它可以把新元素组合到现有列表最前端,
    Nil是空列表
    为什么列表不支持添加(append)操作?
    List类没有提供append操作,因为随着列表变长,append耗时将呈线性增长。而使用“::”作前缀则仅仅耗用固定时间
    3.3元组
    元组也是很有用的容器对象,元组元素不可变;但与列表不同,元组可以包含不同类型的元素。

  2. Scala类和对象
    4.1类、字段和方法
    修饰符:在sacla里吧成员公开的方法是不显示地指定任何访问修饰符。
    方法参数:传递给方法的任何参数都可以在方法内部使用,但是参数不能被重新赋值

Linux学习

  1. 定时任务文件编辑
    文件路径 :vim /etc/crontab
  2. vmstat模式输出
    vmstat的输出分为以下几种模式:
    (1)、VM MODE (普通选项)
    (2)、DISK MODE(-d选项)
    (3)、DISK PARTITION MODE(-p选项)
    (4)、SLAB MODE (-m选项)

(1)、VM MODE

Procs
r: The number of processes waiting for run time.(等待运行的进程数)
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b: The number of processes in uninterruptible sleep.(不中断进程数)
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
Memory
swpd: the amount of virtual memory used.(使用的虚拟内存数)
swpd切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free: the amount of idle memory.(空闲内存)
free 当前的空闲页面列表中内存数量(k表示)
buff: the amount of memory used as buffers.(用作buffer的内存数量)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: the amount of memory used as cache.(用作cache的内存数量)
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
inact: the amount of inactive memory. (-a option)(非活动内存)
active: the amount of active memory. (-a option)(活动中的内存)
Swap
si: Amount of memory swapped in from disk (/s).(从硬盘中导进内存的swap数量,单位:KB/秒)
so: Amount of memory swapped to disk (/s).(导入硬盘的swap数量,单位:KB/秒)
IO
bi: Blocks received from a block device (blocks/s).(来自块设备的块数,单位:块/秒)
bo: Blocks sent to a block device (blocks/s).(发往块设备的块数,单位:块/秒)
System
in: The number of interrupts per second, including the clock.(每秒中断数)
cs: The number of context switches per second.(每秒上下文切换数)

  1. cs列表示每秒产生的上下文切换次数,如当cs比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
    CPU
    These are percentages of total CPU time.(占总CPU时间的百分比)
    us: Time spent running non-kernel code. (user time, including nice time)(用户态占用CPU百分比)
    us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
    sy: Time spent running kernel code. (system time)(内核态占用CPU百分比)
    sy列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。
    id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.(空闲CPU百分比)
    wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.(IO等待占CPU百分比)
    wa列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽
  2. 防火墙
     查询防火墙是否关闭
    serviceiptables status

 关闭防火墙

  1. vi /etc/selinux/config

  2. 设置SELINUXTYPE=(targeted,disabled)

  3. setenforce 0生效
     点2下ctrl切换显示手动触摸显示屏

  4. 清空文件内容
    echo “”>dypwRraw7.log

  5. Ubuntu进入命令行
    Ctrl + Alt + T

  6. 永久修改主机名
    Vi /etc/hostname

  7. 安装vim

sudo apt-get install vim

  1. 查看当前文件目录下子目录大小
    du -ah --max-depth=1
    a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度。

  2. 查看文件夹下的文件个数(当前目录的文件数)
    ls -l |grep “^-”|wc -l

  3. 给用户配置sudo权限
    运行visudo命令

  4. 配置虚拟机网桥连接

安装完VirtualBox设定网路时选择默认的NAT模式,Guest就可顺利联网了,但是这种方式比较死板,要作更有弹性的变化,应该采用桥接模式(Bridged),这里的桥接模式就如同VMware中的Bridged模式,Host与Guest在局域网(LAN)中的地位是相等的。

  1. 在基于Debian和 Ubuntu 的系统上,首先要安装含有建立虚拟网络设备 ( TAP interfaces ) 的工具uml-utilities 和桥接工具 bridge-utils:

sudo apt-get install uml-utilities

sudo apt-get install bridge-utils

2.为了使你的虚拟机能够访问网络接口,你必须将运行虚拟主机的用户的用户名(通常是你的ubuntu登录用户名)添加到uml-net用户组(请用你的用户名替换其中的“vboxuser”):

sudogpasswd -a vboxuseruml-net

注意:为了使改动生效,请重新启动你的电脑。

  1. 向你的Debian或者ubuntu操作系统描述你要添加的虚拟网络设备,编辑 /etc/network/interfaces:

sudo vim /etc/network/interfaces

  1. 首次使用需要激活刚才建立的虚拟网络接口和网络桥:

sudo /sbin/ifup tap0

sudo /sbin/ifup br0

这个步骤只需要做一次,下次主机重新启动时,这个接口和桥将自动激活。

4.因为需要用桥接,所以要删除掉原来的network-manager

sudo apt-get remove network-manager
5.配置/etc/network/interfaces文件
sudo vim /etc/network/interfaces,/etc/network/interfaces配置信息如下
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 172.16.4.177
network 172.16.4.0
netmask 255.255.0.0
broadcast 172.16.1.255
gateway 172.16.1.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

5.将interfaces文件修改如上IP为主机上外网的IP
然后sudo /etc/init.d/networking restart

dhclient
sudo ip addr flus dev eth0 清空etho
修改/etc/network/interfaces文件
将br0中broadcast 注销
设置bro新的 ip
重新启动虚拟机
———————————————————————————————————————
12. 主机和虚拟机之间设置共享文件
sudo mount -t vboxsf software /mnt/softwares ,其中 software是在虚拟机配的共享文件夹名称,/mnt/softwares 是虚拟机内部配置的共享路径
13. 设置dns
sudo vim /etc/resolv.conf
在resolv.conf 文件中配置nameserver 114.114.114.114

解决resolv.conf被重写问题
你虽然配置了DNS,但是每次重启虚拟机或重启网络后/etc/resolv.conf文件就会被重写,也就是又恢复原样了,你以前的配置就不存在了,每次都要手动配置是极不可取的,所以这步是必须的,首先我们要搞清楚resolv.conf被重写的原因和机制,这在不同Ubuntu版本下有所差异。那怎么知道呢?一般resolv.conf文件一开头就告诉你了。
解决该问题其实有两种办法,不怕麻烦的想理解原理的请参照方法一(与版本有关),怕麻烦的不想折腾的自觉转到方法二(与版本无关)。
方法一:与版本有关
a)Ubuntu 12.10
打开/etc/resolv.conf后可看到开头的一句话:
复制代码
代码如下:

Generated by NetworkManager

说明resolv.conf这个文件是由NetworkManager这个程序生成的(对应的是network-manager服务),那么解决办法也就来了:我们关掉network-manager即可,命令如下:
复制代码
代码如下:
sudo service network-manager stop
或者
sudo /etc/init.d/network-manager stop

但是这种方法不是一劳永逸的,因为每次重启系统后还是会自动启动这个服务,因此我们需要完全禁止network-manager启动即可。
编辑network manager的配置文件/etc/init/network-manager.conf:
复制代码
代码如下:
sudo vi /etc/init/network-manager.conf

注释掉其中的start on部分即可:
复制代码
代码如下:

network-manager - network connection manager

The Network Manager daemon manages the system’s network connections,

automatically switching between the best available.< p>description “network connection manager”< p>#start on (local-filesystems

and started dbus

and static-network-up)

stop on stopping dbus

< p>expect fork
respawn< p>script

set $LANG so that messages appearing on the GUI will be translated. See LP: 875017

if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE LC_MESSAGES LC_ALL
fi
b)Ubuntu 13.04
不知道Ubuntu从哪个版本开始不是由NetworkManager生成resolv.conf的了,至少在13.04下是这样的,因为resolv.conf开头写着这样一句话:
复制代码
代码如下:

Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)

DO NOT EDIT THIS FILE BY HAND – YOUR CHANGES WILL BE OVERWRITTEN

说是由resolvconf生成,NetworkManager仍然存在,因为它是DHCP上网不可缺少的,但此时禁止NetworkManager启动已经不管用了,因为resolv.conf已经不归它管了,我们试着看看resolv.conf与resolvconf有啥关系,查看:
复制代码
代码如下:
hadoop@Master:~$ ll /etc/resolv.conf
lrwxrwxrwx 1 root root 29 9月 11 2013 /etc/resolv.conf -> …/run/resolvconf/resolv.conf
说明/etc/resolv.conf 其实只是一个link,它实际上指向的是 /run/resolvconf/resolv.conf,这也就解释了为什么每次重启都会被重写的原因,你改的只是个link,对原文件没有影响,而每次重启这个link还得加载原文件的内容,所以对link的修改无效。
解决方法就是:修改真实的原文件,如下:
复制代码
代码如下:
sudo vi /etc/resolvconf/resolv.conf.d/head

发现这个文件与/etc/resolv.conf文件一模一样,这就对了,在里面加入你自己的nameserver即可,这样每次重启就不会被重写了。
PS:网上也有人说修改/etc/resolvconf/resolv.conf.d/base这个文件也行,我没有亲自测试,感兴趣的可用自己测试。
14. WIN7通过ssh无法连接虚拟机
在win7下通过ssh连接虚拟机的ubuntu,连接失败,提示信息见下图:

ssh : connect to host localhost port 22: Connection refused,原来没有装sshd,也就是openssh-server。
输入命令: sudo apt-get install openssh-server

  1. Ubuntu14.04 64位 安装JDK1.7
    在Ubuntu14.04 64位 安装JDK1.7过程笔记。
    1 新建文件夹
    linuxidc@linuxidc:~$ sudo mkdir /usr/lib/jvm
    2 解压文件
    linuxidc@linuxidc:~$ sudo tar zxvf jdk-7u71-linux-x64.tar.gz -C /usr/lib/jvm
    3 打开设置环境变量文件
    linuxidc@linuxidc:~$ sudo gedit /etc/profile
    [sudo] password for linuxidc:
    (gedit:6266): IBUS-WARNING **: The owner of /home/linuxidc/.config/ibus/bus is not root!
    (gedit:6266): Gtk-WARNING **: Calling Inhibit failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any .service files
    (gedit:6266): Gtk-WARNING **: Calling Inhibit failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any .service files
    4 设置环境变量
    #set java environment
    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_71
    export JRE_HOME= J A V A H O M E / j r e e x p o r t C L A S S P A T H = . : {JAVA_HOME}/jre export CLASSPATH=.: JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib: J R E H O M E / l i b e x p o r t P A T H = {JRE_HOME}/lib export PATH= JREHOME/libexportPATH={JAVA_HOME}/bin: P A T H 5 设 置 默 认 的 J D K l i n u x i d c @ l i n u x i d c :   PATH 5 设置默认的JDK linuxidc@linuxidc:~ PATH5JDKlinuxidc@linuxidc:  sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_71/bin/java 300
    update-alternatives: using /usr/lib/jvm/jdk1.7.0_71/bin/java to provide /usr/bin/java (java) in 自动模式
    linuxidc@linuxidc-ThinkPad-Edge-E545:~$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_71/bin/javac 300
    update-alternatives: using /usr/lib/jvm/jdk1.7.0_71/bin/javac to provide /usr/bin/javac (javac) in 自动模式
    6 检测安装JDK是否成功
    (1)java -version

  2. 关闭ubuntu的防火墙
    安装防火墙:sudo apt-get install ufw
    关闭防火墙:ufw disable 开启防火墙 ufw enable 防火墙状态: ufw status

  3. 执行ssh服务无响应
    执行ssh服务命令 ssh slave 一直无响应,需要执行如下命令,需要将ssh服务重新启动
    sudo /etc/init.d/ssh restart

  4. Linux下设置和查看环境变量
    Linux的变量种类
    按变量的生存周期来划分,Linux变量可分为两类:
    1 永久的:需要修改配置文件,变量永久生效。
    2 临时的:使用export命令声明即可,变量在关闭shell时失效。
    设置变量的三种方法
    1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】
    用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
    例如:编辑/etc/profile文件,添加CLASSPATH变量

vi /etc/profile

export CLASSPATH=./JAVA_HOME/lib;KaTeX parse error: Expected 'EOF', got '#' at position 36: …修改文件后要想马上生效还要运行#̲ source /etc/pr… source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,
该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,
shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
环境变量的查看
1 使用echo命令查看单个环境变量。例如:
echo KaTeX parse error: Expected 'EOF', got '#' at position 246: …基本提示符,对于root用户是#̲,对于普通用户是

MYSQL学习

  1. Linux 下查看mysql是否已经安装
    rpm -qa | grep -imysql
  2. 查看mysql状态
    /etc/rc.d/init.d/mysql status或service mysql status

提示: 则为未运行

service mysql start 启动mysql
service mysq status 查看mysql状态
service mysql stop 停止mysql
3. 安装mysql

  1. sudo apt-get install mysql-server

  2. sudo apt-get install mysql-client

  3. sudo apt-get install libmysqlclient-dev

  4. mysql默认安装目录
    mysql默认安装目录:/var/lib/mysql/

  5. 设置Mysql允许远程链接登陆
    授权法:

  6. Root用户登陆mysql数据库Use msyql

  7. 执行命令
    GRANT ALL PRIVILEGES ON . TO ‘myuser’@’%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

  8. 重启数据库

  9. 查看Mysql版本方法

  10. 登陆客户mysql服务端执行mysql–V

  11. 连接mysql执行select version()

  12. 查看Mysql死锁及解除
    Showprocesslist kill id

  13. 查看Mysql权限
    SHOW GRANTS FOR ‘webuser’@‘192.168.100.%’

  14. 查看Mysql服务端口
    进入msql cmd
    show global variables like ‘port’;

  15. 虚拟机Ubuntu下Mysql外网访问注意事项
    1.安装完MySQL后,若想其他机器访问虚拟机上mysql首先应关闭Ubuntu防火墙

    sudo ufw disable
    在redhat中使用service iptables stop来关闭防火墙
    2.需要给mysql用户分配访问权限

grant all privileges on . to ‘root’@’%’ identified by ‘root’ with grant option;
flush privileges;
1.首先保证mysql在192.168.1.11上监听,lsof -i:3306
2.防火墙允许访问3306端口
3.授权访问,比如从windows下以testuser访问所有数据库,密码也是testuser 现在linux的mysql授权
GRANT ALL PRIVILEGES ON . TO ‘testuser’@‘192.168.1.%’ IDENTIFIED BY ‘testuser’;
FLUSH PRIVILEGES;
防火墙的设置可以访问以下网址
http://www.cnblogs.com/jiangyao/archive/2010/05/19/1738909.html
3.如果以上方法还不行,我们就要改这个配置了
1). 3306端口是不是没有打开?

使用nestat命令查看3306端口状态:

~# netstat -an | grep 3306

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

从结果可以看出3306端口只是在IP 127.0.0.1上监听,所以拒绝了其他IP的访问。

解决方法:修改/etc/mysql/my.cnf文件。打开文件,找到下面内容:

Instead of skip-networking the default is now to listen only on

localhost which is more compatible and is not less secure.

bind-address = 127.0.0.1

把上面这一行注释掉或者把127.0.0.1换成合适的IP,建议注释掉。

重新启动后,重新使用netstat检测:

~# netstat -an | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

  1. 创建用户并授权
    这里不要直接使用INSERT语句添加user记录,使用INSERT可能出现:
    ERROR 1364 (HY000): Field ‘ssl_cipher’ doesn’t have a defaultvalue错误。不过早期的MYSQL版本笔者倒没出现这个错误,因为天缘一直都是直接修改user表或直接使用INSERT语句完成,后来升级MYSQL到5.1的时候,发现可能会出现这个错误。
    建议使用GRANT语句进行授权,语句如下:
    GRANT USAGE ON . TO ‘test’@‘localhost’ IDENTIFIED BY’test’ WITH GRANT OPTION;
    kettle学习

kettle6.0部署
kettle部署分为kettle server部署和客户端的kettle client部署,二者安装包完全一致,除因为不同操作系统执行相对应的脚本文件外(linux执行shell文件,windows执行bat文件),其它配置基本一致。
kettle版本:6.0,下载地址:http://sourceforge.net/projects/pentaho/files/Data%20Integration/6.0/
步骤:

  1. 安装JDK,kettle6.0必须依赖jdk1.7或以上,安装步骤见:系统架构-JDK安装
  2. 解压kettle安装包。
    unzip pdi-ce-6.0.0.0-353.zip
  3. 如果是linux系统请修改spoon.sh脚本。
    OPT="$OPT P E N T A H O D I J a v a O P T I O N S − D j a v a . l i b r a r y . p a t h = PENTAHO_DI_Java_OPTIONS -Djava.library.path= PENTAHODIJavaOPTIONSDjava.library.path=LIBPATH -DKETTLE_HOME= K E T T L E H O M E − D K E T T L E R E P O S I T O R Y = KETTLE_HOME -DKETTLE_REPOSITORY= KETTLEHOMEDKETTLEREPOSITORY=KETTLE_REPOSITORY -DKETTLE_USER= K E T T L E U S E R − D K E T T L E P A S S W O R D = KETTLE_USER -DKETTLE_PASSWORD= KETTLEUSERDKETTLEPASSWORD=KETTLE_PASSWORD -DKETTLE_PLUGIN_packageS= K E T T L E P L U G I N P A C K A G E S − D K E T T L E L O G S I Z E L I M I T = KETTLE_PLUGIN_PACKAGES -DKETTLE_LOG_SIZE_LIMIT= KETTLEPLUGINPACKAGESDKETTLELOGSIZELIMIT=KETTLE_LOG_SIZE_LIMIT -DKETTLE_JNDI_ROOT=$KETTLE_JNDI_ROOT"在该参数最后加上 -Dorg.eclipse.swt.browser.DefaultType=mozilla
    如果是windows系统不需要修改直接运行spoon.bat文件即可。
  4. 安装mysql,MySQL主要为kettle资源库配置。也可以使用其它关系型数据库代替。安装步骤见:系统架构-安装MySQL。
  5. 加入mysql驱动包。把mysql驱动包放入/data-integration/lib目录下。

    机器学习
  6. 机器学习基础
    1.1 何谓机器学习
    简单的说机器学习就是将无用的数据转换为有用的信息。
    1.3 机器学习任务
    1.将实例数据划分到合适的分类中
    2.预测
    分类和预测属于监督学习,之所以叫监督学习是因为你必须知道预测什么,即目标变量的分类信息。
    无监督学习:此时数据没有类别信息,也不会给定目标值。

算法名称 适用场景 算法过程 特点 关键
K近邻 适用于数值型和标称型数据的计算分类 1.选择一种距离计算方式, 通过数据所有的特征计算新数据与已知类别数据集中的数据点的距离;
2.按照距离递增次序进行排序,选取与当前距离最小的k个点;
3.对于离散分类,返回k个点出现频率最多的类别作预测分类;对于回归则返回k个点的加权值作为预测值 优点:
1.算法简单
2.精度高、对异常值不敏感、无数据输入假定的优点

缺点:

  1. 计算量较大
    2.无法给出数据的内在含义 1.K值选择
    K 值的选择会对算法的结果产生重大影响

  2. 寻找适当的训练数据集
    当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数

  3. 数据的所有特征都要做可比较的量化
    1.测试采用交叉验证
    决策树 分类 优点:
    1.数据形式容易理解

Tableau
1.tableau desktop 连接excel数据源出错

方案:
如果 Tableau 与 Microsoft Office 的位版本匹配(即,已安装的 Tableau 和 Office 版本都是 32 位或 64 位),Tableau 使用 Microsoft Office 安装的驱动程序来连接到 Excel 文件。如果位版本匹配,您不必再安装任何驱动程序。
然而,如果以下条件之一成立,要将 Tableau 连接到 Excel,您必须下载并安装 Microsoft Access Database Engine :
• 您未安装 Microsoft Office。
• 虽然您安装了 Microsoft Office,但 Microsoft Office 的位版本与 Tableau 的位版本不同。

Read more at https://www.tableau.com/zh-cn/support/drivers#Veh1AgMdHSJKfZfZ.99

  1. 什么是kerberos
    Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务

1.如何通过Tableau连接Kerberos的Hive/Impala

因为Kerberos环境下,Tableau连接Hive或Impala,需要Windows安装Kerberos的客户端并配置成功,所以建议您可以先阅读《Windows Kerberos客户端配置并访问CDH》,巩固基础知识。
• 内容概述
1.Windows Kerberos客户端安装
2.Kerberos客户端配置
3.配置Hive和Impala的ODBC连接
4.使用Tableau连接Hive/Impala
• 测试环境
1.CDH5.11.2
2.Tableau Desktop 10.4
3.Windows Server 2008 R2,64位
4.Redhat7.2
• 前置条件
1.集群已启用Kerberos
2.您已认真阅读《如何安装Tableau并连接CDH的Hive/Impala》和《Windows Kerberos客户端配置并访问CDH》
2.Windows Kerberos客户端安装与配置
2.1Kerberos安装包准备


在Kerberos官网下载Kerberos安装包(http://web.mit.edu/kerberos/dist/),如下截图:

根据自己Windows操作系统下载不同的Client,32位或者64位。
2.2安装Kerberos


1.将下载的安装程序双击打开

2.点击下一步,如下图所示

3.选择“同意”,点击下一步

4.选择“Typical”进入下一步

5.点击“install”进行安装

点击“finish”安装完成,需要重启电脑,点击确认即可。
2.3配置Kerberos


1.配置Windows上的krb5文件
首先进入C:\ProgramData\MIT\Kerberos5,可以看到krb5.ini文件,注意ProgramData是隐藏目录。

将CDH集群的KDC Server服务器上/ect/krb5.conf文件中的部分内容,拷贝到krb5.ini文件中。注意Fayson的机器配置了Kerberos的HA,所以有2个KDC,如果你的环境只有一个KDC,只配置一个即可。

注意:此处将标注部分拷贝至krb5.ini文件中,否则会导致MIT Kerberos无法正常启动,如果直接将krb5.conf文件从Linux拷贝到Windows,更名为ini文件并替换krb5.ini文件会出现文件格式问题导致MIT Kerberos无法正常启动。所以请拷贝文件内容。
查看Windows中的krb5.ini的文件内容

2.配置环境变量,包括krb5.ini文件以及Kerberos Credential Cache File的路径
变量名:KRB5_CONFIG,变量值:C:\ProgramData\MIT\Kerberos5\krb5.ini
变量名:KRB5CCNAME,变量值:C:\temp\krb5cache

2.从命令行中自动执行数据提取刷新任务
参考
https://onlinehelp.tableau.com/current/online/zh-cn/to_refresh_extract_commandline.htm
您可以使用 Tableau 数据提取命令行实用工具自动执行数据提取刷新任务。此实用工具是 Tableau Desktop 附带的一种命令行实用工具,您可以通过其刷新发布的数据源,或将数据从文件附加到数据。
若要使用 Tableau 数据提取命令行实用工具,需满足以下要求:
• 它在 Windows 上随 Tableau Desktop 一起提供,并且只能在 Windows 系统上运行。
• 您可以为不使用 Oauth 的数据提取数据源使用该实用工具。
• 您只能使用它来刷新单连接数据源。它不适用于多连接数据源。
运行实用工具之前
对 Tableau 10.4 及更早版本中创建的数据提取(即 .tde 数据提取)执行数据提取刷新或附加数据操作时,数据提取会自动升级为 .hyper 数据提取。尽管升级到 .hyper 数据提取有许多优点,但您将无法使用以前版本的 Tableau Desktop 打开数据提取。
有关详细信息,请参阅数据提取升级为 .hyper 格式。
运行实用工具

  1. 以管理员身份打开命令提示符,并转到 Tableau Desktop bin 目录。例如:
    cd C:\Program Files\Tableau\Tableau 当前版本\bin
  2. 使用下列命令之一,并添加下表中描述的参数。
    o tableau refreshextract
    o tableau addfiletoextract
    注意:使用此实用工具时,始终要在命令行上或脚本中指定 tableau,决不要指定 tableau.exe。tableau refreshextract 命令的语法和参数
    使用 tableau refreshextract 可刷新 Tableau Server 或 Tableau Online 上的数据提取。刷新数据提取将会使用自上次刷新后对数据源所做的任何修改更新现有数据提取。
    要查看此命令的帮助,请在 Windows 命令提示符处键入以下命令:
    tableau refreshextract --help
    使用参数
    • 所有选项都有一个与双连字符结合使用的完整形式(例如,–server)。
    • 有些选项还有一个与单连字符结合使用的短形式(例如,-s)。
    • 如果选项的值包含空格,则用引号将选项值引起来。
    • 所刷新的数据源必须是原始数据源,而不是 .tde。
    tableau refreshextract 命令选项
    短形式 完整形式 说明
    –source-username 数据源连接的有效用户名。
    将此选项与 --source-password 结合使用,或使用
    –original-file,而不是用户名和密码选项。
    注意:在刷新发布的数据提取时必须提供用户和密码,即使最初是利用嵌入式凭据发布数据源的。
    –source-password “” 数据源用户的密码。
    –original-file

    –original-file 将在服务器上进行刷新的数据源的路径和文件名。例如:–original-file c:\folder\file.csv
    若要刷新多文件数据源,请将路径传递到包含数据文件的文件夹。例如:–original-file c:\folder。
    如果文件位于网络共享上,请为路径使用 UNC 格式:\server\path\filename.csv
    –force-full-refresh 如果数据源设置为进行增量刷新,请使用此选项强制对数据提取进行完整刷新。如果不包括此选项,则执行增量刷新。并非所有数据源都支持增量刷新。
    -s --server 在其中发布数据的 Tableau Server 的 URL。
    对于 Tableau Online,请指定 https://online.tableau.com。
    -t --site 在多站点环境中,指定命令将应用于的站点。对于 Tableau Online,如果您的用户名与一个以上的站点关联,请使用此参数。对于 Tableau Server,如果未指定站点,则使用默认站点。
    站点 ID 独立于站点名称,当您在浏览器中查看站点时,它会显示在 URL 中。例如,如果您登录到 Tableau Online 后看到的页面的 URL 是
    https://online.tableau.com/t/vernazza/views
    站点 ID 是 vernazza。
    –datasource 发布到 Tableau Server 或 Tableau Online 的数据源的名称。
    –project 数据源所属的项目。如果不包括此选项,则假定为默认项目。
    如果要指定的项目是嵌入在项目分层结构内的子项目,则必须随 --parent-project-path 参数一起使用此参数。
    –parent-project-path path/to/project 如果将数据源发布到的项目没有位于项目分层结构的顶层,请随 --project 参数一起使用此参数以指定嵌套项目的路径。
    使用正斜杠字符 (/) 来分隔分层结构中的项目级别。使用反斜杠 () 对项目名称中的正斜杠或反斜杠字符进行转义。
    例如,对于顶层“Marketing”下的项目“Social”中名为 Sandbox 的项目:
    –project Sandbox --parent-project-path Marketing/Social
    -u --username 有效的 Tableau Server 或 Tableau Online 用户。
    -p “” --password “” 指定的 Tableau Server 或 Tableau Online 用户的密码。
    –proxy-username 代理服务器的用户名。
    –proxy-password “” 代理服务器的密码。
    -c “ ” --config-file “ ” 包含命令配置选项的文件的路径和文件名信息。始终将路径括在双引号内。有关详细信息,请参见下面的使用配置文件。

tableau refreshextract 示例命令
以下命令可刷新已发布到 Tableau Online、名为 CurrentYrOverYrStats 的数据提取。此命令指定以下内容:
• Tableau Online 用户和密码。
• Tableau Online 站点和项目名称。
• 数据源以及用于登录托管数据源的用户名和密码,在本例中,数据库源由云端数据源提供商(例如 Salesforce.com)托管。
C:\Program Files\Tableau\Tableau 当前版本\bin>tableau refreshextract --server https://online.tableau.com --username [email protected] --password “OurServerPwd” --site vernazza --project “New Animations” --datasource “CurrentYrOverYrStats” --source-username database_user@hosted_datasource_provider.com --source-password “db_password”
若要刷新基于文件的数据源的数据提取,请提供您从中创建数据提取的原始文件路径。如果文件位于网络共享上,请使用 UNC 格式,而不是映射的驱动器。
C:\Program Files\Tableau\Tableau 当前版本\bin>tableau refreshextract --server https://online.tableau.com --username [email protected] --password “OurServerPwd” --site vernazza --project “New Animations” --datasource “CurrentYrOverYrStats” --original-file "\server\path\filename.csv"tableau addfiletoextract 的语法
使用 tableau addfiletoextract 将文件内容附加到已发布到 Tableau Server 或 Tableau Online 的数据提取。此命令组合两个文件。
如果只想使用最新更改更新现有数据提取,请使用 refreshextract 命令。使用 addfiletoextract 更新现有数据提取将会复制数据。
要查看此命令的帮助,请在 Windows 命令提示符处键入以下命令:
tableau addfiletoextract --help
所有选项都有一个与双连字符结合使用的完整形式(例如,–server)。有些选项还有一个与单连字符结合使用的短形式(例如,-s)。如果选项的值包含空格,则用引号将选项值引起来。
tableau addfiletoextract 命令选项
短形式 完整形式 说明
–file 包含要追加的数据的数据文件的路径和文件名信息。该文件可来自 Excel、Access、Tableau 数据提取,或者带分隔符的文本文件。它不能受密码保护。如果文件位于网络共享上,请使用 UNC 格式。例如,\server\path\filename.csv
-s --server 在其中发布数据的 Tableau Server 的 URL。
对于 Tableau Online,请指定 https://online.tableau.com。
-t --site 在多站点环境中,指定命令将应用于的站点。对于 Tableau Online,如果您的用户名与一个以上的站点关联,则必须包括此参数。对于 Tableau Server,如果未指定站点,则使用默认站点。
–datasource 发布到 Tableau Server 或 Tableau Online 的数据源的名称。
–project 数据源所属的项目。如果不包括此选项,则假定为默认项目。
如果要指定的项目是嵌入在项目分层结构内的子项目,则必须随 --parent-project-path 参数一起使用此参数。
–parent-project-path path/to/project 如果将数据源发布到的项目没有位于项目分层结构的顶层,请随 --project 参数一起使用此参数以指定嵌套项目的路径。
使用正斜杠字符 (/) 来分隔分层结构中的项目级别。使用反斜杠 () 对项目名称中的正斜杠或反斜杠字符进行转义。
例如,对于顶层“Marketing”下的项目“Social”中名为 Sandbox 的项目:
–project Sandbox --parent-project-path Marketing/Social
-u --username 有效的 Tableau Server 或 Tableau Online 用户。
-p “” --password “” 指定的 Tableau Server 或 Tableau Online 用户的密码。
–proxy-username 代理服务器的用户名。
–proxy-password “” 代理服务器的密码。
-c “ ” --config-file “ ” 包含命令配置选项的文件的路径和文件名信息。始终将路径括在双引号内。有关详细信息,请参见下面的使用配置文件。

tableau addfiletoextract 示例命令
C:\Program Files\Tableau\Tableau 当前版本\bin>tableau addfiletoextract --server https://online.tableau.com --username [email protected] --password “OurServerPwd” --site vernazza --project “New Animations” --datasource “CurrentYrOverYrStats” --file "C:\Users\user2\Documents\DataUploadFiles\AprMay.csv"使用配置文件
可以使用纯文本编辑器(例如记事本或 Text Edit),来创建可用于 tableau refreshextract或 tableau addfiletoextract 的配置文件。如果希望在一段时间内定期更新同一数据源,配置文件可能非常有用。指定配置文件后,就无需在每次运行命令时都键入相同的选项。配置文件还有一个优势,那就是不会在命令行上泄漏用户名和密码。
创建配置文件
例如,假设您创建了一个名为 config.txt 的文件并将它保存到您的 Documents 文件夹。在该文件中,您包含了下面显示的参数信息。
对于从托管数据源发布到 Tableau Online 的数据源(其中服务器为 https://online.tableau.com):
server=https://online.tableau.com
[email protected]
password=OurPassword
project=New Animations
datasource=CurrentYrOverYrStats
source-username=database_user@hosted_datasource_provider.com
source-password=db_password
在命令行中引用配置文件
创建配置文件后,可以运行 tableau refreshextract 或 tableau addfiletoextract 命令,指向配置文件,将其作为命令行中使用的唯一选项,并将配置文件的路径括在双引号内。语法如下:
tableau refreshextract --config-file “ ”
例如,若要刷新在创建配置文件部分的示例中指定的数据提取,应运行以下命令(确保在所用 Tableau Desktop 版本的 bin 目录中工作):
C:\Program Files\Tableau\Tableau 当前版本\bin>tableau refreshextract --config-file “C:\Users\user1\Documents\config.txt”
配置文件的语法差异
用于在配置文件内指定选项的语法与命令行中使用的语法在以下方面有所不同:
• 选项名称不以短横线或连字符开头。
• 可使用等号(不含空格)分隔选项名称和选项值。
• 值不需要(或不允许)用引号引起来,即使它们包含空格也是如此(就像前面示例中的 project 选项)。使用 Windows 任务计划程序刷新数据提取
您可将 Windows 任务计划程序与 Tableau 数据提取命令行实用工具结合使用,以便从企业防火墙内自动执行对 Tableau Online 数据源的定期更新。可将任务配置为每天、每周或每月执行一次,或者在发生特定系统事件后执行。例如,在计算机启动时运行任务。
若要了解详细信息,请参见 Microsoft TechNet 库中的任务计划程序使用指南页

记得需要在C盘下创建temp目录,krb5cache不用创建。

保存设置好的环境变量,需要重启计算机。
2.4测试Kerberos登录


1.双击桌面上的Kerberos图标

2.点击“Get Ticket”,输入Fayson用户的Principal信息,如果没有,或者想要kinit其他的用户,请到KDC服务器上通过kadmin命令创建。

点击OK,可以看到kinit成功。

3.配置Hive ODBC


如何下载ODBC驱动并安装,Fayson不再赘述,如果不清楚请参考《如何安装Tableau并连接CDH的Hive/Impala》。
1.进入ODBC配置界面

2.点击add,选择Hive

点击Finish
3.配置ODBC连接相关信息

点击Test

4.点击OK,并保存。

项目管理

大数据平台
大数据技术架构

hadoop使用场景
• 大数据量存储:分布式存储
• 日志处理: Hadoop擅长这个
• 海量计算: 并行计算
• ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
• 使用HBase做数据分析: 用扩展性应对大量的写操作—Facebook构建了基于HBase的实时数据分析系统
• 机器学习: 比如Apache Mahout项目
• 搜索引擎:hadoop + lucene实现
• 数据挖掘:目前比较流行的广告推荐
• 大量地从文件中顺序读。HDFS对顺序读进行了优化,代价是对于随机的访问负载较高。
• 数据支持一次写入,多次读取。对于已经形成的数据的更新不支持。
• 数据不进行本地缓存(文件很大,且顺序读没有局部性)
• 任何一台服务器都有可能失效,需要通过大量的数据复制使得性能不会受到大的影响。
• 用户细分特征建模
• 个性化广告推荐
• 智能仪器推荐

  1. hadoop是什么?
    (1)Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理),Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为key/value,key/value是基本数据单元。用函数式变成Mapreduce代替SQL,SQL是查询语句,而Mapreduce则是使用脚本和代码,而对于适用于关系型数据库,习惯SQL的Hadoop有开源工具hive代替。
    (2)Hadoop就是一个分布式计算的解决方案.

  2. hadoop能做什么?
    hadoop擅长日志分析,facebook就用Hive来进行日志分析,2009年时facebook就有非编程人员的30%的人使用HiveQL进行数据分析;淘宝搜索中 的自定义筛选也使用的Hive;利用Pig还可以做高级的数据处理,包括Twitter、LinkedIn 上用于发现您可能认识的人,可以实现类似Amazon.com的协同过滤的推荐效果。淘宝的商品推荐也是!在Yahoo!的40%的Hadoop作业是用pig运行的,包括垃圾邮件的识别和过滤,还有用户特征建模。(2012年8月25新更新,天猫的推荐系统是hive,少量尝试mahout!)

  3. hadoop HDFS文件系统的特征?
    • 存储极大数目的信息(terabytes or petabytes),将数据保存到大量的节点当中。支持很大单个文件。
    • 提供数据的高可靠性,单个或者多个节点不工作,对系统不会造成任何影响,数据仍然可用。
    • 提供对这些信息的快速访问,并提供可扩展的方式。能够通过简单加入更多服务器的方式就能够服务更多的客户端。
    • HDFS是针对MapReduce设计的,使得数据尽可能根据其本地局部性进行访问与计算。

  4. Mapreduce整个工作机制图?

HUE框架
基础网站
Hue 是 Cloudera 的大数据 Web 工具
官方访问网站 : http://gethue.com/
GitHub : https://github.com/cloudera/hue
下载地址 : http://archive.cloudera.com/cdh5/cdh/5/
大数据协作框架
1> 大数据协作框架
“大数据协作框架”其实是一个统称,实际上就是 Hadoop 2.X 生态系统中几个辅助 Hadoop 2.X框架。在此,主要是以下四个框架
-> 数据转换工具 Sqoop
-> 文件收集库框架 Flume
-> 任务调度框架 Oozie
-> 大数据 Web 工具 Hue

3> Hue 架构

hue支持的框架
-> hadoop
-> HDFS
-> CRUD
-> yarn
-> 任务的监控
-> 自动刷新,权限管理
-> oozie
-> 任务的监控及调度
-> 便捷的任务流的图形化的编写
-> PIG
-> hive
-> 提供简洁的图形化操作界面
-> 提供报表的生成
-> impala
-> hbase
-> sqoop2
-> RDBMS
-> MySQL
-> oracle

4> Hive、Impala、Spark 的 SQL编辑

5> Solr 动态搜索仪表盘(Dynamic Search dashboard with Solr)

6> Spark and Hadoop notebooks


Hue中定义workflow注意事项

  1. 本机上传文件到平台hdfs目录时,要对本地文件执行编码转换。具体方法是在ultraedit中执行如下操作:
  2. oozie在解析sqoop语句的时候,是根据空格来分割的

Hue能干什么?
1,访问HDFS和文件浏览
2,通过web调试和开发hive以及数据结果展示
3,查询solr和结果展示,报表生成
4,通过web调试和开发impala交互式SQL Query
5,spark调试和开发
6,Pig开发和调试
7,oozie任务的开发,监控,和工作流协调调度
8,Hbase数据查询和修改,数据展示
9,Hive的元数据(metastore)查询
10,MapReduce任务进度查看,日志追踪
11,创建和提交MapReduce,Streaming,Java job任务
12,Sqoop2的开发和调试
13,Zookeeper的浏览和编辑
14,数据库(MySQL,PostGres,SQlite,Oracle)的查询和展示

  1. Kafka
    1.Kafka常用命令
    Kafka常用命令目录地址:/opt/cloudera/parcels/CDH/bin
    管理

创建主题(4个分区,2个副本) bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 4 --topic test

查询

查询集群描述

bin/kafka-topics.sh --describe --zookeeper

消费者列表查询

bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list

新消费者列表查询(支持0.9版本+)

bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --list

显示某个消费组的消费详情(仅支持offset存储在zookeeper上的)

bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper localhost:2181 --group test。
发送和消费

生产者 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

消费者 bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test

新生产者(支持0.9版本+) bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test --producer.config config/producer.properties

新消费者(支持0.9版本+) bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --new-consumer --from-beginning --consumer.config config/consumer.properties

高级点的用法 bin/kafka-simple-consumer-shell.sh --brist localhost:9092 --topic test --partition 0 --offset 1234 --max-messages 10

平衡leader
bin/kafka-preferred-replica-election.sh –zookeeper zk_host:port/chroot
kafka自带压测命令
bin/kafka-producer-perf-test.sh --topic test --num-records 100 --record-size 1 --throughput 100 --producer-props bootstrap.servers=localhost:9092
2.Kafka常用命令之kafka-topics.sh
一创建 Topic
TopicCommand.createTopic() 方法负责创建 Topic,其核心逻辑是确定新建 Topic 中有多少个分区及每个分区中的副本如何分配,既支持使用 replica-assignment 参数手动分配,也支持使用 partitions 参数和 replication-factor 参数指定分区个数和副本个数进行自动分配。之后该方法会将副本分配结果写入到 ZooKeeper 中。

形式一
使用 replica-assignment 参数手动指定 Topic Partition Replica 与 Kafka Broker 之间的存储映射关系。
bin/kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --topic topic_name --replica-assignment 0:1,1:2,2:0
1
  注:0:1,1:2,2:0中的数字均为 broker.id;3个分区(逗号分隔);每个分区有两个副本(副本所在的 broker 以冒号分割)

形式二
使用 partitions 和 replication-factor 参数自动分配存储映射关系。
bin/kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --topic topic_name --partitions 3 --replication-factor 2
1
  表示:创建一个 名为 topic_name 的 Topic。其中指定分区个数为3,副本个数为2。

创建 Topic 时也可指定参数:

bin/kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --topic topic_name --partitions 3 --replication-factor 2 --config cleanup.policy=compact --config retention.ms=500
  创建topic过程的问题,replication-factor个数不能超过broker的个数,否则有如下错误信息:

ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 3 larger than available brokers: 1.
二 查看 Topic
查看 Topic 列表
bin/kafka-topics.sh --list --zookeeper master:2181,slave1:2181,slave2:2181
  查询出来的结果仅有 Topic 的名称信息。

查看指定 Topic 明细
bin/kafka-topics.sh --describe --zookeeper master:2181,slave1:2181,slave2:2181 --topic topic_name
查询的结果结构如下:

Topic:topic_name PartitionCount:3 ReplicationFactor:2 Configs:
Topic: topic_name Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1
Topic: topic_name Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: topic_name Partition: 2 Leader: 2 Replicas: 2,0 Isr: 2,0
  PartitionCount:partition个数
  ReplicationFactor:副本个数
  Partition:partition编号,从0开始递增
  Leader:当前partition起作用的breaker.id
  Replicas: 当前副本数据所在的breaker.id,是一个列表,排在最前面的其作用
  Isr:当前kakfa集群中可用的breaker.id列表

三 删除 Topic
bin/kafka-topics.sh --delete --zookeeper master:2181,slave1:2181,slave2:2181 --topic topic_name
1
若 delete.topic.enable=true
直接彻底删除该 Topic。
若 delete.topic.enable=false
如果当前 Topic 没有使用过即没有传输过信息:可以彻底删除。
如果当前 Topic 有使用过即有过传输过信息:并没有真正删除 Topic 只是把这个 Topic 标记为删除(marked for deletion),重启 Kafka Server 后删除。
注:delete.topic.enable=true 配置信息位于配置文件 config/server.properties 中(较新的版本中无显式配置,默认为 true)。

四 修改 Topic
增加分区数
bin/kafka-topics.sh --alter --zookeeper master:2181,slave1:2181,slave2:2181 --topic topic_name --partitions 3
1
  修改分区数时,仅能增加分区个数。若是用其减少 partition 个数,则会报如下错误信息:
org.apache.kafka.common.errors.InvalidPartitionsException: The number of partitions for a topic can only be increased. Topic hadoop currently has 3 partitions, 2 would not be an increase.
不能用来修改副本个数。(请使用 kafka-reassign-partitions.sh 脚本增加副本数)
增加配置
bin/kafka-topics.sh --alter --zookeeper master:2181,slave1:2181,slave2:2181 --topic topic_name --config flush.messages=1
删除配置
bin/kafka-topics.sh --alter --zookeeper master:2181,slave1:2181,slave2:2181 --topic topic_name --delete-config flush.messages

./kafka-console-consumer --bootstrap-server test-118:9092,test-119:9092,test-120:9092 --topic instorage_event
3.kafka的副本机制
partition的副本被称为replica,每个分区可以有多个副本,并且在副本集中会存在一个leader副本,所有的读写请求都会通过leader完成,follower复制只负责备份数据。

副本会均匀分配到多台broker上,当leader节点挂掉之后,会从副本集中重新选出一个副本作为leader继续提供服务

副本分配算法:
n个broker
将第i个partition的第j个副本分配到第((i+j)mod n)个broker上

kafka副本机制中的概念:
leader副本:响应客户端的读写请求
follow副本:备份leader的数据,不进行读写操作
ISR副本:leader副本和所有能够与leader副本保持基本同步的follow副本,如 果follow副本和leader副本数据同步速度过慢,该follow将会被T出ISR副本
ISR集合中的副本必须满足的条件:
副本所在的节点与zk相连
副本的最后一条消息和leader副本的最后一条消息的差值不能超过阈值replica.lag.time.max.ms:如果该follower在此时间间隔之内没有追上leader,则该follower将会被T出ISR
副本同步时的两个重要概念
LEO(Last end offset) 记录了该副本底层日志中的下一条消息的offset,例如LEO为10,那么当前的offset为9
HW (High water)标记着可消费的消息,对于同一个副本而言HW不会大于LEO,小于等于HW的消息将会被认为是已备份的。
副本协同机制
producer将消息发送到该partition的leader上,leader会把消息写入其本地log,每个follower都从leader pull数据。在follower收到消息并且将消息写入本地log之后会向leader发送ack,一旦leader收到了ISR中所有replica的ACK,该消息就被认为已经commit了,leader会增加HW并向producer发送ACK

过程如下所示

ollower发送fetch请求,并带上自己的LEO
leader端的操作
1.当producer发送一个消息给leader之后,leader会把消息写入磁盘
2.然后leader会更新LEO,这时候尝试更新HW,HW是取LEO和remoteLEO的较小值,这时候HW依然为0.(remoteLEO取所有Follower发过来的offset中最小的一个)
3.把消息内容和当前的HW值发送给follower副本

当收到响应之后,follower端的操作
1.将消息写入本地log,同时更新LEO
2.比较本地LEO和返回的HW,比较他们取小值赋值给HW

第二次发送fetch请求之后

leader
1.更新remoteLEO=1
2.更新HW为1
3.把数据和当前HW返回给follower,如果这时候没有数据,则返回空

follower收到response之后
1.如果有数据则写入本地日志,并且更新LEO
2.更新HW的值
到目前为止,consumer就可以消费offset=0的消息了
4.Kafka专业术语
Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker。
Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic。(物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 的消息虽然保存于一个或多个 broker 上,但用户只需指定消息的 Topic 即可生产或消费数据而不必关心数据存于何处)。
Partition:Partition 是物理上的概念,每个 Topic 包含一个或多个 Partition。
Producer:负责发布消息到 Kafka broker。
Consumer:消息消费者,向 Kafka broker 读取消息的客户端。
Consumer Group:每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 group name,若不指定 group name 则属于默认的 group)

5.Apache kafka 工作原理介绍
消息队列
消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。常用的消息队列技术是 Message Queue。

Message Queue 的通讯模式

点对点通讯:点对点方式是最为传统和常见的通讯方式,它支持一对一、一对多、多对多、多对一等多种配置方式,支持树状、网状等多种拓扑结构。

多点广播:MQ 适用于不同类型的应用。其中重要的,也是正在发展中的是"多点广播"应用,即能够将消息发送到多个目标站点 (Destination List)。可以使用一条 MQ 指令将单一消息发送到多个目标站点,并确保为每一站点可靠地提供信息。MQ 不仅提供了多点广播的功能,而且还拥有智能消息分发功能,在将一条消息发送到同一系统上的多个用户时,MQ 将消息的一个复制版本和该系统上接收者的名单发送到目标 MQ 系统。目标 MQ 系统在本地复制这些消息,并将它们发送到名单上的队列,从而尽可能减少网络的传输量。

发布/订阅 (Publish/Subscribe) 模式:发布/订阅功能使消息的分发可以突破目的队列地理指向的限制,使消息按照特定的主题甚至内容进行分发,用户或应用程序可以根据主题或内容接收到所需要的消息。发布/订阅功能使得发送者和接收者之间的耦合关系变得更为松散,发送者不必关心接收者的目的地址,而接收者也不必关心消息的发送地址,而只是根据消息的主题进行消息的收发。

群集 (Cluster):为了简化点对点通讯模式中的系统配置,MQ 提供 Cluster(群集) 的解决方案。群集类似于一个域 (Domain),群集内部的队列管理器之间通讯时,不需要两两之间建立消息通道,而是采用群集 (Cluster) 通道与其它成员通讯,从而大大简化了系统配置。此外,群集中的队列管理器之间能够自动进行负载均衡,当某一队列管理器出现故障时,其它队列管理器可以接管它的工作,从而大大提高系统的高可靠性。

Apache Kafka 原理
Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。现在它已被多家公司作为多种类型的数据管道和消息系统使用。活动流数据是几乎所有站点在对其网站使用情况做报表时都要用到的数据中最常规的部分。活动数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索情况等内容。这种数据通常的处理方式是先把各种活动以日志的形式写入某种文件,然后周期性地对这些文件进行统计分析。运营数据指的是服务器的性能数据(CPU、IO 使用率、请求时间、服务日志等等数据),总的来说,运营数据的统计方法种类繁多。

Kafka 专用术语

Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker。

Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic。(物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 的消息虽然保存于一个或多个 broker 上,但用户只需指定消息的 Topic 即可生产或消费数据而不必关心数据存于何处)。

Partition:Partition 是物理上的概念,每个 Topic 包含一个或多个 Partition。

Producer:负责发布消息到 Kafka broker。

Consumer:消息消费者,向 Kafka broker 读取消息的客户端。

Consumer Group:每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 group name,若不指定 group name 则属于默认的 group)。

Kafka 交互流程

Kafka 是一个基于分布式的消息发布-订阅系统,它被设计成快速、可扩展的、持久的。与其他消息发布-订阅系统类似,Kafka 在主题当中保存消息的信息。生产者向主题写入数据,消费者从主题读取数据。由于 Kafka 的特性是支持分布式,同时也是基于分布式的,所以主题也是可以在多个节点上被分区和覆盖的。

信息是一个字节数组,程序员可以在这些字节数组中存储任何对象,支持的数据格式包括 String、JSON、Avro。Kafka 通过给每一个消息绑定一个键值的方式来保证生产者可以把所有的消息发送到指定位置。属于某一个消费者群组的消费者订阅了一个主题,通过该订阅消费者可以跨节点地接收所有与该主题相关的消息,每一个消息只会发送给群组中的一个消费者,所有拥有相同键值的消息都会被确保发给这一个消费者。

Kafka 设计中将每一个主题分区当作一个具有顺序排列的日志。同处于一个分区中的消息都被设置了一个唯一的偏移量。Kafka 只会保持跟踪未读消息,一旦消息被置为已读状态,Kafka 就不会再去管理它了。Kafka 的生产者负责在消息队列中对生产出来的消息保证一定时间的占有,消费者负责追踪每一个主题 (可以理解为一个日志通道) 的消息并及时获取它们。基于这样的设计,Kafka 可以在消息队列中保存大量的开销很小的数据,并且支持大量的消费者订阅。

利用 Apache Kafka 系统架构的设计思路
示例:网络游戏

假设我们正在开发一个在线网络游戏平台,这个平台需要支持大量的在线用户实时操作,玩家在一个虚拟的世界里通过互相协作的方式一起完成每一个任务。由于游戏当中允许玩家互相交易金币、道具,我们必须确保玩家之间的诚信关系,而为了确保玩家之间的诚信及账户安全,我们需要对玩家的 IP 地址进行追踪,当出现一个长期固定 IP 地址忽然之间出现异动情况,我们要能够预警,同时,如果出现玩家所持有的金币、道具出现重大变更的情况,也要能够及时预警。此外,为了让开发组的数据工程师能够测试新的算法,我们要允许这些玩家数据进入到 Hadoop 集群,即加载这些数据到 Hadoop 集群里面。

对于一个实时游戏,我们必须要做到对存储在服务器内存中的数据进行快速处理,这样可以帮助实时地发出预警等各类动作。我们的系统架设拥有多台服务器,内存中的数据包括了每一个在线玩家近 30 次访问的各类记录,包括道具、交易信息等等,并且这些数据跨服务器存储。

我们的服务器拥有两个角色:首先是接受用户发起的动作,例如交易请求,其次是实时地处理用户发起的交易并根据交易信息发起必要的预警动作。为了保证快速、实时地处理数据,我们需要在每一台机器的内存中保留历史交易信息,这意味着我们必须在服务器之间传递数据,即使接收用户请求的这台机器没有该用户的交易信息。为了保证角色的松耦合,我们使用 Kafka 在服务器之间传递信息 (数据)。

Kafka 特性

Kafka 的几个特性非常满足我们的需求:可扩展性、数据分区、低延迟、处理大量不同消费者的能力。这个案例我们可以配置在 Kafka 中为登陆和交易配置同一个主题。由于 Kafka 支持在单一主题内的排序,而不是跨主题的排序,所以我们为了保证用户在交易前使用实际的 IP 地址登陆系统,我们采用了同一个主题来存储登陆信息和交易信息。

当用户登陆或者发起交易动作后,负责接收的服务器立即发事件给 Kafka。这里我们采用用户 id 作为消息的主键,具体事件作为值。这保证了同一个用户的所有的交易信息和登陆信息被发送到 Kafka 分区。每一个事件处理服务被当作一个 Kafka 消费者来运行,所有的消费者被配置到了同一个消费者群组,这样每一台服务器从一些 Kafka 分区读取数据,一个分区的所有数据被送到同一个事件处理服务器 (可以与接收服务器不同)。当事件处理服务器从 Kafka 读取了用户交易信息,它可以把该信息加入到保存在本地内存中的历史信息列表里面,这样可以保证事件处理服务器在本地内存中调用用户的历史信息并做出预警,而不需要额外的网络或磁盘开销。

图 1. 游戏设计图
图 1. 游戏设计图

为了多线程处理,我们为每一个事件处理服务器或者每一个核创建了一个分区。Kafka 已经在拥有 1 万个分区的集群里测试过。

切换回 Kafka

上面的例子听起来有点绕口:首先从游戏服务器发送信息到 Kafka,然后另一台游戏服务器的消费者从主题中读取该信息并处理它。然而,这样的设计解耦了两个角色并且允许我们管理每一个角色的各种功能。此外,这种方式不会增加负载到 Kafka。测试结果显示,即使 3 个结点组成的集群也可以处理每秒接近百万级的任务,平均每个任务从注册到消费耗时 3 毫秒。

上面例子当发现一个事件可疑后,发送一个预警标志到一个新的 Kafka 主题,同样的有一个消费者服务会读取它,并将数据存入 Hadoop 集群用于进一步的数据分析。

因为 Kafka 不会追踪消息的处理过程及消费者队列,所以它在消耗极小的前提下可以同时处理数千个消费者。Kafka 甚至可以处理批量级别的消费者,例如每小时唤醒一次一批睡眠的消费者来处理所有的信息。

Kafka 让数据存入 Hadoop 集群变得非常简单。当拥有多个数据来源和多个数据目的地时,为每一个来源和目的地配对地编写一个单独的数据通道会导致混乱发生。Kafka 帮助 LinkedIn 规范了数据通道格式,并且允许每一个系统获取数据和写入数据各一次,这样极大地减少数据通道的复杂性和操作耗时。

LinkedIn 的架构师 Jay Kreps 说:“我最初是在 2008 年完成键值对数据存储方式后开始的,我的项目是尝试运行 Hadoop,将我们的一些处理过程移动到 Hadoop 里面去。我们在这个领域几乎没有经验,花了几个星期尝试把数据导入、导出,另外一些事件花在了尝试各种各样的预测性算法使用上面,然后,我们开始了漫漫长路”。

与 Flume 的区别

Kafka 与 Flume 很多功能确实是重复的。以下是评估两个系统的一些建议:

Kafka 是一个通用型系统。你可以有许多的生产者和消费者分享多个主题。相反地,Flume 被设计成特定用途的工作,特定地向 HDFS 和 HBase 发送出去。Flume 为了更好地为 HDFS 服务而做了特定的优化,并且与 Hadoop 的安全体系整合在了一起。基于这样的结论,Hadoop 开发商 Cloudera 推荐如果数据需要被多个应用程序消费的话,推荐使用 Kafka,如果数据只是面向 Hadoop 的,可以使用 Flume。

Flume 拥有许多配置的来源 (sources) 和存储池 (sinks)。然后,Kafka 拥有的是非常小的生产者和消费者环境体系,Kafka 社区并不是非常支持这样。如果你的数据来源已经确定,不需要额外的编码,那你可以使用 Flume 提供的 sources 和 sinks,反之,如果你需要准备自己的生产者和消费者,那你需要使用 Kafka。

Flume 可以在拦截器里面实时处理数据。这个特性对于过滤数据非常有用。Kafka 需要一个外部系统帮助处理数据。

无论是 Kafka 或是 Flume,两个系统都可以保证不丢失数据。然后,Flume 不会复制事件。相应地,即使我们正在使用一个可以信赖的文件通道,如果 Flume agent 所在的这个节点宕机了,你会失去所有的事件访问能力直到你修复这个受损的节点。使用 Kafka 的管道特性不会有这样的问题。

Flume 和 Kafka 可以一起工作的。如果你需要把流式数据从 Kafka 转移到 Hadoop,可以使用 Flume 代理 (agent),将 kafka 当作一个来源 (source),这样可以从 Kafka 读取数据到 Hadoop。你不需要去开发自己的消费者,你可以使用 Flume 与 Hadoop、HBase 相结合的特性,使用 Cloudera Manager 平台监控消费者,并且通过增加过滤器的方式处理数据。

结束语
综上所述,Kafka 的设计可以帮助我们解决很多架构上的问题。但是想要用好 Kafka 的高性能、低耦合、高可靠性、数据不丢失等特性,我们需要非常了解 Kafka,以及我们自身的应用系统使用场景,并不是任何环境 Kafka 都是最佳选择。
2.Hadoop
1.Hadoop多用户资源管理–Fair Scheduler介绍与配置
在一个公司内部的Hadoop Yarn集群,肯定会被多个业务、多个用户同时使用,共享Yarn的资源,如果不做资源的管理与规划,那么整个Yarn的资源很容易被某一个用户提交的Application占满,其它任务只能等待,这种当然很不合理,我们希望每个业务都有属于自己的特定资源来运行MapReduce任务,Hadoop中提供的公平调度器–Fair Scheduler,就可以满足这种需求。
Fair Scheduler将整个Yarn的可用资源划分成多个资源池,每个资源池中可以配置最小和最大的可用资源(内存和CPU)、最大可同时运行Application数量、权重、以及可以提交和管理Application的用户等。
根据用户名分配资源池

如图所示,假设整个Yarn集群的可用资源为100vCPU,100GB内存,现在为3个业务各自规划一个资源池,另外,规划一个default资源池,用于运行其他用户和业务提交的任务。如果没有在任务中指定资源池(通过参数mapreduce.job.queuename),那么可以配置使用用户名作为资源池名称来提交任务,即用户businessA提交的任务被分配到资源池businessA中,用户businessC提交的任务被分配到资源池businessC中。除了配置的固定用户,其他用户提交的任务将会被分配到资源池default中。
这里的用户名,就是提交Application所使用的Linux/Unix用户名。
另外,每个资源池可以配置允许提交任务的用户名,比如,在资源池businessA中配置了允许用户businessA和用户lxw1234提交任务,如果使用用户lxw1234提交任务,并且在任务中指定了资源池为businessA,那么也可以正常提交到资源池businessA中。
根据权重获得额外的空闲资源
在每个资源池的配置项中,有个weight属性(默认为1),标记了资源池的权重,当资源池中有任务等待,并且集群中有空闲资源时候,每个资源池可以根据权重获得不同比例的集群空闲资源。
比如,资源池businessA和businessB的权重分别为2和1,这两个资源池中的资源都已经跑满了,并且还有任务在排队,此时集群中有30个Container的空闲资源,那么,businessA将会额外获得20个Container的资源,businessB会额外获得10个Container的资源。

最小资源保证
在每个资源池中,允许配置该资源池的最小资源,这是为了防止把空闲资源共享出去还未回收的时候,该资源池有任务需要运行时候的资源保证。
比如,资源池businessA中配置了最小资源为(5vCPU,5GB),那么即使没有任务运行,Yarn也会为资源池businessA预留出最小资源,一旦有任务需要运行,而集群中已经没有其他空闲资源的时候,这个最小资源也可以保证资源池businessA中的任务可以先运行起来,随后再从集群中获取资源。

动态更新资源配额
Fair Scheduler除了需要在yarn-site.xml文件中启用和配置之外,还需要一个XML文件来配置资源池以及配额,而该XML中每个资源池的配额可以动态更新,之后使用命令:yarn rmadmin –refreshQueues 来使得其生效即可,不用重启Yarn集群。
需要注意的是:动态更新只支持修改资源池配额,如果是新增或减少资源池,则需要重启Yarn集群。
Fair Scheduler配置示例
以上面图中所示的业务场景为例。
yarn-site.xml中的配置:


yarn.resourcemanager.scheduler.class
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler


yarn.scheduler.fair.allocation.file
/etc/hadoop/conf/fair-scheduler.xml


yarn.scheduler.fair.preemption
true


yarn.scheduler.fair.user-as-default-queue
true
default is True


yarn.scheduler.fair.allow-undeclared-pools
false
default is True


yarn.resourcemanager.scheduler.class
配置Yarn使用的调度器插件类名;
Fair Scheduler对应的是:
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
yarn.scheduler.fair.allocation.file
配置资源池以及其属性配额的XML文件路径(本地路径);
yarn.scheduler.fair.preemption
开启资源抢占。
yarn.scheduler.fair.user-as-default-queue
设置成true,当任务中未指定资源池的时候,将以用户名作为资源池名。这个配置就实现了根据用户名自动分配资源池。
yarn.scheduler.fair.allow-undeclared-pools
是否允许创建未定义的资源池。
如果设置成true,yarn将会自动创建任务中指定的未定义过的资源池。设置成false之后,任务中指定的未定义的资源池将无效,该任务会被分配到default资源池中。

fair-scheduler.xml中的配置:

30 51200mb,50vcores 102400mb,100vcores 100 1.0 fair 10240mb,10vcores 30720mb,30vcores 100 fair 1.0 * 5120mb,5vcores 20480mb,20vcores 100 fair 2.0 businessA,lxw1234 group_businessA,group_lxw1234 businessA,hadoop group_businessA,supergroup 5120mb,5vcores 20480mb,20vcores 100 fair 1 businessB group_businessA businessA,hadoop group_businessA,supergroup 5120mb,5vcores 20480mb,20vcores 100 fair 1.5 businessC group_businessC businessC,hadoop group_businessC,supergroup minResources 最小资源 maxResources 最大资源 maxRunningApps 最大同时运行application数量 weight 资源池权重 aclSubmitApps 允许提交任务的用户名和组; 格式为: 用户名 用户组 当有多个用户时候,格式为:用户名1,用户名2 用户名1所属组,用户名2所属组 aclAdministerApps 允许管理任务的用户名和组; 格式同上。 Fair Scheduer各资源池配置及使用情况,在ResourceManager的WEB监控页面上也可以看到:

假设在生产环境Yarn中,总共有四类用户需要使用集群,开发用户、测试用户、业务1用户、业务2用户。为了使其提交的任务不受影响,我们在Yarn上规划配置了五个资源池,分别为 dev_group(开发用户组资源池)、test_group(测试用户组资源池)、business1_group(业务1用户组资源池)、business2_group(业务2用户组资源池)、default(只分配了极少资源)。并根据实际业务情况,为每个资源池分配了相应的资源及优先级等。
ResourceManager上fair-scheduler.xml配置如下:

30 2000mb,1vcores 10000mb,1vcores 1 fair 0.5 * 200000mb,33vcores 300000mb,90vcores 150 fair 2.5 dev_group hadoop,dev_group 70000mb,20vcores 95000mb,25vcores 60 fair 1 test_group hadoop,test_group 75000mb,15vcores 100000mb,20vcores 80 fair 1 business1_group hadoop,business1_group 75000mb,15vcores 102400mb,20vcores 80 fair 1 business2_group hadoop,business2_group 这样,每个用户组下的用户提交任务时候,会到相应的资源池中,而不影响其他业务。 需要注意的是,所有客户端提交任务的用户和用户组的对应关系,需要维护在ResourceManager上,ResourceManager在分配资源池时候,是从ResourceManager上读取用户和用户组的对应关系的,否则就会被分配到default资源池。在日志中出现”UserGroupInformation: No groups available for user”类似的警告。而客户端机器上的用户对应的用户组无关紧要。 每次在ResourceManager上新增用户或者调整资源池配额后,需要执行下面的命令刷新使其生效:

启海业务
1.所有的子件都会有一个子件码,什么时候生成子件码?
QC过程生成

2.所有子件数据都最终会存储在子件库存表(wms_ store_onlycode)里面吗?
存储在 wms_ store_onlycode和wms_ store_onlycode_bak
3. 销退和调拨是否会生成新的子件码?
销退新生成子件码,调拨不会。
4. wms_store_onlycode_bak数据什么(流程)时候写入?如果是出库写入的话,sflag怎么会是I?
5. 为什么还有wms_store_onlycode和wms_store_onlycode_bak为什么会有交集数据且有重复数据?这些重复数据表现规律是dealflag有规律交替为I,D 。
select * from wms_store_onlycode_bak
where onlycode in (‘301000000562485’,‘301000000589868’,‘301000000603656’)
order by onlycode,deltedate

  1. A:组盘-----M:搬运----I:上架----- D:移库/补货下架-----U:移库/补货上架----
    P:拣货-------- SOW:播种----- F:复核
    CB:更换周转箱/纸箱,CP:更换托盘
    T:集货(删除库存)
    QP:拣货取消;QF:复核取消
    E:冻结 J:解冻BY:报溢 PD:盘点
    7.货位在系统中的编码方式 ?楼巷列层阁

8.货主、供货商、客户区别
增值业务
9. 采购订单(wms_po_order)没有数据?
10. wms_store中to编号概念?to编号什么时候写入和修改
11. wms_in_to 和wms_issue_to的tono相同情况业务场景?
12. 所有本地仓使用的数据库表结构都一致吗?

1.select a.TaskType from WMSEXPRESS_JX.dbo.TA_ServiceStaffLog a
GROUP BY TASKTYPE ;
人物类型结果如下:
0
1
3
7
8
FGYC
GHBZ
GTP/FWM
SEWBQ
TTTM
WFXF
WJQL
WXXF
含义
2.TA_ServiceStaffLog 组成数量(ComponentNum)为小数场景? 是因为合作完成吗
3.TA_ServiceStaffLog 客户编号(customerno)为空场景?
4.增值服务能目前只记录到客户,能否细化到子件?

2.Hadoop Journal Node 作用
hadoop 集群中有两种节点,一种是namenode,还有一种是datanode。其中datanode主要负责数据的存储,namenode主要负责三个功能,分别是(1)管理元数据 (2)维护目录树 (3)响应客户请求 首先介绍下,元数据格式

3.Hadoop常用角色
NameNode
namenode主要负责三个功能,分别是(1)管理元数据 (2)维护目录树 (3)响应客户请求
HDFS 集群的命名空间是由NameNode 来存储的。NameNode 使用Fslmage 和EditLog 两个核
心的数据结构,如图4-2 所示。EditLog 事务日志文件记录每一个对文件系统元数据的改变,如在
HDFS 中创建一个新的文件,名称节点将会在EditLog 中插入一条记录来记录这个改变。整个命名
空间的信息包括文件块的映射表等都存放在Fslmage 文件中。

JournalNodes
两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
Hadoop balance
在线上的hadoop集群运维过程中,hadoop 的balance工具通常用于平衡hadoop集群中各datanode中的文件块分布,以避免出现部分datanode磁盘占用率高的问题(这问题也很有可能导致该节点CPU使用率较其他服务器高)。

Hive meatastore server
客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。
Metastore 有3中开启方式:
1–>默认开启方式:
没有配置metaStore的时候,每当开启bin/hive;或者开启hiveServer2的时候,都会在内部启动一个metastore嵌入式服务;资源比较浪费,如果开启多个窗口,就会存在多个metastore server。
2–>local mataStore(本地)
当metaStore和装载元数据的数据库(MySQL)存在同一机器上时配置是此模式,
开启metastore服务就只需要开启一次就好,避免资源浪费!
3–>Remote Metastore(远程)
当metaStore和装载元数据的数据库(MySQL)不存在同一机器上时配置是此模式,
开启metastore服务就只需要开启一次就好,避免资源浪费!
Job History Server
Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。默认情况下,Hadoop历史服务器是没有启动的,我们可以通过下面的命令来启动Hadoop历史服务器如何启动历史服务?

mr-jobhistory-daemon.sh start historyserver

这样我们就可以在相应机器的19888端口上打开历史服务器的WEB UI界面。可以查看已经运行完的作业情况。历史服务器可以单独在一台机器上启动,主要是通过以下的参数配置。
ResourceManager
ResourceManager基本职能
ResourceManager基本职能概括起来就以下几方面:
与客户端进行交互,处理来自于客户端的请求,如查询应用的运行情况等。
启动和管理各个应用的ApplicationMaster,并且为ApplicationMaster申请第一个Container用于启动和在它运行失败时将它重新启动。
管理NodeManager,接收来自NodeManager的资源和节点健康情况汇报,并向NodeManager下达管理资源命令,例如kill掉某个container。
资源管理和调度,接收来自ApplicationMaster的资源申请,并且为其进行分配。这个是它的最重要的职能。
Hbase Master
Hbase中HMaster作用
HMaster在功能上主要负责Table表和HRegion的管理工作,具体包括:
1、管理用户对Table表的增、删、改、查操作;
2、管理HRegion服务器的负载均衡,调整HRegion分布;
3、在HRegion分裂后,负责新HRegion的分配;
4、在HRegion服务器停机后,负责失效HRegion服务器上的HRegion迁移。

4.HDFS的高可用

5.Hadoop web监控界面
历史服务器的WebUI界面Hadoop jobhistory:http://szpbs-vlp-yuncang03.ky-tech.com.cn:19888/jobhistory/app
ResourceManager web:http://szpbs-vlp-yuncang01.ky-tech.com.cn:8088/cluster/nodes

9.Hadoop web监控界面

3.YARN
资源管理器(Resource Manager、Node Manager、Application Master 、Container)
1.HADOOP 1.0存在的问题
HDFS1.0存在的问题:

Namenode单点故障:集群的文件都是以“块(block)”的形式存储,并且为了容错,每个block有多个副本。namenode需要记录整个集群所有block及其副本的元数据信息(fsimage:文件目录结构,block和文件的映射关系等)和操作日志(edits),因此,在hadoop1.0框架中,namenode设计为单个节点,通常部署在一台性能强劲的计算机上,客户端上传的所有文件,都要先与namenode进行交互,由namenode管理。这样,namenode的可用性决定整个集群的存储系统的可用性。
Namenode压力过大,内存受限: 在集群启动时,namenode需要将集群所有block的元数据信息加载到内存,这样,当文件越来越多时,namenode的内存压力也会遇到瓶颈。
MapReduce1.0存在的问题:

JobTracker单点故障:MapReduce作为hadoop的计算框架,其作业的调度和资源分配是通过JobTracker完成。但是,因为资源管理是全局性的,因此,JobTracker仍然是单个节点,通常部署在一台性能强劲的计算机上。一旦该节点失败,整个集群的作业就全部失败。
不支持MapReduce之外的其它计算框架:hadoop1.0仅能支持MapReduce计算框架,随着人们对实时性的要求,spark、storm等计算框架也应运而出,但是hadoop1.0并不能良好地支持。
JobTracker访问压力大,影响系统扩展性:在hadoop1.0中,JobTracker负责所有作业的调度、各个作业的生命周期、各个作业中所有task的跟踪和失败重启等。因此,当集群中作业很多时,所有作业的map task和reduce task都要与JobTracker进行交互

为解决hadoop1.0中JobTracker单点故障问题,hadoop2.0开始将Hadoop 1.0中的JobTracker的集群资源分配和作业调度分为两个守护进程来控制,分别是Global Resource Manager(以下简称RM)和每个Application的ApplicationMaster(以下简称AM),这也是YARN最重要的两个组件。
HADOOP 2.X YARN实现
步骤:
1、Client向RM发出请求
2、RM返回一个ApplicationID作为回应
3、Client向RM回应Application Submission Context(ASC)。ASC包括ApplicationID、user、queue,以及其他一些启动AM相关的信息,除此之外,还有一个Container Launch Context(CLC),CLC包含了资源请求数(内存与CPU),job files,安全token,以及其他一些用以在一个node上启动AM的信息。任务一旦提交以后,client可以请求RM去杀死应用或查询应用的运行状态
4、当RM接受到ASC后,它会调度一个合适的container来启动AM,这个container经常被称作为container 0。AM需要请求其他的container来运行任务,如果没有合适的container,AM就不能启动。当有合适的container时,RM发请求到合适的NM上,来启动AM。这时候,AM的PRC与监控的URL就已经建立了。
5、当AM启动起来后,RM回应给AM集群的最小与最大资源等信息。这时AM必须决定如何使用那么当前可用的资源。YARN不像那些请求固定资源的scheduler,它能够根据集群的当前状态动态调整。
6、AM根据从RM那里得知的可使用的资源,它会请求一些一定数目的container。
7、RM将会根据调度策略,尽可能的满足AM申请的container。然后AM会将任务跑在container上,并监控和管理作业状态。当任务完成之后,AM会通知RM释放container资源。
功能
Resource Manager
处理客户端请求
启动/监控ApplicationMaster
监控NodeManager
资源分配与调度
Node Manager
单个节点上的资源管理和任务管理
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令
ApplicationMaster
数据切分
为应用程序申请资源,进一步分配给内部任务
任务监控和容错
Container
任务运行资源(节点,cpu,内存)
任务启动命令
任务运行环境
4.ZooKeeper
ZooKeeper 是分布式的、用Java 编写的、开放源码的分布式应用程序协调服务。ZooKeeper 作为一个高可用的分布式服务框架,主要用来解决分布式集群中应用系统的一致性问题。它可以减轻分布式应用程序所承担的协调任务,在越来越多的分布式系统
(Hadoop 、HBase 、Kafka )中, ZooKeeper 都作为核心组件使用,它是一个为分布式应用提供一致性服务的软件。
1.zookeeper的特点
1.原子性 2.顺序性 3.一致性 4.可靠性
2.HDFS NameNod高可用工作原理
HDFS高可用是zookeeper应用的应用场景。其工作原理如图所示:

5.CLOUDERA Manager
1.CDH 的Cloudera Manager免费与收费版的对比表
CDH 特性 免费版 付费版
Deployment, Configuration & Management 系统管理
Automated eployment & Hadoop Readiness Checks 自动化部署及快速检查 • •
Install the complete CDH stack in minutes and ensure optimal settings 安装完整的CDH及优化配置
Service Management 服务管理 • •
Configure and manage all CDH services, including Impala and Search, from a central interface 提供统一的界面管理与配置全部的CDH服务,包括cloudera impala及cloudera search
Security Management 安全 • •
Configure and manage security across the cluster – including Kerberos authentication and role-based (administrator and read-only) administration 跨群集的安全管理与配置(包括Kerberos认证及基于角色的管理)
Resource Management 资源管理 • •
Allocate cluster resources by workload or by user/group/application to eliminate contention and ensure Quality-of-Service (QoS) 根据工作量分配资源,或根据/user/group/application文件消除争用,保证QoS
High Availability HA • •
Easily configure and manage High Availability for various services like HDFS, MapReduce, Oozie, YARN, HBase 为多种服务配置HA:HDFS,MapReduce,Oozie,YARN,Hbase
Client Configuration Management 管理客户端配置 • •
Centrally configure all client access to the cluster 集中配置连接到群集的客户端
Node Templating 节点模板 • •
Easily deploy and expand heterogeneous clusters by creating templates for node roles 通过为节点角色创造模板,来部署和扩展不同的群集
Comprehensive Workflows 全面的工作流 • •
Perform end-to-end tasks such as start/stop/restart clusters, services and roles, add/delete hosts, decommission nodes etc. 执行端到端的任务,如群集、服务、角色级别的启停,增删主机,解除节点等。
Multi-Cluster Management 多群集管理 • •
Manage multiple CDH clusters from a single instance of Cloudera Manager 一个Manager管理多个CDH群集

Monitor
Service, Host & Activity Monitoring 服务、主机、活动的监控 • •
Get a consolidated, real-time view of the state of all services, hosts and activities running in the cluster 对服务、主机、活动的统一的实时的监控
Events & Alerts 事件和警报 • •
Create, aggregate and receive alerts on relevant Hadoop events pertaining to system health, log messages, user actions and activities Set thresholds and create custom alerts for metrics collected by CM 创建、合计、接收Hadoop相关的系统健康、日志信息、用户动作和活动的警报。设置阈值并创建用户警报。
Diagnose
Global Time Control 全程控制 • •
Correlate all views along a configurable timeline to simplify diagnosis 通过可配置的时间线串联所有视图,简化诊断。
Proactive Health Checks 健康预检 • •
Monitor dozens of service performance metrics and get alerts you when you approach critical thresholds 监控服务性能,当达到阈值时向用户报警。
Heatmaps 热度图 • •
Visualize health status and metrics across the cluster to quickly identify problem nodes and take action 图形化展示群集的健康状态,便于发现故障节点并修复。
Customizable Charts 可定制的图表 • •
Report and visualize on key time-series metrics about services, roles and hosts 按照时间顺序提供服务、角色和主机的形象报告。
Intelligent Log Management 智能日志管理 • •
Gather, view and search Hadoop logs collected from across the cluster 可以收集、观察和查询从群集中获得的Hadoop日志。
Integrate
Comprehensive API 广泛的API • •
Easily integrate Cloudera Manager with your existing enterprise-wide management and monitoring tools 可以简单的将CM与现有的企业范围的管理和监控工具集成起来。
3rd Party Application Management 对第三方应用的管理 • •
Deploy, manage and monitor services for 3rd party applications running on the cluster (e.g. data integration tools, math/machine learning applications, non-CDH services etc.) 部署、管理和监控运行在群集上的第三方应用服务。
Advanced Management Features (Enabled by Subscription)
Operational Report & Quota Management 操作报告和配额管理 •
Visualize current and historical disk usage; set user and group-based quotas; and track MapReduce, Impala, YARN and HBase usage 1.当前及历史磁盘用量展示
2.基于用户和组的配额设置
3.跟踪MapReduce、Impala、YARN和Hbase的用量
Configuration History & Rollbacks 记录配置历史及回滚 •
Maintain a trail of all actions and a complete record of configuration changes, including the ability to roll back to previous states 保留所有活动及配置变化的痕迹档案,包含回滚到之前状态的能力。
Rolling Updates 滚动升级 •
Stage service updates and restarts to portions of the cluster sequentially to minimize downtime when upgrading or updating your cluster 分阶段升级和重启群集各部分,最小化宕机时间。
AD Kerberos Integration AD与Kerberos的集成 •
Integrate directly with Active Directory to get started easily with Kerberos 直接与AD集成,可以方便的与Kerberos一起工作
Kerberos Wizard Kerberos向导 •
Easily configure Kerberos and trigger automated workflows to secure clusters 方便配置Kerberos,可以自动触发工作流来保证群集安全。
Hadoop SSL Related Configs Hadoop SSL相关配置 •
Simplify configs and eliminates need for safety valves 简化配置并减少安全阀的需求
LDAP/SAML Integration LDAP/SAML的集成 •
Integrate user credentials with Active Directory and enable single sign-on (SSO) capabilities 集成了基于AD的用户验证,并提供了SSO能力。
SNMP Support 对SNMP的支持 •
Send Hadoop-specific events and alerts to global monitoring tools as SNMP traps 以SNMP 异常报告的方式向全局监控工具发送Hadoop特定的事件和告警。(参见文末 注1)
Scheduled Diagnostics cloudera技术诊断的支持 •
Take a snapshot of the cluster state and automatically send it to Cloudera support to assist with optimization and issue resolution 优化和解决问题时,收集群集状态快照并自动发送至cloudera支持。
Automated Backup & Disaster Recovery
自动化备份和灾难恢复 •
6.sqoop

  1. sqoop简单import使用
    样例:
    import -D org.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://${erp_db_ip}:3306/base_db?tinyInt1isBit=false --username bigdata_read --password emEAmlj8IGoyXxjF --query “select
    id,customer_no,company_name,cooperate_type,carea,contact,contact_tele,site_province,site_city,site_county,site_town,lane,destination,detail_addr,open_date,first_storage_date,wh_code,billing_wh_code,customer_status,scrap_remark,is_protect,sk_remark,create_time,create_user_id,create_user,update_time,update_user_id,update_user,del_flag,remarks,now()
    as
    insert_update_time,‘base_db.base_customer’
    as
    data_source
    from
    base_db.base_customer
    where
    $CONDITIONS” -m 1 --split-by id --null-string \N --null-non-string \N --hive-drop-import-delims --delete-target-dir --target-dir /tmp/sqoop_tmp/stage.db/erp_base_customer --hive-import --hive-overwrite --hive-database tmp --hive-table erp_base_customer

delete-target-dir参数
当再次执行sqoop语句的时候,会报错,因为person文件夹已经存在了,我们需要先删除这个文件夹再运行sqoop语句。也可以使用sqoop提供的delete-target-dir参数
5append参数
如果目标文件夹在hdfs上已经存在,那么再次运行就会报错。可以使用–delete-target-dir来先删除目录。也可以使用append来往目录下追加数据。append和delete-target-dir是相互冲突的。
sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --table person –append
target-dir参数
上述的所有操作都是吧mysql中的数据写到一个默认的目录下,可以使用target-dir来指定hdfs的目录名
map的个数 sqoop默认配置就是4个map,用户也可以通过-m参数,自己指定map的数量
where参数 where参数可以进行一些简单的筛选
query参数
query参数就可以让用户随意写sql语句来查询了。query和table参数是互斥的
空值处理
sqoop提供了–null-string来处理字符类型的空值,提供了–null-non-string来处理非字符类型的空值
增量传输
增量导入的一个场景就是昨天导入了一批数据,今天又增加了部分数据,现在要把这部分数据也导入到hdfs中
sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --target-dir person-mysql -m 1 --table person --null-string “” --null-non-string “false” --check-column “id” --incremental append --last-value 5

7.HIVE

  1. Hive 的架构形式是什么样的?有哪些组件?
    Hive的组件总体上可以分为以下几个部分:对外的界面或接口、中间件或服务端部分、底层驱动、元数据(即hive系统参数数据)
    1)对外的接口包括以下几种:命令行CLI,Web界面、JDBC/ODBC接口
    2)中间件:包括thrift接口和JDBC/ODBC的服务端,用于整合Hive和其他程序。
    3)底层驱动:包括HiveQL编译器,优化器、执行的引擎(执行器)
    4)元数据metadata:存放系统参数

1)MetaStore类似于Hive的目录。它存放了有个表、区、列、类型、规则模型的所有信息。并且它可以通过thrift接口进行修改和查询。它为编译器提供高效的服务,所以,它会存放在一个传统的RDBMS,利用关系模型进行管理。这个信息非常重要,所以需要备份,并且支持查询的可扩展性。

2)查询编译器query compiler: HiveQL语句被处理,同传统的数据库编译器一样,都经历以下步骤:
解析parse -->类型检查和语法分析type check and semantic analysis -->优化optimization -->生成物理上的、真正的执行步骤

3)执行引擎execution engine:
根据任务的依赖关系,执行各种mapreduce任务。一个mapreduce任务都被序列化到一个plan.xml文件中,然后加载到 job cache中,并且各部分解析plan.xml(反序列化),并执行相关操作,将结果放入临时的位置,再由DML转移到指定位置。

2.HIVE安装、配置问题汇总

  1. 当在Hive中创建表的时候报错:
    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.MetaException(message:For direct MetaStore DB connections, we don’t support retries at the client level.)
    解决方案:这是由于字符集的问题,需要配置MySQL的字符集:
    alter database hive characterset latin1;

  2. 启动hive报错,信息如下:
    Terminal initialization failed; falling back to unsupported
    解决方案:
    引起该问题的主要原因是因为Hadoop里面yarn的lib中含有和hive的lib目录中版本不一致的jline的jar包,只需要把hive中的jline包同步过去就可以了,先删除yarn的lib中的jline包,再复制。
    cp /usr/hive/apache-hive-1.2.1-bin/lib/jline-2.12.jar /usr/hadoop/share/hadoop/yarn/lib/

  3. 在hive中执行show table或show databases提示如下输出信息:Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D

解决办法:
在hive下创建临时IO的tmp文件夹。然后将路径配置到hive-site.xml的下列参数中

hive.querylog.location
/usr/hive/apache-hive-1.2.1-bin/tmp
Location of Hive run time structured log file

hive.exec.local.scratchdir /usr/hive/apache-hive-1.2.1-bin/tmp Local scratch space for Hive jobs hive.downloaded.resources.dir /usr/hive/apache-hive-1.2.1-bin/tmp Temporary local directory for added resources in the remote file system. 保存,重启hive即可。 4. 如果在secure-crt中hive不能执行回退撤销操作,可在“会话选项”中的”仿真”设置终端选项为linux,如下图所示:
  1. hive里无法删除表,卡住没反应,mysql元数据库里show processlist,显示
    Waiting for table metadata lock。
    原因:元数据库字符集的问题。
    解决方法是:先删除存储mysql存储元数据的数据库hivemetadb;然后再创建hivemetadb;修改hivemetadb的字符集:alter database hivemetadbcharacter set latin1。注意这一步一定要在执行hive shell前执行,也就是hive初始化元数据库之前执行
  2. 在hive中执行insert into ……values、delete from….where …、updat….where操作,会报以下错

因为hive不支持记录级的插入、删除、修改(目前支持记录级别的插入、删除、修改处于测试阶段,需要修改相应配置文件,待验证)
7. 在运行Spark SQL CLI中需要使用到Hive Metastore,故需要在Spark中添加其uris。具体方法是在SPARK_HOME/conf目录下创建hive-site.xml文件,然后在该配置文件中,添加hive.metastore.uris属性,具体如下:


hive.metastore.uris
thrift://master:9083
Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.


8. 在hive中执行update、delete操作测试,出现以下错误信息
FAILED: SemanticException [Error 10297]: Attempt to do update or delete on table default.test that does not use an AcidOutputFormat or is not bucketed

  1. 测试hive四种数据导入方式
    一.从本地文件系统中导入数据到Hive表
    –创建测试表
    create table stu
    (idint, name string,
    ageint, tel string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’
    STORED AS TEXTFILE;

    load data local inpath ‘/usr/hive/apache-hive-1.2.1-bin/data/stu.txt’ into table stu;
    –创建测试表
    create table score
    (idint, project string,scoreint)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’
    STORED AS TEXTFILE;
    二.从hdfs导入数据到hive表
    shhadoop fs -put /usr/hive/apache-hive-1.2.1-bin/data/score.txt /data/ --本机文件导入到hdfs
    dfs -put /usr/hive/apache-hive-1.2.1-bin/data/score.txt /data --本机文件导入到hdfs

load data inpath ‘/data/score.txt’ into table score; --从hdfs导入数据到hive表
该操作hive表本身不存储数据,只是存储指向hdfs文件的指针,一旦hive上执行
三.insert into table stu3 select * from stu where id=1;
四.create table table_name as select * from table_name;
10. truanct table操作,会将hdfs本地文件目录的文件一并删除
11. hive中执行dfs–ls

3.HIVE调研
 Hive不是一个完整的数据库,hive中的数据库的概念仅仅是表的一个目录或者命名空间。Hive最大限制是不支持记录级别的插入、删除和更新。
 Hadoop是一个面向批处理的系统,而mapreduce任务的启动过程需要较长时间,所以hive查询延时比较严重。
 Hive不支持事务,也就没有commit,rollback。
 通过设置set hive.cli.print.header=true 配置cli输出字段内容
 索引:Hive中没有键的概念,但是用户可以对表进行索引;
 传统数据库是“写时模式”,即数据写入数据库时对模式进行检查,数据库对存储具有完全控制力;hive对底层存储没有这样的控制,hive不会对数据加载时进行验证,而是在查询时进行,也就是“读时模式“
 Hive默认数据库default,通过设置sethive.cli.print.current.db=true在提示符里面显示当前所在数据库;
 Hive并非支持所有的正则表达式功能;
 Hive默认管理的表的存储位置在配置项hive.metastore.warehouse.dir所定义的
 用户可以在Hive cli中执行hadoop的dfs命令,如:dfs -ls /;这种使用hadoop命令的方式实际上比在bash shell中执行的hadoopdfs命令高效,后者每次都启动一个新的jvm实例,而hive会在同一进程中执行这些命令;
 Hive中的外部表和管理表概念类似数据库中视图和物理表,外部表和管理表区别?
 从本地文件中导入数据到hive表中命令如下:
Load data local inpath‘本地文件目录+文件名’into table table_name……. ;
说明:local为本地文件系统路径不加local为分布式文件系统路径
指定Overwrite为删除插入数据,不指定则为添加插入数据
 通过查询语句向表中插入数据:
Insert table table_name partition (……) select * from table_name

 Hive中没有临时表概念
 Hive只支持等值join,原因是mapreduce很难实现这种非等值类型的连接
 左半开连接(left semi-join)比inner join高效
 视图:Hive不支持物化视图
 视图:Hive视图机制和数据库不一样,数据库是通过视图来控制访问权限和简化查询,在权限控制上不给用户授权访问原始数据表;hive目前不支持这个功能,也就是hive用户必须具有能够访问整个底层原始表权限,视图才能工作。
 Order by ,sort by ,cluster by ,retribute by 区别
 给已定义表增加列:
Alter table table_name add columns(col_name datatype)
无法在已有字段的开始或者中间增加新字段

 Join优化:
1.在执行join操作时将大表放在join语句的最右边;(在oracle中最大数据量的表放在最前,最小的表放在最后面。sql是从最后面开始反向解析的。)
2.如果所有join表中有一个表足够小,可以放入内存的,那么这时hive可以执行一个map-side join。
 本地模式
大多数的hadoop job 需要hadoop提供完整的可扩展性来处理大数据集的。不过有时hive的输入数据量是非常小的。在这种情况下,为查询触发执行任务任务的时间消耗可能比实际job执行的时间要多的多。对于大数据这种情况,hive可以通过本地模式在单台机器上处理所有任务。对于小数据集,执行时间可以明显缩短。启用本地模式样例:
Set oldjobtracker=${hiveconf:mapred.job.tracker};
Set mapred.job.tracker=local;
Set mapred.tmp.dir= /usr/hive/apache-hive-1.2.1-bin/tmp;
 严格模式
Hive提供了一个严格模式,可以防止用户执行那些意想不到的不好的查询。设置严格模式语句如下:
Set hvie.mapred.mode=strict;
一旦设定为严格模式,则查询受到以下约束限制

  1. 对于分区表,除非where条件中含有分区字段过滤条件,否则限制执行;
  2. 对于使用order by 语句查询必须使用limit语句。因为order by 语句为了执行排序会将所有结果数据分发到同一个reducer中进行处理。强制要求用户增加limit防止ruduce额外执行很长一段时间。
  3. 限制笛卡儿积的执行。在执行join操作时必须指定on关键字段匹配条件。

 Hive权限机制
Hive从0.10可以通过元数据控制权限。但是Hive的权限控制并不是完全安全的。基本的授权方案的目的是防止用户不小心做了不合适的事情。
为了使用Hive的授权机制,有两个参数必须在hive-site.xml中设置:

HIVE支持以下权限:
权限名称 含义
ALL 所有权限
ALTER 允许修改元数据(modify metadata data of object)—表信息数据
UPDATE 允许修改物理数据(modify physical data of object)—实际数据
CREATE 允许进行Create操作
DROP 允许进行DROP操作
INDEX 允许建索引(目前还没有实现)
LOCK 当出现并发的使用允许用户进行LOCK和UNLOCK操作
SELECT 允许用户进行SELECT操作
SHOW_DATABASE 允许用户查看可用的数据库
HIVE支持以下权限:
权限名称 含义
ALL 所有权限
ALTER 允许修改元数据(modify metadata data of object)—表信息数据
UPDATE 允许修改物理数据(modify physical data of object)—实际数据
CREATE 允许进行Create操作
DROP 允许进行DROP操作
INDEX 允许建索引(目前还没有实现)
LOCK 当出现并发的使用允许用户进行LOCK和UNLOCK操作
SELECT 允许用户进行SELECT操作
SHOW_DATABASE 允许用户查看可用的数据库

   HIVE操作和权限之间的关系

Operation ALTER UPDATE CREATE DROP INDEX LOCK SELECT SHOW_DATABASE
LOAD √
EXPORT √
IMPORT √ √
CREATE TABLE √
CREATE TABLE AS SELECT √ √
DROP TABLE √
SELECT √
ALTER TABLE ADD COLUMN √
ALTER TABLE REPLACE COLUMN √
ALTER TABLE RENAME √
ALTER TABLE ADD PARTITION √
ALTER TABLE DROP PARTITION √
ALTER TABLE ARCHIVE √
ALTER TABLE UNARCHIVE √
ALTER TABLE SET PROPERTIES √
ALTER TABLE SET SERDE √
ALTER TABLE SET SERDEPROPERTIES √
ALTER TABLE CLUSTER BY √
ALTER TABLE PROTECT MODE √
ALTER PARTITION PROTECT MODE √
ALTER TABLE SET FILEFORMAT √
ALTER TABLE SET LOCATION √
ALTER PARTITION SET LOCATION √
ALTER TABLE CONCATENATE √
ALTER PARTITION CONCATENATE √
SHOW DATABASE √
LOCK TABLE √
UNLOCK TABLE √
4.Hive2 新版连接工具 beeline
Hive客户端工具后续将使用Beeline 替代HiveCLI ,并且后续版本也会废弃掉HiveCLI 客户端工具。
Beeline是Hive新的命令行客户端工具。Beeline是从 Hive 0.11版本引入的。
HiveServer2 支持一个新的命令行Shell,称为Beeline,它是基于SQLLine CLI的JDBC客户端。
Beeline支持嵌入模式(embedded mode)和远程模式(remote mode)。在嵌入式模式下,运行嵌入式的Hive(类似Hive CLI),而远程模式可以通过Thrift连接到独立的HiveServer2进程上。从Hive 0.14版本开始,Beeline使用HiveServer2工作时,它也会从HiveServer2输出日志信息到STDERR。
参数的含义其实在英文中已经给的很明确了,这里我给出中文解释

The Beeline CLI 支持以下命令行参数:
Option
Description
–autoCommit=[true/false] —进入一个自动提交模式:beeline --autoCommit=true
–autosave=[true/false] —进入一个自动保存模式:beeline --autosave=true
–color=[true/false] —显示用到的颜色:beeline --color=true
–delimiterForDSV= DELIMITER —分隔值输出格式的分隔符。默认是“|”字符。
–fastConnect=[true/false] —在连接时,跳过组建表等对象:beeline --fastConnect=false
–force=[true/false] —是否强制运行脚本:beeline–force=true
–headerInterval=ROWS —输出的表间隔格式,默认是100: beeline --headerInterval=50
–help —帮助 beeline --help
–hiveconf property=value —设置属性值,以防被hive.conf.restricted.list重置:beeline --hiveconf prop1=value1
–hivevar name=value —设置变量名:beeline --hivevar var1=value1
–incremental=[true/false] —输出增量
–isolation=LEVEL —设置事务隔离级别:beeline --isolation=TRANSACTION_SERIALIZABLE
–maxColumnWidth=MAXCOLWIDTH —设置字符串列的最大宽度:beeline --maxColumnWidth=25
–maxWidth=MAXWIDTH —设置截断数据的最大宽度:beeline --maxWidth=150
–nullemptystring=[true/false] —打印空字符串:beeline --nullemptystring=false
–numberFormat=[pattern] —数字使用DecimalFormat:beeline --numberFormat="#,###,##0.00"
–outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2] —输出格式:beeline --outputformat=tsv
–showHeader=[true/false] —显示查询结果的列名:beeline --showHeader=false
–showNestedErrs=[true/false] —显示嵌套错误:beeline --showNestedErrs=true
–showWarnings=[true/false] —显示警告:beeline --showWarnings=true
–silent=[true/false] —减少显示的信息量:beeline --silent=true
–truncateTable=[true/false] —是否在客户端截断表的列
–verbose=[true/false] —显示详细错误信息和调试信息:beeline --verbose=true
-d —使用一个驱动类:beeline -d driver_class
-e —使用一个查询语句:beeline -e “query_string”
-f —加载一个文件:beeline -f filepath 多个文件用-e file1 -e file2
-n —加载一个用户名:beeline -n valid_user
-p —加载一个密码:beeline -p valid_password
-u —加载一个JDBC连接字符串:beeline -u db_URL

实例:
beeline -u “jdbc:hive2://10.120.120.14:10000/default;principal=hive/[email protected]” -e “select * from tmp.tmp_run_cnt limit 10”>>tt.csv

好,现在开始讲解,重新运行作业,除了需要原有流程的id之外,还需要重新配置作业属性,它可以和原来的属性不一样,这里面有两个属性是必须要注意的,它们是重新提交作业必须具备的属性,如果不存在就会报错的,它们分别是oozie.wf.rerun.failnodes和oozie.wf.rerun.skip.nodes。这两个必须必须存在一个,第一个是自动运行失败的流程节点,第二个是需要跳过的节点,通过设置这个属性的话,如果已经运行成功的节点不在这个属性里面的话就可以让已经运行成功的节点再运行一遍了!

  1. HIVE默认log文件保存的地方
    /tmp/文件夹的hive.log文件中,全路径就是/tmp/当前用户名/hive.log。
    /hive metastore sever. /var/log/hive/hive.log
    2.如何定位当前job的log信息
    每个job执行后都会产生Query ID,在hive.log中搜索关键字。确认时间一致后,之后的log就是当前job的信息。
    Query ID = root_20171108160217_d51b321f-1902-4353-ae5b-2ebe5227f82f
    3,如何查看更多的错误信息
    在默认的日志级别情况下,是不能将DEBUG信息输出,这样一来出现的各种详细的错误信息都是不能数错的。但是我们可以通过以下两种方式修改log4j输出的日志级别,从而利用这些调试日志进行错误定位,具体做法如下:
    $ hive --hiveconf hive.root.logger=DEBUG,console (hive启动时用该命令替代)
    或者在${HIVE_HOME}/conf/hive-log4j.properties文件中找到hive.root.logger属性,并将其修改为下面的设置
    hive.root.logger=DEBUG,console
    具体如何查询,就看自己了

8.Streamset
https://cloud.tencent.com/developer/article/1078852
1.关于StreamSets


StreamSets由Informatica前首席产品官Girish Pancha和Cloudera前开发团队负责人Arvind Prabhakar于2014年创立。他们成立该公司主要是应对来自动态数据(data in motion)的挑战 - 包括数据源,数据处理和数据本身,这是一个称为“数据漂移“(https://streamsets.com/reports/data-drift/)的问题。StreamSets设想从头开始管理数据流,避免已有产品和工具的缺陷,并启用一种管理动态数据(data in motion)的新方法。
他们的第一款产品StreamSets Data Collector(https://streamsets.com/products/sdc)被数百家公司用于构建复杂的任意数据流,其中包括财富500强企业,涵盖金融服务,制造业,医疗,媒体,制药和技术等多个行业。
他们最新的产品StreamSets Dataflow Performance Manager,也叫DPM,主要用于构建端到端的数据流。DPM是一个运行控制中心,可以让你映射(数据流),内置的测量和监测确保持续的数据传输和控制动态数据(data in motion)的性能。首先,它将你不同的数据流映射到支持你的每个关键业务流程的拓扑中。然后监测这些拓扑的日常运行情况,根据掌握的性能情况,以满足应用的SLA为目标,确保你始终提供及时和可信的数据。
StreamSets在旧金山,硅谷和巴塞罗那设有办事处,并得到顶级硅谷风险投资公司的支持,包括Accel Partners,Battery Ventures,Ignition Partners和New Enterprise Associates(NEA)。 在大数据行业领先的合作伙伴包括Cloudera,Databricks,MapR和Microsoft。
好了,Fayson讲点人话吧,StreamSets是一个大数据采集工具,数据源支持包括结构化和半/非结构化,目标源支持HDFS,HBase,Hive,Kudu,Cloudera Search, ElasticSearch等。它包括一个拖拽式的可视化数据流程设计界面,定时任务调度等功能。举例,它可以将数据源从Kafka+Spark Streaming连接到你的Hadoop集群,而不需要写一行代码。很炫酷有木有!!!下面我们随便看几张截图了再往后走。

2.文档编写目的


本文档主要讲述如何在Cloudera Manager 管理的集群中安装StreamSets和基本使用。
• 内容概述:

  1. StreamSets安装配置
  2. StreamSets基本使用
    3.常见问题
    • 测试环境:
    1.操作系统为:Redhat7.2
    2.CM和CDH为:5.13.1
    3.安装步骤
    3.1.安装前准备

到StreamSets官网提供的下载址:https://archives.streamsets.com/index.html
下载以下文件:这里下载使用的是 3.0版本
1.manifest.json 文件
2.STREAMSETS_DATACOLLECTOR-3.0.0.0-el7.parcel文件(比较大约4G左右,包含比较完整的插件)
3.STREAMSETS-3.0.0.0.jar

3.2.配置本地Parcel包


将下载的manifest.json和 STREAMSETS_DATACOLLECTOR-3.0.0.0-el7.parcel,放在一个新建文件夹StreamSets3.0中,并移动到/var/www/html 目录中,做离线包的下载地址,用浏览器访问如下,表示成功

3.3.配置CSD


将STREAMSETS-3.0.0.0.jar拷贝到/opt/cloudera/csd,并更改权限,然后重启cloudera-scm-server服务

[root@cdh4 ~]# cp STREAMSETS-3.0.0.0.jar /opt/cloudera/csd
[root@cdh4 csd]# sudo chown cloudera-scm:cloudera-scm STREAMSETS-3.0.0.0.jar && sudo chmod 644 STREAMSETS-3.0.0.0.jar
[root@cdh4 ~]# systemctl restart cloudera-scm-server
(可左右滑动)
3.4.下载分发激活Parcel包


在CM界面中点击Parcel > 配置 > 添加StreamSets的Parcel包路径,并保持修改

并下载分发和激活(本文档省略该步骤,直接查看激活后的状态)

3.5.添加StreamSets服务
完成上述步骤后,在集群 > 添加服务 中添加StreamSets 的服务

选择StreamSets安装

选择一个DataCollector 节点,默认配置,继续等待安装和启动完成

4.StreamSets 的基本使用


官方文档示例:
https://streamsets.com/documentation/datacollector/3.0.0.0/help/index.html#Tutorial/BasicTutorial.html#task_jmz_3dn_ls
4.1.登录


点击 StreamSets > Data Collector WebUI访问

默认的账户: admin 密码:admin

4.2.准备工作

准备工作:
从官网下载测试数据
https://www.streamsets.com/documentation/datacollector/sample_data/tutorial/nyc_taxi_data.csv
创建测试目录并赋予权限:

[root@cdh1 ~]# mkdir /home/test_stream
[root@cdh1 ~]# mkdir /home/test_stream/data
[root@cdh1 ~]# mkdir /home/test_stream/error
[root@cdh1 ~]# mkdir /home/test_stream/out
[root@cdh1 ~]# chmod -R 777 /home/test_stream
(可左右滑动)
将测试数据拷贝到 /home/test_stream/data 目录下

[root@cdh1 ~]# ll /home/test_stream
[root@cdh1 ~]# cp nyc_taxi_data.csv /home/test_stream/data/
(可左右滑动)
4.3.创建第一个Pipelines

保存后进入如下页面:

4.4.添加文件目录和修改属性


在侧边中选择Diretory或者Select Origin > Directory ,添加一个目录,选中目录后点击configuration> file,填写Files Directory 和File Name Pattern 还有选择Read Order 为最近更新时间

点击dataFormat 标签,修改选择如下选择

4.5.配置改Pipelines 的错误日志写入方式和目录


4.6.预览文件
将鼠标放到Directory1 上看到只剩一个Validation_0011的异常然后点击预览,Validation_0011仅表示目录原点尚未连接到任何内容,并且不会阻止数据预览

预览配置这里,我们选中预览来源,写入目的地和执行者,显示字段类型,记住配置,然后执行

执行后我们使用表格的方式查看如下:

4.7.添加流选择器


${record:value(’/payment_type’) == ‘CRD’}
(可左右滑动)
这里只查看卡类型为信用卡的记录
4.8.使用jython 脚本来筛选卡片


使用Jython脚本创建了一个额外的字段credit_card_type,并通过评估信用卡号码的前几位来生成信用卡类型。如果记录具有信用卡付款类型而没有相应的信用卡号码,则脚本将返回错误消息。(这里下载的完整的parcels包所以Jython插件无需再下载,否则需要在Package Manager 中联网下载)
以下脚本放在 Jython >configuration>Jython>Script 中
try:
for record in records:
cc = record.value[‘credit_card’]
if cc == ‘’:
error.write(record, “Payment type was CRD, but credit card was null”)
continue
cc_type = ‘’
if cc.startswith(‘4’):
cc_type = ‘Visa’
elif cc.startswith((‘51’,‘52’,‘53’,‘54’,‘55’)):
cc_type = ‘MasterCard’
elif cc.startswith((‘34’,‘37’)):
cc_type = ‘AMEX’
elif cc.startswith((‘300’,‘301’,‘302’,‘303’,‘304’,‘305’,‘36’,‘38’)):
cc_type = ‘Diners Club’
elif cc.startswith((‘6011’,‘65’)):
cc_type = ‘Discover’
elif cc.startswith((‘2131’,‘1800’,‘35’)):
cc_type = ‘JCB’
else:
cc_type = ‘Other’
record.value[‘credit_card_type’] = cc_type
output.write(record)
except Exception as e:
error.write(record, e.message)
(可左右滑动)
脚本在评估器中应当如下:
4.9.使用Field Masker来屏蔽信用卡号码


现在让我们通过使用Field Masker来屏蔽信用卡号码,防止敏感信息到达内部数据库。
Field Masker提供固定和可变长度的掩码来屏蔽字段中的所有数据。要显示数据中的指定位置,您可以使用自定义掩码。要显示数据中的一组位置,可以使用正则表达式掩码来定义数据的结构,然后显示一个或多个组。
对于信用卡号码,我们将使用以下正则表达式来屏蔽除最后四位之外的所有数字:
信用卡号字段:/credit_card
(.*)([0-9]{4})
4.10.配置写入目的地


输出文件 tab 如下
Data Format 如下:
4.11.流程预览测试


可以查看到敏感信息被屏蔽

4.12.添加Expression Evaluator处理器
将一个Expression Evaluator处理器添加到画布并将Stream Selector的第二个默认流连 接到它。这会创建一个credit_card_type字段,指示信息不适用。
由于我们使用“n / a”作为表达式的常量,因此我们不需要使用美元符号和括号来表达表达式。但是如果我们想要使用它们,我们可以将它们定义为$ {‘credit_card_type’}和$ {‘N / A’}。

4.13.创建数据规则和告警信息


在我们运行基本管道之前,让我们添加一个数据规则和警报。数据规则是用户定义的规则,用于检查在两个阶段之间移动的数据。它们是查找异常值和异常数据的有效方法。
数据规则和警报需要详细了解通过管道的数据。对于更一般的管道监控信息,您可以使用度量标准规则和警报。
Jython Evaluator中的脚本为没有信用卡号码的信用卡交易创建错误记录。我们可以创建一个数据规则和警报,让我们知道记录数量何时达到指定阈值。
我们将使用带有record:value()函数的表达式来标识信用卡号码字段/credit_card为空的情况。该函数返回指定字段中的数据。
在流选择器和Jython评估器之间,选择链接或数据检查图标


1.“ dataRules”选项卡显示在“预览”面板中。
2.点击Add。
3.在“ data Rules”对话框中,配置以下属性。
4.14.校验执行


Jython评估器显示40条错误记录。单击错误记录编号以查看缓存的错误记录和相关错误消息的列表。
您也可以选择红色的数据检测图标来查看有关数据警报的信息并查看与数据警报相关的错误记录。
要继续扩展教程,请停止管道。
5.常见问题


执行的时候出现如下异常,说没有权限写入到root目录下

解决办法:选择管道>Configurtion > Error Records - Write to File >Directory 目录修改

提示:代码块部分可以左右滑动查看噢 为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

平台运维问题记录

  1. cloudera-manager内存阈值问题
    日期:2019-8-1
    现象:在hue执行sql group by操作时提示如下错误信息

原因:yarn资源不足
解决:调整内存阈值

  1. zabbix报警” Free disk space is less than 20% on volume”
    原因:磁盘剩余空间低于预警阈值
    处理:登录报警提示的服务器,
    (1) 查询各文件目录占用空间情况 sudo du –sh *
    (2) /var/log/impalad/ lineage 日志占用空间较大
    (3) sudo ls -l -h lineage/|awk ‘{print $6}’|uniq –c
    ls -l -h |awk ‘{print $6}’|uniq -c
    (4)
    sudo tail -100f lineage/impala_lineage_log_1.0-1563308568504
    linux 删除多少天以前的文件
    find 命令可以完成这一需求,比如删除3天前的所有以“.log”结尾的文件:
    find /文件路径 -name “*.log” -mtime +2 -exec rm {} ;
    说明:
  2. 文件路径是目标文件所在路径;
  3. -name 设定目标文件名,建议采用,否则可能误删其他文件;
  4. -ctime 文件最后一次修改时间,后面只能用整数,单位为天,同时,还有atime,mtime,amin,cmin,mmin等时间参数可选,具体请查看帮助;
  5. 时间说明如下图(随手画的,大概是这个意思),所以删除三天前的文件要用+2
  6. -exec 表示需要执行的命令,{}代表find找到的内容,";“是固定写法表示结束-exec,
    所以例子的”-exec rm {} ;" 就表示对find找到的符合条件的文件执行删除操作
    sudo find /var/log/impalad/lineage -mtime +30 -name “impala_lineage_log_1.0-156*” -exec rm {} ;
  7. Oozie.action.max.output.data(输出大小)设置
    通过hue执行shell action时候,sqoop导入hive操作,发现oozie导入结果报错,实际上查看hive表中数据已经成功导入,报错信息如下:

解决思路是在oozie-site.xml文件中添加如下属性后,需要重启oozie
Oozie.action.max.output.data=819620000

  1. HUE设置导出数据记录行数限制
    查询HUE出数据记录行数参数:

DOWNLOAD_CELL_LIMIT:表格限制的大小,行数 * 列数
DOWNLOAD_ROW_LIMIT:行数的限制
修改配置文件路径:/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/apps/beeswax/src/beeswax/conf.py
在CDH的安装目录下寻找源码对应的配置文件,在/opt/cloudera/parcels/CDH/lib/hue/apps/beeswax/src/beeswax下找到了和源码一样的conf.py,于是抱着试一试的心态修改了其中的配置,然后重启了HUE,果然就生效了:
5. 从大数据平台导出数据文件到本地

  1. hive -e “use dm;select * from dm.dm_fact_cost_customer where year_month=‘2019-06’;”>>/home/qhyadmin/exp_data_dir/dm_fact_cost_customer.csv
  2. mv dm_fact_cost_customer.csv /tmp
    6.Hive Metastore canary 创建 hue hdfs 主目录失败

检查:
1)hdfs是否处于safemode,正常是off

hdfs dfsadmin -safemode get

Safe mode is OFF
2)hdfs datanode是否健康,磁盘空间是否空闲,可自行上传文件测试

hdfs dfsadmin -report

3)根据错误提示查看目录权限,如果有问题,改为777

hdfs dfs -ls /tmp

Found 3 items
d--------- - hdfs supergroup 0 2019-02-18 23:57 /tmp/.cloudera_health_monitoring_canary_files

hdfs dfs -chmod 777 /tmp/.cloudera_health_monitoring_canary_files

4)确认metastore 数据库密码无修改,数据库连接正常
如果都确认过还报错,请重启cloudera-scm-server

The health test result for ZOOKEEPER_SERVER_MAX_LATENCY has become disabled: Test disabled while the role is stopped: Test of whether the ZooKeeper server’s maximum request latency is too high.
The health test result for ZOOKEEPER_SERVER_QUORUM_MEMBERSHIP has become disabled: Test disabled while the role is stopped: Test of whether the ZooKeeper server is a member of a quorum.

(1)

(2)

(3) yarn日志

{ “traceback”: [ [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/core/handlers/exception.py”, 41, “inner”, “response = get_response(request)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/core/handlers/base.py”, 249, “_legacy_get_response”, “response = self._get_response(request)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/core/handlers/base.py”, 187, “_get_response”, “response = self.process_exception_by_middleware(e, request)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/core/handlers/base.py”, 185, “_get_response”, “response = wrapped_callback(request, *callback_args, **callback_kwargs)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/utils/decorators.py”, 185, “inner”, “return func(*args, **kwargs)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/apps/oozie/src/oozie/decorators.py”, 113, “decorate”, “return view_func(request, *args, **kwargs)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/apps/oozie/src/oozie/decorators.py”, 75, “decorate”, “return view_func(request, *args, **kwargs)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/apps/oozie/src/oozie/views/editor2.py”, 367, “submit_workflow”, “return _submit_workflow_helper(request, workflow, submit_action=reverse(‘oozie:editor_submit_workflow’, kwargs={‘doc_id’: workflow.id}))” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/apps/oozie/src/oozie/views/editor2.py”, 426, “_submit_workflow_helper”, “‘is_oozie_mail_enabled’: _is_oozie_mail_enabled(request.user),” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/apps/oozie/src/oozie/views/editor2.py”, 434, “_is_oozie_mail_enabled”, “oozie_conf = api.get_configuration()” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/desktop/libs/liboozie/src/liboozie/oozie_api.py”, 328, “get_configuration”, “resp = self._root.get(‘admin/configuration’, params)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/desktop/core/src/desktop/lib/rest/resource.py”, 122, “get”, “return self.invoke(“GET”, relpath, params, headers=headers, allow_redirects=True, clear_cookies=clear_cookies)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/desktop/core/src/desktop/lib/rest/resource.py”, 78, “invoke”, “log_response=log_response)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/desktop/core/src/desktop/lib/rest/resource.py”, 97, “_invoke”, “clear_cookies=clear_cookies)” ], [ “/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hue/desktop/core/src/desktop/lib/rest/http_client.py”, 211, “execute”, “raise self._exc_class(ex)” ] ] }

http

这里写自定义目录标题

  • This Python file uses the following encoding: utf-8
    • 5.将interfaces文件修改如上IP为主机上外网的IP 然后sudo /etc/init.d/networking restart
  • Generated by NetworkManager
  • network-manager - network connection manager
  • The Network Manager daemon manages the system's network connections,
  • automatically switching between the best available.

< p>description "network connection manager"< p>#start on (local-filesystems
  • and started dbus
  • and static-network-up)
  • set $LANG so that messages appearing on the GUI will be translated. See LP: 875017
  • Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
  • DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
  • vi /etc/profile
  • Instead of skip-networking the default is now to listen only on
  • localhost which is more compatible and is not less secure.
    • 创建主题(4个分区,2个副本) bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 4 --topic test
    • 查询集群描述
    • 消费者列表查询
    • 新消费者列表查询(支持0.9版本+)
    • 显示某个消费组的消费详情(仅支持offset存储在zookeeper上的)
    • 生产者 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
    • 消费者 bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test
    • 新生产者(支持0.9版本+) bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test --producer.config config/producer.properties
    • 新消费者(支持0.9版本+) bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --new-consumer --from-beginning --consumer.config config/consumer.properties
    • 高级点的用法 bin/kafka-simple-consumer-shell.sh --brist localhost:9092 --topic test --partition 0 --offset 1234 --max-messages 10
  • mr-jobhistory-daemon.sh start historyserver
  • hdfs dfsadmin -safemode get
  • hdfs dfsadmin -report
  • hdfs dfs -ls /tmp
  • hdfs dfs -chmod 777 /tmp/.cloudera_health_monitoring_canary_files
  • 欢迎使用Markdown编辑器
    • 新的改变
    • 功能快捷键
    • 合理的创建标题,有助于目录的生成
    • 如何改变文本的样式
    • 插入链接与图片
    • 如何插入一段漂亮的代码片
    • 生成一个适合你的列表
    • 创建一个表格
      • 设定内容居中、居左、居右
      • SmartyPants
    • 创建一个自定义列表
    • 如何创建一个注脚
    • 注释也是必不可少的
    • KaTeX数学公式
    • 新的甘特图功能,丰富你的文章
    • UML 图表
    • FLowchart流程图
    • 导出与导入
      • 导出
      • 导入

    欢迎使用Markdown编辑器

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G
    查找:Ctrl/Command + F
    替换:Ctrl/Command + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    你可能感兴趣的:(工作总结,大数据)