HDFS读写过程
HDFS Client向NameNode发送请求(读取哪些数据),并得到元数据,调用FileSystem的open函数通过RPC向NameNode发送请求,打开文件。
- 卸载不符的Java版本
查看软件
rpm -qa | grep java
卸载软件
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64 tzdata-java-2012j-1.el6.noarch java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.x86_64
安装软件
rpm -ivh xxx.rpm
vim /etc/profile
新增:
# JAVA_HOME
JAVA_HOME=/data/hd/jdk1.7.0_79
PATH=$PATH:$JAVA_HOME/bin
生效:
source /etc/profile
- 添加用户
useradd deanyuan
passwd deanyuan
su deanyuan
在root用户下改变文件所属用户
chown -R deanyuan:deanyuan hadoop-2.5.0
- 配置hostname、hostname与ip的映射关系
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master.deanyuan.com
vim /etc/hosts
192.168.114.131 master.deanyuan.com master
vim /data/hd/hadoop-2.5.0/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/data/hd/jdk1.7.0_79
本地模式:mapreduce程序可以运行在本地,方便测试
mkdir -p /data/hd/hadoop-2.5.0/input
运行:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar grep input output 'dfs[a-z.]+'
bin/hadoop jar jar包所在目录 哪个程序 文件输入路径 文件输出路径 参数
伪分布式模式
分布式模式
Hive
压缩:snappy
hadoop编译:
1. 安装snappy库:谷歌快速压缩库
2. 编译hadoop源码: mvn package -Pdist,native -DskipTests -Dtar -Drequire.snappy(官方文档中找到的)
input -> map -> shuffle -> reduce -> output
对map输出的数据进行压缩
数据压缩优点:
数据量小
减少本地磁盘IO流
减少网络的IO流
压缩好处:
IO流
减少网络传输大小
提高job性能
压缩格式支持可分割的
hive中的数据存储
文件的存储格式
常用:textfile、orc、parquet
数据存储:
按行存储
按列存储
hive企业优化
FetchTask
大表拆分:子表
创建一张表通过查询语句
外部表、分区表
结合使用、多级分区
数据
数据格式
数据压缩
SQL优化
select e.a d.h from (select .. from e where e.filter) e join (select .. from d where d.filter) d on (e.deptno = d.deptno)
select e.a d.h from e join d on (e.deptno = d.deptno)
join 优化
Common/Shuffle/Reduce Join (最常见:大表对大表)
连接发生的阶段,发生在 Reduce Task
每个表的数据都是从文件中读取的
Map Join(大表对小表,小表对大表)
连接发生的阶段,发生在 Map Task
大表的数据是从文件中读取
小表的数据内存中
DistributedCache
SMB Join
sort merge bucket
数据平均分到那个里
执行计划:
explain sql语句
高级优化:
并行执行
parallel 10~20之间
JVM重用
可以让一个容器内,运行多个mapreduce任务,不超过9个,速度提高2/3
Reduce数据设置
是由人为决定,实际中最好测试
推测执行
specluative.execution 在写hive时,应该把它关闭
map数据
由块大小决定
动态分区调整
场景:
有张日志表,4、50G数据
src表
表的类型,外部表,分区表(month、day)
ip表
/month=2017-06/day=18
page表
refer表
前端数据入库
src表
load data ...
分区表:
load data path '' into table name partition(month='2017-06',day='20');
原表
针对不同的业务创建不同的子表
数据存储格式 orcfile/parquet
数据压缩 snappy
map output 数据压缩 snappy
外部表
分区表
定义UDF,对原表数据进行清洗
第一个udf
去掉引号
add jar /jar包所在路径
list jars
kafka作用:
解耦
Flume 文件收集框架
Cloudera开发的框架,实时收集数据
flume.apache.org
kafka/flume + storm/spark(spark streming)
Azkaban
http://azkaban.github.io/
Oozie
http://oozie.apache.org
数据仓库
Zeus:与Oozie比,有监控界面
yum源配置
出现错误
公钥私钥
Retrieving key from http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
hbase深入使用
hadoop数据库: 存储数据,检索数据
与RDBMS相比:海量数据,检索速度
设计好hbase表,百亿条中秒级查询
基于hdfs之上,数据安全性,普通商用PC Server
zookeeper
Hmaster
HRegionserver
NameNode
DataNode
rowkey(表设计的关键)
table
columnfamily
column(qualifier)
列式存储的数据库,NoSQL数据库
not only sql
NEWSQL
默认情况,创建一个表时,会给一个表创建一个Region
startkey
endkey
数据检索的三种方式:
get rowkey 速度最快
scan range 使用的最多
scan 没人用
HBase 数据存储
finally
PrefixFilter
PageFilter
Scan时的参数
setCacheBlocks(cacheBlocks)
setCaching(caching)
架构