Hbase实战Hbase安装
工具包:hbase-0.98.24-hadoop1-bin.tar.gz1tar zxvf hbase-0.98.24-hadoop1-bin.tar.gz
分别配置:
bashrc:环境变量
regionservers:节点host
hbase-env.sh:环境变量
hbase-site.xml:1cd hbase-0.98.0-hadoop1/conf
vi hbase-site.xml1234567891011121314151617181920212223242526<configuration> <property> ## 临时文件缓存目录 <name>hbase.tmp.dir</name> <value>/var/hbase</value> </property> <property> &l ...
NLP文本相似度
处理角度
语义角度
文字角度
相似度
余弦相似度 - 一个向量空间中两个向量夹角的余弦值作为衡量两个个体之间差异的大小 - 余弦值接近1,夹角趋于0,表明两个向量越相似 -
1cos(𝜃) = {b \over c}
相似度
如果向量a和b不是二维而是n维
示例:
cosine a和b代表两个不同向量
(1,2,1,1,1,2)
a: (1,4)
b: (2, 1)
公式:123 1*2 + 4*1———————————————————————————— sqrt(1*1+ 4*4) * sqrt(2*2+1*1)
例子一
例句
句子1: 这只皮靴号码大了,那只合适点
句子2: 这只皮靴号码不小,那只更合适
step1 : 分词
句子1: 这只 皮靴 号码 大了 那只 合适 点
句子2 : 这只 皮靴 号码 不小 那只 更 合适
step2: 列出所有词
这只,皮靴,号码,大了。那只,合适,不,小
step3: 计算词频
句子1:这只1,皮靴1,号码2,大了1。那只1,合适 ...
HbaseHbase定义
HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为Java。
是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,因此可以容错地存储海量稀疏的数据。
特性:
高可靠
高并发读写
面向列
可伸缩
易构建
行存储 vs 列存储
行存储:
优点:写入一次性完成,保持数据完整性
缺点:数据读取过程中产生冗余数据,若有少量数据可以忽略
列存储
优点:读取过程,不会产生冗余数据,特别适合对数据完整性要求不高的大数据领域
缺点:写入效率差,保证数据完整性方面差
优势
海量数据存储
随机快速访问
大量写操作的应用
Habase应用场景
互谅网搜索引擎数据存储
海量数据写入
消息中心
内容服务系统 (schema-free)
大表负责&所谓度索引
大批量数据读取
Hbase数据模型
RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。
Column Family:列族,拥有一个名称(string),包含一个 ...
HDFS
HDFS系统架构
Master:
NameNode
SecondaryNameNode
DataNode
主、从、client
client: 提交任务、读取数据从DataNode
状体由DataNode定时向NameNode发心跳状态
NameNode
管理着文件系统命名空间
维护这文件系统树及树种的所有文件和目录
存储元数据
NameNode保存元信息的种类有:
文件目录名及他们之间的层级关系
文件目录的所有者及其权限
每个文件块的名及文件有哪些组成
元数据保存在内存中
NameNode原信息并不包含每个快的位置信息
保存文件,block,DataNode之间的映射关系
NameNode:
文件名 -> block
block -> DataNode
DataNode:
block -> path
Hadoop更倾向存储大文件原因:
一般来说,一条元信息记录会占用200byte内存空间,假设块大小为64MB,备份数据量是3,那么一个1GB大小的文件将占用16 * 3=48个文件块,如果现在有1000个 ...
Storm
实时数据分析需求
实时报表动态展现
数据流量波动状态
反馈系统
时效性
秒级处理完成数据
Storm可以做到毫秒级
增量式处理
数据来一条,处理一条
开源分布式实时计算系统
Twitter出品
托管在github上
目前互联网中应用最广泛
相对稳定,有高容错性
开源
没有持久化
保证消息得到处理
支持支持多种编程语言
高效,用ZeroMq作底层消息处理
支持本地模式,可模拟集群所有功能
使用原语
类同MapReduce中的Map、Reduce
流式处理
时效性高
逐条处理数据
低延时
不是一个新概念
管道(PIPE)
cat input |grep pattern | sort | uniq > output
cat input | python map.py | sort | python reduce.py > outpu
分布式流处理
单机处理不了
内存
cpu
存储
多机流失系统
流量控制
容灾荣余
路径选择
扩展
Storm vs Hadoop
Storm任务没有结束,Hadoop任务执 ...
Zookeeper分布式系统的问题
与单机系统不同 - 内存地址一致 - 单机出问题概率低
分布式系统
一致性问题
容灾容错
执行顺序问题
事务性问题
核心问题
没有一个全局的主控,协调或控制中心
单机不可靠
环中有环
特殊场景下,特殊实现,但不通用
我们需要什么?
一个松散耦合的分布式系统中粗粒度锁以及可靠性存储(低容量)的系统
zookeeper
Hadoop系统
开源的,高效的,可靠的协同工作系统
名字服务器,分布式同步,组服务
Google内部实现叫Chubby
基于Paxos协议
zookeeper概述
数据模型
命名空间
与标准文件系统很相似
以/ 为间隔的路径名序列组成
只有绝对路径,没有相对路径
每个节点自身的信息
数据
数据长度
创建时间
修改时间
具有文件,路径的双重特点
zookeeper结构12345678/|-/service |-/webservers |-/server 1 |-/server 2 |-/locks|-/apps| ...
big-data
未读hadoop常用命令
格式化: ./hadoop namenode -format
启动集群: ./start-all.sh
插件进程: jps
查看集群fs目录文件 ./hadoop fs ls /
上传文件测试 ./hadoop fs -put /etc/hosts /
再查看一下目录文件 ./hadoop fs ls /
查看集群文件 ./hadoop fs cat /hosts
下载集群内文件到本地:./hadoop fs -get /The_Man_of_Property.txt .
杀进程 : hadoop job -kill jobid
MapReduce Map
确定map任务数时依次优先参考如下几个方面:
每个map任务使用的内存不超过800M,尽量在500M以下
每个map任务运行时间控制在大约20分钟, 最好1-3分钟
每个map任务处理的最大数据量为一个HDFS块大小,一个map任务处理的输入不能跨文件
map任务数总数不超过平台可用的任务槽位
map个数为split的份数
压缩文件不可切分
非压缩文件和sequence文件可以切分
dfs.block.size决定block大小,默认64
修改配置 vi ./config/hdfs-site.xml
配置加载问题
简单配置通过提交作业是-file分发
复杂较大的配置
传入hdfs
map中打开文件读取
建立内存结构
Reduce
确定reduce任务数时依次优先参考如下几个方面:
每个reduce任务使用的内存不超过800M,尽量在500M以下
每个reduce任务运行时间控制在大约20分钟, 最好1-3分钟
整个reduce阶段的输入数据总量
每个reduce任务处理的数据量控制在500M以内
map任务数与reduce任 ...
big-data
未读MapReduce Quick Start
实例代码1234567891011121314151617HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"INPUT_FILE_PATH_1="/The_Man_of_Property.txt"OUTPUT_PATH="/output"$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH# Step 1.$HADOOP_CMD jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_1 \ -output $OUTPUT_PATH \ -mapper "python ...
big-data
未读streaming简介
MapReduce和HDFS采用java实现,默认提供java编程接口
Streaming框架允许任何程序语言实现的程序在Hadoop MapReduce中使用
Streaming方便已有程序向Hadoop平台移植
streaming原理
streaming有点
方便移植Hadoop平台,只需按照一定的规格从标准输入读取数据,向标准输出写数据就可以
原有单机程序稍加改动就可以在Hadoop平台进行分布式处理
容易单机调试
cat input | mapper | sort | reducer > output
程序运行效率高
对于Cpu密集的计算,有些语言如C/C++编写的程序可能比用java编写的程序效率更高一些
便于平台进行资源控制
Streaming框架中通过limit等方式可以灵活地限制应用程序使用的内存等资源
Streaming局限
默认只能处理文本数据,如果要对二进制数据进行处理,比较好的办法是讲二进制的key和value进行base64编码转换成文本即可
两次数据拷贝和解析(分割),带来一定的开销