目录
理解Hadoop HDFS 6
1 介绍 6
2 HDFS设计原 6
21 设计目标 7
22 系统架构容错性设计 7
23 HDFS适合应类型 7
3 HDFS核心概念 7
31 Blocks 7
32 Namenode & Datanode 7
33 Block Caching 8
34 HDFS Federation 8
35 HDFS HA(High Availability高性) 8
4 命令行接口 9
5 Hadoop文件系统 11
6 Java接口 13
61 读操作 13
62 写数 14
63 目录操作 14
64 删数 15
7 数流(读写流程) 15
71 读文件 15
72 写文件 16
73 致性模型 17
74 Hadoop节点距离 18
8 相关运维工具 18
81 distcp行复制 18
82 衡HDFS集群 19
9 HDFS机架感知概念配置实现 19
机架感知什? 19
二告诉呢? 19
三什情况会涉机架感知? 19
四机架感知需考虑情况(权衡性性带宽消耗) 19
五通什方式够告知Hadoop NameNode Slaves机器属Rack?配置步骤 19
六网络拓扑机器间距离 21
10 HDFS理界面 21
YARN 22
基架构 22
工作机制 22
ResourceManager 23
资源理 23
务调度 23
部结构 23
作业提交全程 24
资源调度器 25
务推测执行 26
YARNWEB UI说明 27
集群运行状态查 29
Hadoop 30 新特性 30
Hadoop Common 30
Hadoop HDFS 30
Hadoop MapReduce 31
Hadoop YARN 31
总结 31
Hive部表外部表区 34
概念理解 34
创建部表t1 34
装载数(t1) 35
创建外部表t2 37
装载数(t2) 37
查文件位置 37
观察HDFS文件 40
重新创建外部表t2 41
官网解释 42
Hive数仓库拉链表流水表全量表增量表 42
Hadoop 320 完全分布式集群搭建 45
集群环境搭建 46
二Hadoop配置修改 47
修改 hadoopenvsh 配置 jdk 路径定义集群操作户 47
修改 coresitexml hadoop核心配置 47
修改 hdfssitexml hadoop 节点配置 47
修改 workers 告知 hadoop hdfsDataNode节点 48
修改 yarnsitexml 配置yarn服务 48
修改mapredsitexml 文件 49
修改配置文件 分发 节点三台服务器 49
三Hadoop服务启动 49
四运行WordCount 52
Linux台载MySQL 53
yum安装MySQL 56
Hive环境搭建 61
安装 61
二配置理 61
三运行 64
Apache Mahout环境搭建 65
PySpark环境搭建 66
Linux台载Python 38 66
1赖安装 66
2载安装包 67
3解压 67
4安装 67
5添加软链接 67
6测试 67
Linux升级安装python38配置pipyum 67
Linux安装Python 38环境卸载旧Python 70
安装新版Python 2713Python 362(Python 2Python 3存修改默认版Python 362) 72
Linux安装Apache Spark 310详细步骤 73
Spark安装配置 76
Spark集群安装设置 79
Ubuntu 1204Hadoop 220 集群搭建 82
Ubuntu 1404安装Hadoop240(单机模式) 87
启动Spark集群 94
Spark性优化 99
1Spark作业基运行原理 101
2资源参数调优 101
numexecutors 101
executormemory 102
executorcores 102
drivermemory 102
sparkdefaultparallelism 102
sparkstoragememoryFraction 102
sparkshufflememoryFraction 102
3资源参数参考示例 103
4Spark中三种Join策略 103
Broadcast Hash Join 103
Shuffle Hash Join 104
Sort Merge Join 104
5Spark 30 中 AQE新特性 105
6数仓库中数优化般原 109
7Spark 中宽赖窄赖 109
概述 109
详细运行原理 110
8Spark算子 113
9Spark RDD 144
Spark RDD特性 144
Spark RDD核心特性 144
关系型数库数性优化解决方案分表(前表历史表)表分区数清理原 147
原目 147
数否需清理阀值判断 147
满负载周期判断 147
迁移周期判断 147
类型数分区方案 148
历史表清理方案 148
注意点 148
数仓库缓慢变化维(Slow changing demenison) 实现方案 149
MySQLTeradataPySpark代码互转表代码 151
PySpark代码基结构 196
PySparkMySQL导出数parquet文件 197
PySparkTeradata导出数parquet文件 197
PySparkParquent文件写入Hive表 198
PySpark读取HiveSQL查询数写入parquet文件 198
PySpark获取Dataframe采样数保存CSV文件 198
PySpark连接MySQL数库插入数 198
PySpark连接Teradata数库插入数 198
PySpark遍历Dataframe行 199
PySpark移动Parquet文件目录 200
PySpark复制Parquet文件目录 200
PySpark删Parquet文件目录 200
PySpark修改Hive指存储路径 200
PySpark显示HDFS路径文件 201
PySpark显示普通Hive表容量(GB) 201
PySpark显示Hive分区表容量(GB) 201
PySpark显示HDFS目录子目录容量 201
PySpark调SqoopHDFS导入Hive表 201
HiveQLparquet文件创建Hive表 202
HiveQLHive表创建Hive视图 202
HiveQL格式化显示Hive查询结果数 202
Hive导出Hive查询结果数CSV文件 202
HiveQL显示Hive表 202
HiveQL显示Hive数库 202
Shell带日期参数运行HQL脚 202
HiveQL更新视图指天表数 203
HiveQL修改Hive表指存储文件 203
Shell清HDFS里数 204
Shell查HDFS数 204
Sqoop显示MySQL中数库 204
SqoopMySQL数库导入HDFS 204
SqoopHDFS数库导入MySQL 206
Sqoop显示MySQL中数库 206
Teradata支持数类型 207
MySQL支持数类型 209
Hive支持数类型 209
Parquet文件存储格式 210
项目组成 210
数模型 211
StripingAssembly算法 212
Parquet文件格式 215
性 216
项目发展 218
总结 218
Apache Airflow文档 218
原理 221
导 221
Airflow环境安装配置 222
通安装方法 222
Airflow环境安装(Docker) 224
Airflow环境配置(Docker) 224
Airflow环境安装(Windows 10) 225
容 227
项目 227
许证 228
快速开始 231
教程 231
Operator教程 257
图形界面截图 301
概念 305
数分析 323
命令行参数 325
调度触发器 345
插件 348
安全性 351
时区 358
Experimental Rest API 361
整合 362
Lineage 432
常见问题 433
API 参考 436
Apache Airflow 20 新特性 600
TaskFlow API(AIP31) 种新编写dags方式 600
完全REST API(AIP32) 601
调度器性显著提升 602
调度器高兼容 (AIP15) 603
务组 (AIP34) 603
崭新户界面 603
减少传感器负载智传感器 (AIP17) 604
简化KubernetesExecutor 604
Airflow core(核心)providers(第三方安装包) Airflow 拆分 60 包: 604
安全性 605
配置 605
基Apache Airflow企业级数框架架构设计 605
理解Hadoop HDFS
文详细介绍HDFS中许概念理解Hadoop分布式文件系统帮助
1 介绍
现代企业环境中单机容量法存储量数需跨机器存储统理分布集群文件系统称分布式文件系统旦系统中引入网络避免引入网络编程复杂性例挑战果保证节点时候数丢失
传统网络文件系统(NFS)然称分布式文件系统存限制NFS中文件存储单机法提供性保证客户端时访问NFS Server时容易造成服务器压力造成性瓶颈外果NFS中文件进行操作需首先步修改步服务端前客户端见某种程度NFS种典型分布式系统然文件确放远端(单)服务器面
NFS协议栈事实种VFS(操作系统文件种抽象)实现
HDFSHadoop Distributed File System简称Hadoop抽象文件系统种实现Hadoop抽象文件系统系统Amazon S3等集成甚通Web协议(webhsfs)操作HDFS文件分布集群机器时提供副进行容错性保证例客户端写入读取文件直接操作分布集群机器没单点性压力
果零开始搭建完整集群参考[Hadoop集群搭建详细步骤(260)](httpblogcsdnnetbingduanlbdarticledetails51892750)
2 HDFS设计原
HDFS设计初非常明确应场景适什类型应适什应相明确指导原
21 设计目标
· HDFSHadoop核心项目现数领域事实存储标准高容错性设计运行量廉价商业硬件设计会假设前提
· 首先会首先假设硬件障通常现象说块磁盘障概率非常服务器集群数千台甚万台节点时候(磁盘障)非常司空见惯事情说快速发现定位问题快速做障恢复重设计目标
· 第二HDFS适合容量数流式访问样场景说数场景动辄百G甚T文件相低延时言会更加意批量处理高吞吐样诉求
· 第三形成理念移动计算代价移动数代价数领域普遍识Hadoop推出HDFS存储时候推出MapReduce计算框架出目
· 存储非常文件:里非常指百MG者TB级实际应中已集群存储数达PB级根Hadoop官网YahooHadoop集群约10万颗CPU运行4万机器节点更世界Hadoop集群情况参考Hadoop官网
· 采流式数访问方式 HDFS基样假设:效数处理模式次写入次读取数集常数源生成者拷贝次然做分析工作
分析工作常读取中部分数全部 读取整数集需时间读取第条记录延时更重
· 运行商业硬件 Hadoop需特贵reliable()机器运行普通商机器(家供应商采购) 商机器代表低端机器集群中(尤集群)节点失败率较高HDFS目标确保集群节点失败时候会户感觉明显中断
22 系统架构容错性设计
HFDS典型MasterSlave架构里NameNode存储文件系统元数说分块文件路径等等类数BLOCK形式存储DataNode整体HDFS提供client客户提供文件系统命名空间操作说文件开关闭重命名移动等等
说HDFS存储文件提数副机制说里PART 0文件包括Block 1Block 3两Block时设置replica副数等213两Block会复制出外1外3存储外DataNode节点文件拆分两Block存储拥两副里面核心问题拆分数会存储方(DataNode)样调度策略问题Block副存节点(DataBlock)节点挂掉时候数丢失? HFDS解决问题呢?引入机架感知(Rack Awareness)样概念里引入两机架Rack 1Rack 2台机架会三样节点(DataNode)
23 HDFS适合应类型
场景适合HDFS存储数面列举:
1) 低延时数访问
延时求毫秒级应适合采HDFSHDFS高吞吐数传输设计牺牲延时HBase更适合低延时数访问
2)量文件
文件元数(目录结构文件block节点列表blocknode mapping)保存NameNode存中 整文件系统文件数量会受限NameNode存
验言文件目录文件块般占150字节元数存空间果100万文件文件占1文件块需约300M存十亿级文件数量现商机器难支持
3)方读写需意文件修改
HDFS采追加(appendonly)方式写入数支持文件意offset修改支持写入器(writer)
3 HDFS核心概念
31 Blocks
物理磁盘中块概念磁盘物理Block磁盘操作单元读写操作均Block单元般512 Byte文件系统物理Block抽象层概念文件系统Block物理磁盘Block整数倍通常KBHadoop提供dffsck类运维工具文件系统Block级进行操作
HDFSBlock块般单机文件系统默认128MHDFS文件拆分成blocksizedchunkchunk作独立单元存储Block文件会占整Block会占实际例 果文件1MHDFS中会占1M空间128M
HDFSBlock什?
化查找(seek)时间控制定位文件传输文件时间例假设定位Block需时间10ms磁盘传输速度100Ms果定位Block时间占传输时间例控制1Block需约100M
果Block设置MapReduce务中Map者Reduce务数 果集群机器数量会作业运行效率低
Block抽象处
block拆分单文件整磁盘容量构成文件Block分布整集群 理单文件占集群中机器磁盘
Block抽象简化存储系统Block需关注权限者等容(容文件级进行控制)
Block作容错高机制中副单元Block单位进行复制
32 Namenode & Datanode
整HDFS集群NamenodeDatanode构成masterworker()模式Namenode负责构建命名空间理文件元数等Datanode负责实际存储数负责读写工作
Namenode
Namenode存放文件系统树文件目录元数元数持久化2种形式:
· namespcae image
· edit log
持久化数中包括Block节点列表文件Block分布集群中节点信息系统重启时候重新构建(通Datanode汇报Block信息)
HDFS中Namenode成集群单点障Namenode时整文件系统HDFS针单点障提供2种解决机制:
1)备份持久化元数
文件系统元数时写文件系统 例时元数写文件系统NFS备份操作步原子
2)Secondary Namenode
Secondary节点定期合Namenodenamespace imageedit log 避免edit log通创建检查点checkpoint合会维护合namespace image副 Namenode完全崩溃时恢复数图Secondary Namenode理界面:
Secondary Namenode通常运行台机器合操作需耗费量CPU存数落NamenodeNamenode完全崩溃时会出现数丢失 通常做法拷贝NFS中备份元数Second作新Namenode
HA(High Availability高性)中运行Hot Standby作热备份Active Namenode障代原Namenode成Active Namenode
Datanode
数节点负责存储提取Block读写请求namenode直接客户端数节点周期性Namenode汇报节点存储Block相关信息
33 Block Caching
DataNode通常直接磁盘读取数频繁Block存中缓存默认情况Block数节点会缓存针文件性化配置
作业调度器利缓存提升性例MapReduce务运行Block缓存节点
户者应NameNode发送缓存指令(缓存文件缓存久) 缓存池概念理组缓存权限资源
34 HDFS Federation
知道NameNode存会制约文件数量HDFS Federation提供种横扩展NameNode方式Federation模式中NameNode理命名空间部分例NameNode理user目录文件 NameNode理share目录文件
NameNode理namespace volumnvolumn构成文件系统元数NameNode时维护Block Pool保存Block节点映射等信息NameNode间独立节点失败会导致节点理文件
客户端mount table文件路径映射NameNodemount tableNamenode群组封装层层Hadoop文件系统实现通viewfs协议访问
35 HDFS HA(High Availability高性)
HDFS集群中NameNode然单点障(SPOF Single Point Of Failure)元数时写文件系统Second NameNode定期checkpoint利保护数丢失提高性
NameNode唯文件元数fileblock映射负责方 挂包括MapReduce作业法进行读写
NameNode障时常规做法元数备份重新启动NameNode元数备份源:
· 文件系统写入中备份
· Second NameNode检查点文件
启动新Namenode需重新配置客户端DataNodeNameNode信息外重启耗时般较久稍具规模集群重启常需十分钟甚数时造成重启耗时原致:
1) 元数镜文件载入存耗时较长
2) 需重放edit log
3) 需收DataNode状态报告满足条件离开安全模式提供写服务
HadoopHA方案
采HAHDFS集群配置两NameNode分处ActiveStandby状态Active NameNode障Standby接责继续提供服务户没明显中断感觉般耗时十秒数分钟
HA涉实现逻辑
1) 备需享edit log存储
NameNode命NameNode享份edit log备切换时Standby通回放edit log步数
享存储通常2种选择
· NFS:传统网络文件系统
· QJM:quorum journal manager
QJM专门HDFSHA实现设计提供高edit logQJM运行组journal nodeedit log必须写部分journal nodes通常3节点允许节点失败类似ZooKeeper注意QJM没ZK然HDFS HA确ZK选举Namenode般推荐QJM
2)DataNode需时备发送Block Report
Block映射数存储存中(磁盘)Active NameNode挂掉新NameNode够快速启动需等DatanodeBlock ReportDataNode需时备两NameNode发送Block Report
3)客户端需配置failover模式(失效备援模式户透明)
Namenode切换客户端说感知通客户端库实现客户端配置文件中HDFS URI逻辑路径映射Namenode址客户端会断尝试Namenode址直成功
4)Standby代Secondary NameNode
果没启HAHDFS独立运行守护进程作Secondary Namenode定期checkpoint合镜文件edit日志
果Namenode失败时备份Namenode正关机(停止 Standby)运维员然头启动备份Namenode样没HA时候更省事算种改进重启整程已标准化Hadoop部需运维进行复杂切换操作
NameNode切换通代failover controller实现failover controller种实现默认实现ZooKeeper保证Namenode处active状态
Namenode运行轻量级failover controller进程该进程简单心跳机制监控Namenode存活状态Namenode失败时触发failoverFailover运维手动触发例日常维护中需切换Namenode种情况graceful(优雅) failover非手动触发failover称ungraceful failover
ungraceful failover情况没办法确定失败(判定失败)节点否停止运行说触发failover前Namenode运行QJM次允许Namenode写edit log前Namenode然接受读请求Hadoopfencing杀掉前NamenodeFencing通收回前Namenode享edit log访问权限关闭网络端口原Namenode继续接受服务请求STONITH技术前Namenode关机
HA方案中Namenode切换客户端说见前面已介绍通客户端库完成
4 命令行接口
HDFS提供种交互方式例通Java APIHTTPshell命令行命令行交互通hadoop fs操作例:
1 hadoop fs copyFromLocal 复制文件HDFS
2 hadoop fs mkdir 创建目录
3 hadoop fs ls 列出文件列表
Hadoop中文件目录权限类似POSIX模型包括读写执行3种权限:
· 读权限(r):读取文件者列出目录中容
· 写权限(w):文件文件写权限目录写权限指该目录创建者删文件(目录)权限
· 执行权限(x):文件没谓执行权限忽略目录执行权限访问器目录容
文件目录ownergroupmode三属性owner指文件者group权限组mode 者权限文件属组中组员权限非者非组员权限组成图表示者root拥读写权限supergroup组组员读权限读权限
文件权限否开启通dfspermissionsenabled属性控制属性默认false没开安全限制会客户端做授权校验果开启安全限制会操作文件户做权限校验特殊户superuserNamenode进程标识会针该户做权限校验
ls命令执行结果:
返回结果类似Unix系统ls命令第栏文件moded表示目录紧接着3种权限9位 第二栏指文件副数数量通dfsreplication配置目录表示没副说诸者组更新时间文件Unix系统中ls命令致
果需查集群状态者浏览文件目录访问Namenode暴露Http Server查集群信息般namenode机器50070端口
5 Hadoop文件系统
前面Hadoop文件系统概念抽象HDFS中种实现Hadoop提供实现图:
简单介绍Local文件系统抽象hdfs常见两种web形式(webhdfsswebhdfs)实现通HTTP提供文件操作接口harHadoop体系压缩文件文件时候压缩成文件效减少元数数量viewfs前面介绍HDFS Federation张提客户端屏蔽Namenode底层细节ftp顾名思义ftp协议实现文件操作转化ftp协议s3aAmazon云服务提供存储系统实现azure微软云服务台实现
前面提命令行HDFS交互事实方式操作文件系统例Java应程序orgapachehadoopfsFileSystem操作形式操作基FileSystem进行封装里介绍HTTP交互方式
WebHDFSSWebHDFS协议文件系统暴露HTTP操作种交互方式原生Java客户端慢适合操作文件通HTTP2种访问方式直接访问通代理访问
直接访问
直接访问示意图:
NamenodeDatanode默认开嵌入式web serverdfswebhdfsenabled默认truewebhdfs通服务器交互元数操作通namenode完成文件读写首先发namenode然重定datanode读取(写入)实际数流
通HDFS代理
采代理示意图示 代理处通代理实现负载均衡者带宽进行限制者防火墙设置代理通HTTP者HTTPS暴露WebHDFS应webhdfsswebhdfs URL Schema
代理作独立守护进程独立namenodedatanodehttpfssh脚默认运行14000端口
FileSystem直接操作命令行HTTTP外C语言APINFSFUSER等方式里做介绍
6 Java接口
实际应中HDFS数操作通FileSystem操作部分重点介绍相关接口关注HDFS实现类DistributedFileSystem相关类
61 读操作
URL读取数者直接FileSystem操作
Hadoop URL读取数
javanetURL类提供资源定位统抽象定义种URL Schema提供相应处理类进行实际操作hdfs schema便样种实现
1 InputStream in null
2 try {
3 in new URL(hdfsmasteruserhadoop)openStream()
4 }finally{
5 IOUtilscloseStream(in)
6 }
定义Schema需设置URLStreamHandlerFactory操作JVM进行次次操作会导致通常静态块中完成面截图示例:
FileSystem API读取数
1) 首先获取FileSystem实例般静态get工厂方法
1 public static FileSystem get(Configuration conf) throws IOException
2 public static FileSystem get(URI uri Configuration conf) throws IOException
3 public static FileSystem get(URI uri Configuration confString user) throws IOException
果文件通getLocal获取文件系统象:
public static LocalFileSystem getLocal(COnfiguration conf) thrown IOException
2)调FileSystemopen方法获取输入流
1 public FSDataInputStream open(Path f) throws IOException
2 public abstarct FSDataInputStream open(Path f int bufferSize) throws IOException
默认情况open4KBBuffer根需行设置
3)FSDataInputStream进行数操作
FSDataInputStreamjavaioDataInputStream特殊实现基础增加机读取部分读取力
1 public class FSDataInputStream extends DataInputStream
2 implements Seekable PositionedReadable
3 ByteBufferReadable HasFileDescriptor CanSetDropBehind CanSetReadahead
4 HasEnhancedByteBufferAccess
机读取操作通Seekable接口定义:
1 public interface Seekable {
2 void seek(long pos) throws IOException
3 long getPos() throws IOException
4 }
seek操作开销昂贵慎
部分读取通PositionedReadable接口定义:
1 public interface PositionedReadable{
2 public int read(long pistion byte[] bufferint offser int length) throws IOException
3 public int readFully(long pistion byte[] bufferint offser int length) throws IOException
4 public int readFully(long pistion byte[] buffer) throws IOException
5 }
62 写数
HDFS中文件FileSystem类create方法重载形式创建create方法返回输出流FSDataOutputStream调返回输出流getPos方法查前文件位移进行seek操作HDFS仅支持追加操作
创建时传递回调接口Peofressable获取进度信息
append(Path f)方法追加容已文件实现提供该方法例Amazon文件实现没提供追加功
面例子:
1 String localSrc args[0]
2 String dst args[1]
3
4 InputStream in new BufferedInputStream(new FileInputStream(localSrc))
5
6 Configuration conf new Configuration()
7 FileSystem fs FileSystemget(URIcreate(dst)conf)
8
9 OutputStream out fscreate(new Path(dst) new Progressable(){
10 public vid progress(){
11 Systemoutprint()
12 }
13 })
14
15 IOUtilscopyBytes(in out 4096true)
63 目录操作
mkdirs()方法会动创建没级目录
HDFS中元数封装FileStatus类中包括长度block sizereplicaions修改时间者权限等信息FileSystem提供getFileStatus方法获取FileStatusexists()方法判断文件者目录否存
列出文件(list)listStatus方法查文件者目录信息
1 public abstract FileStatus[] listStatus(Path f) throws FileNotFoundException
2 IOException
Path文件时候返回长度1数组FileUtil提供stat2Paths方法FileStatus转化Path象
globStatus通配符文件路径进行匹配:
public FileStatus[] globStatus(Path pathPattern) throws IOException
· 1
PathFilter定义文件名滤根文件属性进行滤类似javaioFileFilter例面例子排定正表达式文件:
1 public interfacePathFilter{
2 boolean accept(Path path)
3 }
64 删数
FileSystemdelete()方法
public boolean delete(Path f boolean recursive) throws IOException
· 1
recursive参数f文件时候忽略果f文件recursicetrue删整目录否抛出异常
7 数流(读写流程)
接详细介绍HDFS读写数流程致性模型相关概念
71 读文件
致读文件流程:
1)客户端传递文件PathFileSystemopen方法
2)DFS采RPC远程获取文件开始blockdatanode址Namenode会根网络拓扑结构决定返回节点(前提节点block副)果客户端身Datanode节点刚block副直接读取
3)客户端open方法返回FSDataInputStream象读取数(调read方法)
4)DFSInputStream(FSDataInputStream实现改类)连接持第block节点反复调read方法读取数
5)第block读取完毕寻找block佳datanode读取数果必DFSInputStream会联系Namenode获取批Block 节点信息(存放存持久化)寻址程客户端见
6)数读取完毕客户端调close方法关闭流象
读数程中果Datanode通信发生错误DFSInputStream象会尝试佳节点读取数记住该失败节点 续Block读取会连接该节点
读取BlockDFSInputStram会进行检验验证果Block损坏尝试节点读取数损坏block汇报Namenode
客户端连接datanode获取数namenode指导样支持量发客户端请求namenode流量均匀分布整集群
Block位置信息存储namenode存中相应位置请求非常高效会成瓶颈
72 写文件
步骤分解
1)客户端调DistributedFileSystemcreate方法
2)DistributedFileSystem远程RPC调Namenode文件系统命名空间中创建新文件时该文件没关联block 程中Namenode会做校验工作例否已存名文件否权限果验证通返回FSDataOutputStream象 果验证通抛出异常客户端
3)客户端写入数时候DFSOutputStream分解packets(数包)写入数队列中该队列DataStreamer消费
4)DateStreamer负责请求Namenode分配新block存放数节点节点存放Block副构成道 DataStreamerpacket写入道第节点第节点存放packet转发节点节点存放 继续传递
5)DFSOutputStream时维护ack queue队列等datanode确认消息道datanode确认packetack队列中移
6)数写入完毕客户端close输出流packet刷新道中然安心等datanode确认消息全部确认告知Namenode文件完整 Namenode时已知道文件Block信息(DataStreamer请求Namenode分配block)需等达副数求然返回成功信息客户端
Namenode决定副存Datanode?
HDFS副存放策略性写带宽读带宽间权衡默认策略:
· 第副放客户端相机器果机器集群外机选择(会选择容量太慢者前操作太繁忙)
· 第二副机放第副机架
· 第三副放第二副机架节点满足条件节点中机选择
· 更副整集群机选择然会量避免太副机架
副位置确定建立写入道时候会考虑网络拓扑结构面存放策略:
样选择滴衡性读写性
· 性:Block分布两机架
· 写带宽:写入道程需跨越交换机
· 读带宽:两机架中选读取
73 致性模型
致性模型描述文件系统中读写操见性HDFS中文件旦创建文件系统命名空间中见:
1 Path p new Path(p)
2 fscreate(p)
3 assertTaht(fsexists(p)is(true))
写入文件容保证见象流已刷新
`java
Path p new Path(p)
OutputStream out fscreate(p)
outwrite(contentgetBytes(UTF8))
outflush()
assertTaht(fsgetFileStatus(p)getLen0L) 0调flush
1
2 果需强制刷新数DatanodeFSDataOutputStreamhflush方法强制缓刷datanode
3 hflushHDFS保证时间点止写入文件数达数节点
4 ```java
5 Path p new Path(p)
6 OutputStream out fscreate(p)
7 outwrite(contentgetBytes(UTF8))
8 outflush()
9 assertTaht(fsgetFileStatus(p)getLenis(((longcontentlength())))
关闭象流时部会调hflush方法hflush保证datanode数已写入磁盘保证写入datanode存 机器断电时候导致数丢失果保证写入磁盘hsync方法hsync类型fsync()系统调fsync提交某文件句柄缓数
1 FileOutputStreamout new FileOutPutStream(localFile)
2 outwrite(contentgetBytes(UTF8))
3 outflush()
4 outgetFD()sync()
5 assertTaht(localFilegetLenis(((longcontentlength())))
hflushhsync会导致吞吐量降设计应时需吞吐量数健壮性间做权衡
外文件写入程中前正写入BlockReader见
74 Hadoop节点距离
读取写入程中namenode分配Datanode时候会考虑节点间距离HDFS中距离没
采带宽衡量实际中难准确度量两台机器间带宽
Hadoop机器间拓扑结构组织成树结构达公父节点需跳转数作距离事实距离矩阵例子面例子简明说明距离计算:
数中心机架节点距离0
数中心机架节点距离2
数中心机架节点距离4
数中心机架节点距离6
Hadoop集群拓扑结构需手动配置果没配置Hadoop默认节点位数中心机架
8 相关运维工具
81 distcp行复制
前面关注点单线程访问果需行处理文件需编写应Hadoop提供distcp工具行导入数Hadoop者Hadoop导出例子:
1 hadoop distcp file1 file2 作fs cp命令高效代
2 hadoop distcp dir1 dir2
3 hadoop distcp update dir1 dir2 #update参数表示步更新文件保持变
distcp底层MapReduce实现map实现没reducemap中行复制文件 distcpmap间均分配文件map数量通m参数指定
hadoop distcp update delete p hdfsmaster19000foo hdfsmaster2foo
样操作常两集群间复制数update参数表示步更新数delete会删目标目录中存源目录存文件p参数表示保留文件全校block副数量等属性
果两集群Hadoop版兼容webhdfs协议:
hadoop distcp webhdfsnamenode150070foo webhdfsnamenode250070foo
82 衡HDFS集群
distcp工具中果指定map数量1仅速度慢Block第副全部落运行唯map节点直磁盘溢出distcp时候默认map数量20
HDFSBlock均匀分布节点时候工作果没办法作业中量保持集群衡例限制map数量(便节点作业)balancer工具调整集群Block分布
9 HDFS机架感知概念配置实现
机架感知什?
告诉 Hadoop 集群中台机器属机架
二告诉呢?
Hadoop机架感知非适应Hadoop集群分辨某台Slave 机器属Rack非智感知需 Hadoop理者告知 Hadoop台机器属Rack样HadoopNameNode启动初始化时会机器 rack 应信息保存存中作接 HDFS 写块操作分配 datanode
列表时( 3 block 应三台 datanode)选择 datanode 策略量三副分布 rack
三什情况会涉机架感知?
Hadoop 集群规模情况
四机架感知需考虑情况(权衡性性带宽消耗)
(1)节点间通信够量发生机架跨机架
(2)提高容错力NameNode会数块副放机架
五通什方式够告知Hadoop NameNode Slaves机器属Rack?配置步骤
1默认情况Hadoop机架感知没启通常情况Hadoop集群 HDFS 选机器时候机选择说写数时Hadoop第块数 block1写rack1然机选择block2 写入rack2 时两Rack间产生数传输流量接机情况block3 重新写回 rack1时两Rack间产生次数流量Job处理数量非常者Hadoop推送数量非常时候种情况会造成 Rack间网络流量成倍升成性瓶颈进影响作业性整集群服务
Hadoop机架感知功启配置非常简单NameNode机器 hadoopsitexml 配置文件中配置选项:
topologyscriptfilenamepathtoRackAwarepy
配置选项 value 指定执行程序通常脚该脚接受参数输出值接受参数通常某台 DataNode机器IP址输出值通常该IP址应DataNodeRack例rack1NameNode启动时会判断该配置选项否空果非空表示已机架感知配置时NameNode会根配置寻找该脚接收 DataNodeHeartbeat时该 DataNodeIP址作参数传该脚运行输出作该DataNode属机架保存存Map中
脚编写需真实网络拓朴机架信息解清楚通该脚够机器IP址正确映射相应机架
简单实现:
#usrbinpython
#codingUTF8 –
import sys
rack {hadoopnode176tjrack1
hadoopnode178tjrack1
hadoopnode179tjrack1
hadoopnode180tjrack1
hadoopnode186tjrack2
hadoopnode187tjrack2
hadoopnode188tjrack2
hadoopnode190tjrack2
192168115rack1
192168117rack1
192168118rack1
192168119rack1
192168125rack2
192168126rack2
192168127rack2
192168129rack2
}
if namemain
print( + rackget(sysargv[1] rack0)
没确切文档说明 底机名 ip 址会传入脚脚中兼容机名 ip 址果机房架构较复杂话脚返回:dc1rack1 类似字符串
执行命令:chmod +x RackAwarepy
重启NameNode果配置成功NameNode启动日志中会输出:
INFO orgapachehadoopnetNetworkTopology Adding a new node rack119216811550010
六网络拓扑机器间距离
里基网络拓扑案例介绍复杂网络拓扑中Hadoop集群台机器间距离
机架感知NameNode 画出图示DataNode网络拓扑图D1R1 交换机底层 datanode H1
rackidD1R1H1H1 parent R1R1 D1 rackid信息通 topologyscriptfilename 配置 rackid 信息计算出意两台DataNode间距离
1 distance(D1R1H1D1R1H1)0 相DataNode
2 distance(D1R1H1D1R1H2)2 RackDataNode
3 distance(D1R1H1D1R1H4)4 IDC(互联网数中心(机房))DataNode
4 distance(D1R1H1D2R3H7)6 IDCDataNode
10 HDFS理界面
里HDFS理情况hadoop001开浏览器进入HDFS理界面输入:19216821612850070
点击DataNodes
YARN
Yarn资源调度台负责运算程序提供服务器运算资源相分布式操作系统台MapReduce等运算程序相运行操作系统应程序
基架构
YARNResourceManagerNodeManagerApplicationMasterContainer等组件构成
工作机制
1)运行机制
2)工作机制详解
(0)MapReduce程序提交客户端节点
(1)Yarn RunnerResourceManager申请Application
(2)ResourceManager该应程序资源路径返回Yarn Runner
(3)该程序运行需资源提交HDFS
(4)程序资源提交完毕申请运行MapReduce Application Master
(5)RM户请求初始化成Task
(6)中NodeManager领取Task务
(7)该NodeManager创建容器Container产生MapReduce Application Master
(8)ContainerHDFS拷贝资源
(9)MapReduce Application MasterResourceManager申请运行Map Task资源
(10)ResourceManager运行Map Task务分配外两NodeManager两NodeManager分领取务创建容器
(11)MapReduce两接收务NodeManager发送程序启动脚两NodeManager分启动Map TaskMap Task数分区排序
(12)MapReduce Application Master等Map Task运行完毕RM申请容器运行Reduce Task
(13)Reduce TaskMap Task获取相应分区数
(14)程序运行完毕MapReduce会ResourceManager申请注销
ResourceManager
负责全局资源理务调度整集群成计算资源池关注分配应负责容错
资源理
1 前资源节点分成Map slotReduce slot现ContainerContainer根需运行ApplicationMasterMapReduce者意程序
2 前资源分配静态目前动态资源利率更高
3 Container资源申请单位资源申请格式: resourcename:机名机架名*(代表意机器) resourcerequirement:目前支持CPU存
4 户提交作业ResourceManager然某NodeManager分配Container运行ApplicationMasterApplicationMaster根身程序需ResourceManager申请资源
5 YARN套Container生命周期理机制ApplicationMasterContainer间理应程序定义
务调度
1 关注资源情况根需求合理分配资源
2 Scheluer根申请需特定机器申请特定资源(ApplicationMaster负责申请资源时数化考虑ResourceManager量满足申请需求指定机器分配Container减少数移动)
部结构
· Client Service 应提交终止输出信息(应队列集群等状态信息)
· Adaminstration Service 队列节点Client权限理
· ApplicationMasterService 注册终止ApplicationMaster 获取ApplicationMaster资源申请取消请求异步传Scheduler 单线程处理
· ApplicationMaster Liveliness Monitor 接收ApplicationMaster心跳消息果某ApplicationMaster定时间没发送心跳务失效资源会回收然ResourceManager会重新分配ApplicationMaster运行该应(默认尝试2次)
· Resource Tracker Service 注册节点 接收注册节点心跳消息
· NodeManagers Liveliness Monitor 监控节点心跳消息果长时间没收心跳消息认该节点效 时该节点Container标记成效会调度务该节点运行
· ApplicationManager 理应程序记录理已完成应
· ApplicationMaster Launcher 应提交负责NodeManager交互分配Container加载ApplicationMaster负责终止销毁
· YarnScheduler 资源调度分配 FIFO(with Priority)FairCapacity方式
· ContainerAllocationExpirer 理已分配没启Container超定时间回收
作业提交全程
1)作业提交程YARN
作业提交全程详解
(1)作业提交
第0步:client调jobwaitForCompletion方法整集群提交MapReduce作业
第1步:clientRM申请作业id
第2步:RMclient返回该job资源提交路径作业id
第3步:client提交jar包切片信息配置文件指定资源提交路径
第4步:client提交完资源RM申请运行MrAppMaster
(2)作业初始化
第5步:RM收client请求该job添加容量调度器中
第6步:某空闲NM领取该job
第7步:该NM创建Container产生MRAppmaster
第8步:载client提交资源
(3)务分配
第9步:MrAppMasterRM申请运行maptask务资源
第10步:RM运行maptask务分配外两NodeManager两NodeManager分领取务创建容器
(4)务运行
第11步:MR两接收务NodeManager发送程序启动脚两NodeManager分启动maptaskmaptask数分区排序
第12步:MrAppMaster等maptask运行完毕RM申请容器运行reduce task
第13步:reduce taskmaptask获取相应分区数
第14步:程序运行完毕MR会RM申请注销
(5)进度状态更新
YARN中务进度状态(包括counter)返回应理器 客户端秒(通mapreduceclientprogressmonitorpollinterval设置)应理器请求进度更新 展示户
(6)作业完成
应理器请求作业进度外 客户端5分钟会通调waitForCompletion()检查作业否完成时间间隔通mapreduceclientcompletionpollinterval设置作业完成 应理器container会清理工作状态作业信息会作业历史服务器存储备户核查
2)作业提交程MapReduce
资源调度器
目前Hadoop作业调度器三种:FIFOCapacity SchedulerFair SchedulerHadoop272默认资源调度器Capacity Scheduler
具体设置详见:yarndefaultxml文件
The class to use as the resource scheduler
yarnresourcemanagerschedulerclass
orgapachehadoopyarnserverresourcemanagerschedulercapacityCapacityScheduler
1)先进先出调度器(FIFO)
2)容量调度器(Capacity Scheduler)
3)公调度器(Fair Scheduler)
务推测执行
1)作业完成时间取决慢务完成时间
作业干Map务Reduce务构成硬件老化软件Bug等某务运行非常慢
典型案例:系统中99Map务完成少数Map老进度慢完成办?
2)推测执行机制:
发现拖腿务某务运行速度远慢务均速度拖腿务启动备份务时运行谁先运行完采谁结果
3)执行推测务前提条件
(1)task备份务
(2)前job已完成task必须005(5)
(3)开启推测执行参数设置Hadoop272 mapredsitexml文件中默认开
mapreducemapspeculative
true
If true then multiple instances of some map tasks may be executed in parallel
mapreducereducespeculative
true
If true then multiple instances of some reduce tasks
may be executed in parallel
4)启推测执行机制情况
(1)务间存严重负载倾斜
(2)特殊务务数库中写数
5)算法原理
YARNWEB UI说明
安装完Yarn浏览器中通httpmaster8088访问YarnWEB UI图:
详细解释图中标记1(cluster)2(Nodes)两界面中资源关信息
面7字段信息进行解释:
1Active Nodes:表示Yarn集群理节点数实NodeManager数集群2NodeManager
2Memory Total:表示Yarn集群理存总存总等NodeManager理存NodeManager理存通yarnsitexml中配置进行配置:
yarnnodemanagerresourcememorymb
1630
表示NodeManager理存
配置中NodeManager理存1630MB整Yarn集群理存总1630MB * 2 3260MB约等318GBMemory Total
3Vcores Total:表示Yarn集群理cpu虚拟核心总数等NodeManager理虚拟核心NodeManager理虚拟核心数通yarnsitexml中配置进行配置
yarnnodemanagerresourcecpuvcores
2
表示NodeManager理虚拟核心数
配置中NodeManager理虚拟核心数2整Yarn集群理虚拟核心总数2 * 2 4Vcores Total
4Scheduler Type:表示资源分配类型Hadoopyarn安装文章中说三中资源调度
5Minimum Allocation:分配资源说务Yarn申请资源时候Yarn少会分配资源务分配存核心数分配置yarnschedulerminimumallocationmb(默认值1024MB)yarnschedulerminimumallocationvcores(默认值1)控制
6Maximum Allocation:分配资源说务Yarn申请资源时候Yarn会分配资源务分配存核心数分配置yarnschedulermaximumallocationmb(默认值8192MB)yarnschedulermaximumallocationvcores(默认值32)控制然两值肯定集群理资源
面Yarn集群理两NodeManager状态信息分:
1Rack:表示NodeManager机器机架
2Node State:表示NodeManager状态
3Mem Used:表示NodeManager已存Mem Avail:表示NodeManager剩少存VCores Used:表示NodeManager已VCores数量VCores Avail:表示NodeManager剩少VCores数量
点击Node Address
进入界面:
界面信息slave2NodeManager详细信息中Total Vmem allocated for Containers表示NodeManager理虚拟存虚拟存yarnsitexml中配置设置:
yarnnodemanagervmempmemratio
41
表示NodeManager理虚拟存物理存例
面配置yarnnodemanagervmempmemratio虚拟存物理存例41说虚拟存物理存41倍虚拟存1630MB * 41 6683MB约等653GB
集群运行状态查
注:般资源超配置资源话 Staday Fair Shar mem Min Resources mem
发生然Staday Fair Shar mem Min Resources mem
暂时未遇单列超max资源配情况Staday Fair Shar mem Min Resources mem情况
Hadoop 30 新特性
Hadoop 30功性方面hadoop核进行项重改进包括:
Hadoop Common
(1)精简Hadoop核包括剔期API实现默认组件实现换成高效实现(FileOutputCommitter缺省实现换v2版废hftp转webhdfs代移Hadoop子实现序列化库orgapachehadoopRecords
(2)Classpath isolation防止版jar包突google Guava混合HadoopHBaseSpark时容易产生突(httpsissuesapacheorgjirabrowseHADOOP11656)
(3)Shell脚重构 Hadoop 30Hadoop理脚进行重构修复量bug增加新特性支持动态命令等httpsissuesapacheorgjirabrowseHADOOP9902
Hadoop HDFS
(1)HDFS支持数擦编码HDFS降低性前提节省半存储空间(httpsissuesapacheorgjirabrowseHDFS7285)
(2)NameNode支持支持集群中activestandby namenode部署方式注:ResourceManager特性hadoop 20中已支持(httpsissuesapacheorgjirabrowseHDFS6440)
Hadoop MapReduce
(1)Tasknative优化MapReduce增加CC++map output collector实现(包括SpillSortIFile等)通作业级参数调整切换该实现shuffle密集型应性提高约30(httpsissuesapacheorgjirabrowseMAPREDUCE2841)
(2)MapReduce存参数动推断Hadoop 20中MapReduce作业设置存参数非常繁琐涉两参数:mapreduce{mapreduce}memorymbmapreduce{mapreduce}javaopts旦设置合理会存资源浪费严重前者设置4096MB者Xmx2g剩余2g实际法java heap(httpsissuesapacheorgjirabrowseMAPREDUCE5785)
Hadoop YARN
(1)基cgroup存隔离IO Disk隔离(httpsissuesapacheorgjirabrowseYARN2619)
(2)curator实现RM leader选举(httpsissuesapacheorgjirabrowseYARN4438)
(3)containerresizing(httpsissuesapacheorgjirabrowseYARN1197)
(4)Timelineserver next generation (httpsissuesapacheorgjirabrowseYARN2928)
hadoop30新参数
hadoop30
HADOOP
Move to JDK8+
Classpath isolation on by default HADOOP11656
Shell script rewrite HADOOP9902
Move default ports out of ephemeral range HDFS9427
HDFS
Removal of hftp in favor of webhdfs HDFS5570
Support for more than two standby NameNodes HDFS6440
Support for Erasure Codes in HDFS HDFS7285
YARN
MAPREDUCE
Derive heap size or mapreduce*memorymb automatically MAPREDUCE5785
HDFS7285中实现Erasure Coding新功鉴功远没发布阶段面块相关代码会进行进步改造做谓预分析帮助家提前解Hadoop社区目前实现功前没接触Erasure Coding技术中间程确实偶然相信文带家收获
Erasure coding纠删码技术简称EC种数保护技术早通信行业中数传输中数恢复种编码容错技术通原始数中加入新校验数部分数产生关联性定范围数出错情况通纠删码技术进行恢复面结合图片进行简单演示首先原始数n然加入m校验数块图示
Parity部分校验数块行数块组成Stripe条带行条带n数块m校验块组成原始数块校验数块通现数块进行恢复原
果校验数块发生错误通原始数块进行编码重新生成果原始数块发生错误 通校验数块解码重新生成
mn值固定变进行相应调整会奇中底什原理呢 实道理简单面图成矩阵矩阵运算具逆性数进行恢复出张标准矩阵相图家二者关联
总结
Hadoop 30alpha版预计2016夏天发布GA版11月12月发布
Hadoop 30中引入重功优化包括HDFS 擦编码Namenode支持MR Native Task优化YARN基cgroup存磁盘IO隔离YARN container resizing等
相前生产发布版Hadoop 2Apache Hadoop 3整合许重增强功 Hadoop 3版提供稳定性高质量API实际产品开发面简介绍Hadoop3变化
· 低Java版求Java7变Java8
Hadoopjar基Java 8运行版进行编译执行Java 7更低Java版户需升级Java 8
· HDFS支持纠删码(erasure coding)
纠删码种副存储更节省存储空间数持久化存储方法ReedSolomon(104)标准编码技术需14倍空间开销标准HDFS副技术需3倍空间开销纠删码额外开销重建远程读写通常存储常数(冷数)外新特性时户需考虑网络CPU开销
· YARN时间线服务 v2(YARN Timeline Service v2)
YARN Timeline Service v2应两挑战:(1)提高时间线服务扩展性性(2)通引入流(flow)聚合(aggregation)增强性代Timeline Service v1xYARN Timeline Service v2 alpha 2提出样户开发者进行测试提供反馈建议YARN Timeline Service v2测试容器中
· 重写Shell脚
Hadoopshell脚重写修补许长期存bug增加新特性
· 覆盖客户端jar(Shaded client jars)
2x版中hadoopclient Maven artifact配置会拉取hadoop传递赖hadoop应程序环境变量回带传递赖版应程序版相突问题
HADOOP11804 添加新 hadoopclientapihadoopclientruntime artifcathadoop赖隔离单Jar包中避免hadoop赖渗透应程序类路径中
· 支持Opportunistic ContainersDistributed Scheduling
ExecutionType概念引入样应够通Opportunistic执行类型请求容器调度时没资源种类型容器会分发NM中执行程序种情况容器放入NM队列中等资源便执行Opportunistic container优先级默认Guaranteedcontainer低需情况资源会抢占便Guaranteed container样需提高集群率
Opportunistic container默认中央RM分配目前已增加分布式调度器支持该分布式调度器做AMRProtocol解析器实现
· MapReduce务级优化
MapReduce添加映射输出收集器化实现支持密集型洗牌操作(shuffleintensive)jobs带30性提升
· 支持余2NameNodes
针HDFS NameNode高性初实现方式提供活跃(active)NameNode备(Standby)NameNode通3JournalNode法定数量复制编辑种架构够系统中节点障进行容错
该功够通运行更备NameNode提供更高容错性满足部署需求通配置3NameNode5JournalNode集群够实现两节点障容错
· 修改重服务默认端口
前Hadoop版中重Hadoop服务默认端口Linux时端口范围容(3276861000)意味着启动程中服务器端口突会启动失败突端口已时端口范围移NameNodeSecondary NameNodeDataNodeKMS会受影响文档已做相应修改通阅读发布说明 HDFS9427HADOOP12811详细解修改端口
· 提供文件系统连接器(filesystem connnector)支持Microsoft Azure Data LakeAliyun象存储系统
Hadoop支持Microsoft Azure Data LakeAliyun象存储系统集成作Hadoop兼容文件系统
· 数节点置衡器(Intradatanode balancer)
单DataNode理磁盘情况执行普通写操作时磁盘量较均添加者更换磁盘时会导致DataNode磁盘量严重均衡目前HDFS均衡器关注点DataNode间(inter)intra处理种均衡情况
hadoop3 中通DataNode部均衡功已处理述情况通hdfs diskbalancer ClI调
· 重写守护进程务堆理机制
针Hadoop守护进程MapReduce务堆理机制Hadoop3 做系列修改
HADOOP10950 引入配置守护进程堆新方法特HADOOP_HEAPSIZE配置方式已弃根机存进行动调整
MAPREDUCE5785 简化MAP配置减少务堆需务配置Java选项中明确指出需堆已明确指出堆现配置会受该改变影响
· S3GuradS3A文件系统客户端提供致性元数缓存
HADOOP13345 亚马逊S3存储S3A客户端提供选特性:够DynamoDB表作文件目录元数快速致性存储
· HDFS基路器互联(HDFS RouterBased Federation)
HDFS RouterBased Federation添加RPC路层HDFS命名空间提供联合视图现ViewFsHDFS Federation功类似区通服务端理表加载原客户端理简化现存HDFS客户端接入federated cluster操作
· 基API配置Capacity Scheduler queue configuration
OrgQueue扩展capacity scheduler提供种编程方法该方法提供REST API修改配置户通远程调修改队列配置样队列administer_queue ACL理员实现动化队列配置理
· YARN资源类型
Yarn资源模型已般化支持户定义计算资源类型仅仅CPU存集群理员定义GPU数量软件序列号连接存储资源然Yarn务够资源进行调度
Hive部表外部表区
未external修饰部表(managed table)external修饰外部表(external table)
区:
部表数Hive身理外部表数HDFS理
部表数存储位置hivemetastorewarehousedir(默认:userhivewarehouse)外部表数存储位置制定(果没LOCATIONHiveHDFSuserhivewarehouse文件夹外部表表名创建文件夹属表数存放里)
删部表会直接删元数(metadata)存储数删外部表仅仅会删元数HDFS文件会删
部表修改会修改直接步元数外部表表结构分区进行修改需修复(MSCK REPAIR TABLE table_name)
进行试验进行理解
概念理解
创建部表t1
create table t1(
id int
name string
hobby array
add map
)
row format delimited
fields terminated by ''
collection items terminated by ''
map keys terminated by ''
2 查表描述:desc t1
装载数(t1)
注:般少insert (insert overwrite)语句算算插入条数会调MapReduce里选择Load Data方式
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1 partcol2val2 )]
创建文件粘贴述记录载图:
文件容
1xiaomingbookTVcodebeijingchaoyangshagnhaipudong
2lileibookcodenanjingjiangningtaiwantaibei
3lihuamusicbookheilongjianghaerbin
然载
load data local inpath 'homehadoopDesktopdata' overwrite into table t1
忘记写文件名data笔者第次忘记写整Desktop传查全null乱码
查表容:
select * from t1
创建外部表t2
create external table t2(
id int
name string
hobby array
add map
)
row format delimited
fields terminated by ''
collection items terminated by ''
map keys terminated by ''
location 'usert2'
装载数(t2)
load data local inpath 'homehadoopDesktopdata' overwrite into table t2
查文件位置
图NameNode50070explorerhtml#user目录t2文件
t1呢?前配置默认路径里
样通命令行获两者位置信息:
desc formatted table_name
注:图中managed table部表external table外部表
##分删部表外部表
面分删部表外部表查区
观察HDFS文件
发现t1已存
t2然存
外部表仅仅删元数
重新创建外部表t2
create external table t2(
id int
name string
hobby array
add map
)
row format delimited
fields terminated by ''
collection items terminated by ''
map keys terminated by ''
location 'usert2'
里面插入数select * 结果
见数然
官网解释
官网中关external表介绍:
A table created without the EXTERNAL clause is called a managed table because Hive manages its data
Managed and External Tables
By default Hive creates managed tables where files metadata and statistics are managed by internal Hive processes A managed table is stored under the hivemetastorewarehousedir path property by default in a folder path similar to appshivewarehousedatabasenamedbtablename The default location can be overridden by the location property during table creation If a managed table or partition is dropped the data and metadata associated with that table or partition are deleted If the PURGE option is not specified the data is moved to a trash folder for a defined duration
Use managed tables when Hive should manage the lifecycle of the table or when generating temporary tables
An external table describes the metadata schema on external files External table files can be accessed and managed by processes outside of Hive External tables can access data stored in sources such as Azure Storage Volumes (ASV) or remote HDFS locations If the structure or partitioning of an external table is changed an MSCK REPAIR TABLE table_name statement can be used to refresh metadata information
Use external tables when files are already present or in remote locations and the files should remain even if the table is dropped
Managed or external tables can be identified using the DESCRIBE FORMATTED table_name command which will display either MANAGED_TABLE or EXTERNAL_TABLE depending on table type
Statistics can be managed on internal and external tables and partitions for query optimization
Hive官网介绍:
httpscwikiapacheorgconfluencedisplayHiveLanguageManual+DDL#LanguageManualDDLDescribeTableViewColumn
Hive数仓库拉链表流水表全量表增量表
1 全量表:天新状态数
2 增量表:天新增数增量数次导出新数
3 拉链表:维护历史状态新状态数种表拉链表根拉链粒度实际相快做优化部分变记录已通拉链表方便原出拉链时点客户记录
4 流水表: 表修改会记录反映实际记录变更
拉链表通常账户信息历史变动进行处理保留结果流水表天交易形成历史
流水表统计业务相关情况拉链表统计账户客户情况
数仓库拉链表(原理设计Hive中实现)
情况保持历史状态需拉链表做样做目保留状态情况节省空间
拉链表适种情况吧
数量点表中某字段变化呢变化频率高业务需求呢需统计种变化状态天全量份呢点太现实
仅浪费存储空间时业务统计点麻烦时拉链表作提现出节省空间满足需求
般数仓中通增加begin_dateen_date表示例两列start_dateend_date
1 20160820 20160820 创建 20160820 20160820
1 20160820 20160821 支付 20160821 20160821
1 20160820 20160822 完成 20160822 99991231
2 20160820 20160820 创建 20160820 20160820
2 20160820 20160821 完成 20160821 99991231
3 20160820 20160820 创建 20160820 20160821
3 20160820 20160822 支付 20160822 99991231
4 20160821 20160821 创建 20160821 20160821
4 20160821 20160822 支付 20160822 99991231
5 20160822 20160822 创建 20160822 99991231
begin_date表示该条记录生命周期开始时间end_date表示该条记录生命周期结束时间
end_date 99991231’表示该条记录目前处效状态
果查询前效记录select * from order_his where dw_end_date 99991231′
果查询20160821历史快select * from order_his where begin_date < 20160821′ and end_date > 20160821’
简单介绍拉链表更新:
假设天维度天状态天终状态
张订单表例原始数天订单状态明细
1 20160820 20160820 创建
2 20160820 20160820 创建
3 20160820 20160820 创建
1 20160820 20160821 支付
2 20160820 20160821 完成
4 20160821 20160821 创建
1 20160820 20160822 完成
3 20160820 20160822 支付
4 20160821 20160822 支付
5 20160822 20160822 创建
根拉链表希
1 20160820 20160820 创建 20160820 20160820
1 20160820 20160821 支付 20160821 20160821
1 20160820 20160822 完成 20160822 99991231
2 20160820 20160820 创建 20160820 20160820
2 20160820 20160821 完成 20160821 99991231
3 20160820 20160820 创建 20160820 20160821
3 20160820 20160822 支付 20160822 99991231
4 20160821 20160821 创建 20160821 20160821
4 20160821 20160822 支付 20160822 99991231
5 20160822 20160822 创建 20160822 99991231
出 1234订单状态统计前效状态
例hive例考虑实现性关
首先创建表
CREATE TABLE orders (
orderid INT
createtime STRING
modifiedtime STRING
status STRING
) row format delimited fields terminated by '\t'
CREATE TABLE ods_orders_inc (
orderid INT
createtime STRING
modifiedtime STRING
status STRING
) PARTITIONED BY (day STRING)
row format delimited fields terminated by '\t'
CREATE TABLE dw_orders_his (
orderid INT
createtime STRING
modifiedtime STRING
status STRING
dw_start_date STRING
dw_end_date STRING
) row format delimited fields terminated by '\t'
首先全量更新先20160820止数
初始化先20160820数初始化进
INSERT overwrite TABLE ods_orders_inc PARTITION (day '20160820')
SELECT orderidcreatetimemodifiedtimestatus
FROM orders
WHERE createtime < '20160821' and modifiedtime <'20160821'
刷dw中
INSERT overwrite TABLE dw_orders_his
SELECT orderidcreatetimemodifiedtimestatus
createtime AS dw_start_date
'99991231' AS dw_end_date
FROM ods_orders_inc
WHERE day '20160820'
结果
select * from dw_orders_his
OK
1 20160820 20160820 创建 20160820 99991231
2 20160820 20160820 创建 20160820 99991231
3 20160820 20160820 创建 20160820 99991231
剩余需进行增量更新
INSERT overwrite TABLE ods_orders_inc PARTITION (day '20160821')
SELECT orderidcreatetimemodifiedtimestatus
FROM orders
WHERE (createtime '20160821' and modifiedtime '20160821') OR modifiedtime '20160821'
select * from ods_orders_inc where day'20160821'
OK
1 20160820 20160821 支付 20160821
2 20160820 20160821 完成 20160821
4 20160821 20160821 创建 20160821
先放增量表中然进行关联张时表中插入新表中
DROP TABLE IF EXISTS dw_orders_his_tmp
CREATE TABLE dw_orders_his_tmp AS
SELECT orderid
createtime
modifiedtime
status
dw_start_date
dw_end_date
FROM (
SELECT aorderid
acreatetime
amodifiedtime
astatus
adw_start_date
CASE WHEN borderid IS NOT NULL AND adw_end_date > '20160821' THEN '20160821' ELSE adw_end_date END AS dw_end_date
FROM dw_orders_his a
left outer join (SELECT * FROM ods_orders_inc WHERE day '20160821') b
ON (aorderid borderid)
UNION ALL
SELECT orderid
createtime
modifiedtime
status
modifiedtime AS dw_start_date
'99991231' AS dw_end_date
FROM ods_orders_inc
WHERE day '20160821'
) x
ORDER BY orderiddw_start_date
INSERT overwrite TABLE dw_orders_his
SELECT * FROM dw_orders_his_tmp
根面步骤20160822号数更新进结果
select * from dw_orders_his
OK
1 20160820 20160820 创建 20160820 20160820
1 20160820 20160821 支付 20160821 20160821
1 20160820 20160822 完成 20160822 99991231
2 20160820 20160820 创建 20160820 20160820
2 20160820 20160821 完成 20160821 99991231
3 20160820 20160820 创建 20160820 20160821
3 20160820 20160822 支付 20160822 99991231
4 20160821 20160821 创建 20160821 20160821
4 20160821 20160822 支付 20160822 99991231
5 20160822 20160822 创建 20160822 99991231
想数
值注意订单表中数天次状态更新应天状态天终状态天订单状态创建支付完成应拉取终状态进行拉练表更新否面数会出现异常
1 6 20160822 20160822 创建 20160822 99991231
2 6 20160822 20160822 支付 20160822 99991231
3 6 20160822 20160822 完成 20160822 99991231
Hadoop 320 完全分布式集群搭建
集群环境搭建
首先准备4台服务器(虚拟机)
设置静态ip址映射 centos7 修改静态ip设置址映射
址映射
然设置集群SSH免密登录分发脚 centos7配置集群SSH免密登录(包含群发文件脚)
果防火墙记关闭防火墙
1 systemctl stop firewalldservice
2 systemctl disable firewalldservice
载 hadoop312 分传4台服务器 roothadoop 目录
址 httparchiveapacheorgdisthadoopcommonhadoop320hadoop320targz
传 4台设备 分执行解压 重命名
1 cd roothadoop
2 tar zxvf roothadoophadoop320targz
安装JDK18 jdk载解压 rootjdk 重命名 jdk8
载址
httpswwworaclecomtechnetworkjavajavasedownloadsjdk8downloads2133151html
编辑 etcprofile 设置环境变量
vim etcprofile
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 添加
1 export JAVA_HOMErootjdkjdk8
2 export JRE_HOMErootjdkjdk8jre
3 export HADOOP_HOMEroothadoophadoop320
4 PATHPATHHOMEbinJAVA_HOMEbinHADOOP_HOMEbinHADOOP_HOMEsbinrootbin
5 export LD_LIBRARY_PATHHADOOP_HOMElibnative
6 export HADOOP_CONF_DIRHADOOP_HOMEetchadoop
更新 profile 文件
source etcprofile
测试环境变量否生效
java version
hadoop version
二Hadoop配置修改
进入 hadoop 配置文件目录
cd roothadoophadoop320etchadoop
修改 hadoopenvsh 配置 jdk 路径定义集群操作户
面增加
1 export JAVA_HOMErootjdkjdk8
2
3 export HDFS_NAMENODE_USERroot
4 export HDFS_DATANODE_USERroot
5 export HDFS_SECONDARYNAMENODE_USERroot
6 export YARN_RESOURCEMANAGER_USERroot
7 export YARN_NODEMANAGER_USERroot
8
9 export HADOOP_PID_DIRroothadoopdatapids
10 export HADOOP_LOG_DIRroothadoopdatalogs
修改 coresitexml hadoop核心配置
1
2
3fsdefaultFS
4hdfshadoop18020
5
6
7hadooptmpdir
8roothadoopdatatmp
9
10
· fsdefaultFSNameNode址hadooptmpdirhadoop时目录址
修改 hdfssitexml hadoop 节点配置
1
2
3dfsnamenodehttpaddress
4hadoop19870
5
6
7dfsnamenodesecondaryhttpaddress
8hadoop250090
9
10
11dfsreplication
122
13
14
15dfsnamenodenamedir
16fileroothadoopdatahdfsname
17
18
19dfsdatanodedatadir
20fileroothadoopdatahdfsdata
21
22
23
· dfsreplication 副数
· dfsnamenodesecondaryhttpaddress指定secondaryNameNodehttp访问址端口号
· 里 hadoop2 设置 SecondaryNameNode服务器
修改 workers 告知 hadoop hdfsDataNode节点
1 hadoop2
2 hadoop3
3 hadoop4
修改 yarnsitexml 配置yarn服务
1
2
3yarnnodemanagerauxservices
4mapreduce_shuffle
5
6
7yarnnodemanagerlocalizeraddress
800008140
9
10
11yarnresourcemanagerhostname
12hadoop1
13
14
15yarnresourcemanagerwebappaddress
16hadoop18088
17
18
19yarnlogaggregationenable
20true
21
22
23yarnlogaggregationretainseconds
24604800
25
26
27yarnlogserverurl
28httphadoop419888jobhistorylogs
29
30
· yarnresourcemanagerwebappaddress 配置 resourcemanager 服务器址端口
· yarnresourcemanagerhostname 指定 resourcemanager 服务器
· yarnlogaggregationenable 配置否启日志聚集功
· yarnlogaggregationretainseconds 配置聚集日志HDFS保存长时间
· yarnlogserverurl 配置yarn日志服务器址
修改mapredsitexml 文件
1
2
3mapreduceframeworkname
4yarn
5
6
7yarnappmapreduceamenv
8HADOOP_MAPRED_HOMEroothadoophadoop320
9
10
11mapreducemapenv
12HADOOP_MAPRED_HOMEroothadoophadoop320
13
14
15mapreducereduceenv
16HADOOP_MAPRED_HOMEroothadoophadoop320
17
18
19mapreducejobhistoryaddress
20hadoop410020
21
22
23mapreducejobhistorywebappaddress
24hadoop419888
25
26
· yarnappmapreduceamenv mapreducemapenv mapreducereduceenv
· 三mapreduce指定hadoop目录 果配置会出现 运行mapreduce找main方法等错误
· mapreducejobhistoryaddress 配置务历史服务器址
· mapreducejobhistorywebappaddress 配置历史服务器web访问址
修改配置文件 分发 节点三台服务器
前目录 执行xsync分发脚
1 xsync hadoopenvsh
2 xsync coresitexml
3 xsync hdfssitexml
4 xsync workers
5 xsync yarnsitexml
6 xsync mapredsitexml
配置完成
三Hadoop服务启动
hadoop1节点执行namenode初始格式化命令 (仅第次启动需执行)
hdfs namenode format
执行成功生成目录
cd roothadoopdatadfsname
生成集群唯id说明执行成功
hadoop1执行命令
1 startdfssh
2 startyarnsh
者执行
startallsh
hadoop4执行命令 启动job历史服务
mapred daemon start historyserver
执行完成分4台设备jps查进程
启动成功
· hadoop1 NameNode ResourceManager 节点
· hadoop2 SecondaryNameNode DataNode NodeManager 节点
· hadoop3 DataNode NodeManager 节点
· hadoop4 DataNode NodeManager JobHistoryServer 节点
查HDFS Web界面 httphadoop19870
查 YARN web界面 httphadoop18088
hadoop搭建完成
四运行WordCount
首先 root 目录创建txt文件
vim roottesttxt
容
1 hadoop 1
2 hadoop 2
3 hadoop 3
4 hadoop 4
5 hadoop 5
6 hadoop 6
7 hadoop 7
8 hadoop 8
9 hadoop 9
10 hadoop 10
testtxt文件传 hdfs 执行命令
1 hdfs dfs mkdir userroot
2 hdfs dfs put roottesttxt userroot
找官方带案例jar
cd roothadoophadoop320sharehadoopmapreduce
运行jar执行MapReduce WordCount案例
hadoop jar hadoopmapreduceexamples320jar wordcount userroottesttxt rootoutput
· wordcount 第路径 文件路径
· 第二路径 结果输出路径 (必须存)
执行成功 查执行结果
hdfs dfs lsr rootoutput
success执行成功
partr00000 m mapper 输出 r reduce 输出 00000 job 务编号 整文件结果输出文件
hdfs dfs cat rootoutputpartr00000
文件中 hadoop 词出现 10次 结果正确
Linux台载MySQL
1 官网载安装包
载链接:点击开链接
httpsdevmysqlcomdownloadsmysql
果系统32位选择第64位选择第二
wget 载
wget httpsdevmysqlcomgetDownloadsMySQL80mysql8011linuxglibc212i686targz
解压文件
tar zxvf mysql8011linuxglibc212i686targz
2 移动压缩包usrlocal目录重命名文件
mv rootmysql8011linuxglibc212i686 usrlocalmysql
3MySQL根目录新建文件夹data存放数
mkdir data
4创建 mysql 户组 mysql 户
1 groupadd mysql
2
3 useradd g mysql mysql
5改变 mysql 目录权限
1 chown R mysqlmysql usrlocalmysql
2
3 者
4
5 chown R mysql
6
7 chgrp R mysql
注意点
6初始化数库
创建mysql_install_db安装文件
1 mkdir mysql_install_db
2 chmod 777 mysql_install_db
初始化
binmysqld initialize usermysql basedirusrlocalmysql datadirusrlocalmysqldata 初始化数库
者
usrlocalmysqlbinmysqld initialize usermysql
1 usrlocalmysqlbinmysqld initialize usermysql
2
3 usrlocalmysqlbinmysqld (mysqld 8011) initializing of server in progress as process 5826
4
5 [Server] A temporary password is generated for root@localhost twiTlsi<0O
6
7 usrlocalmysqlbinmysqld (mysqld 8011) initializing of server has completed
记录时密码:
twiTlsi<0O
里遇问题没libnumaso1
zsh command not found mysqld
binmysqld initialize
binmysqld error while loading shared libraries libnumaso1 cannot open shared object file No such file or directory
20180429 170630 [WARNING] mysql_install_db is deprecated Please consider switching to mysqld initialize
20180429 170630 [ERROR] Can't locate the language directory
需安装 libnuma
1 yum install libnuma
2
3 yum y install numactl
4
5 yum install libaio1 libaiodev
安装文件
7mysql配置
cp usrlocalmysqlsupportfilesmysqlserver etcinitdmysqld
修改mycnf文件
vim etcmycnf
1
2 [mysqld]
3 basedir usrlocalmysql
4 datadir usrlocalmysqldata
5 socket usrlocalmysqlmysqlsock
6 charactersetserverutf8
7 port 3306
8 sql_modeNO_ENGINE_SUBSTITUTIONSTRICT_TRANS_TABLES
9 [client]
10 socket usrlocalmysqlmysqlsock
11 defaultcharactersetutf8
esc保存
wq 退出
8建立MySQL服务
cp a supportfilesmysqlserver etcinitdmysqld
1 cp mysqlserver etcinitdmysql
2 chmod +x etcinitdmysql
添加系统服务
chkconfig add mysql
cp a supportfilesmysqlserver etcinitdmysqld
chmod +x etcrcdinitdmysqld
chkconfig add mysqld
检查服务否生效
chkconfig list mysqld
9 配置全局环境变量
编辑 etcprofile 文件
# vi etcprofile
profile 文件底部添加两行配置保存退出
export PATHPATHusrlocalmysqlbinusrlocalmysqllib
export PATH
设置环境变量立生效
source etcprofile
10启动MySQL服务
service mysql start
查初始密码
cat rootmysql_secret
11登录MySQL
mysql uroot p密码
修改密码:
SET PASSWORD FOR 'root'@localhostPASSWORD('123456') #应换成密码
12设置远程登录
mysql>use mysql
mysql>update user set host'' where user'root' limit 1
刷新权限
mysql>flush privileges
然检查3306端口否开放
netstat nupl|grep 3306
开放3306端口
firewall cmd permanent addprot3306tcp
重启防火墙
firewall cmd reload
yum安装MySQL
安装环境:AliyunLinux(阿里linux系统64位)
cat etcosrelease
getconf LONG_BIT
首先系统中没带mysql东西先删掉
查:
find name mysql
删:
rm rf 边查找路径路径空格隔开
#者边条命令
find namemysql|xargs rm rf
开始安装
rpm Uvh httpsrepomysqlcommysql57communityreleaseel711noarchrpm
yum enablerepomysql80community install mysqlcommunityserver
步开始询问选择概意思:
总371M否载?
输入y然回车
概意思文件中检索密钥MySQL导入GPG问否OK?(英文谅解)
输入y然回车
Complete 完成
查mysql状态:
service mysqld start
接需查mysql创建默认密码首次登陆配置mysql时需
grep A temporary password varlogmysqldlog
mysql默认密码开始配置mysql
mysql_secure_installation
登陆数库:mysql u root p
功告成咯
需提醒阿里云版系统防火墙默认关闭设置果需外连接数库话记检查阿里云服务器安全组里否开放数库默认端口3306
然进入mysql库中修改update user set host'' where user'root'
sqlyog等工具连接数库
坑:
sqlyog连接数库时出现错误提示:Authentication plugin caching_sha2_password’ cannot be loaded
客户端支持caching_sha2_password种密码加密方式
需修改密码老版密码验证方式
登陆数库进入mysql库
update user set host'' where user'root'
重启:service mysqld restart
ALTER USER 'root'@'' IDENTIFIED WITH mysql_native_password BY '新密码'
重启:service mysqld restart
里 Abc123456a 新密码
修改退出sqlyog连接试试?
连接成功
Hive环境搭建
前提:
1 安装Hive前求先预装:
2 安装JDK 8
3 安装Hadoop277
4 安装MySQL
安装
1 载hive解压缩户目录:
1 tar xzvf apachehive236bintargz
2 改名:
3 mv apachehive236bin hive
2 设置环境变量:
二配置理
首先进入conf目录带template缀文件移缀
中hivedefaultxml移缀需修改名hivesitexml
1 通方法Hive进行配置:
11 修改hiveenvsh
1 cp hiveenvshtemplate hiveenvsh
2 Hive Hadoop 需 hiveenvsh 文件中指定 Hadoop 安装路径:
3
4 vim hiveenvsh
5
6 开配置文件中添加行:
7
8 export JAVA_HOMEusrlocalhadoopjdk180_221
9 export HADOOP_HOMEusrlocalhadoophadoop277
10 export HADOOP_CONF_DIRHADOOP_HOMEetchadoop
11 export HIVE_HOMEusrlocalhive
12 export HIVE_CONF_DIRHIVE_HOMEconf
13 export HIVE_AUX_JARS_PATHHIVE_HOMElib
12 修改hivelog4j2properties配置hivelog
1 cp hivelog4j2propertiestemplate hivelog4j2properties
2
3 vim confhivelog4j2properties
4
5 配置面参数(果没logs目录hive根目录创建):
6
7 propertyhivelogdirusrlocalhivelogs
13 usrlocalhive215新建tmp目录tmp新建hive目录
1 cd usrlocalhive
2 mkdir tmp
3 mkdir tmphive
14 修改hivesitexml
1 cp hivedefaultxmltemplate hivesitexml
2
3 hivesitexml文件中:
4
5 {systemjavaiotmpdir}换成homehduserhivetmp
6
7 {systemusername}换1921688101 节点名
2) hivesitexml 中配置 MySQL 数库连接信息:
面配置信息需改写出需文件弄外部ctrl+f进行搜索应里数然进行修改
1
2
3
4 < 设置面属性 >
5
6hiveexecscratchdir
7tmphive
8
9
10
11hiveexeclocalscratchdir
12usrlocalhivetmphive
13Local scratch space for Hive jobs
14
15
16
17hivedownloadedresourcesdir
18usrlocalhivetmp{hivesessionid}_resources
19Temporary local directory for added resources in the remote file system
20
21
22
23hivequeryloglocation
24usrlocalhivetmphive
25Location of Hive run time structured log file
26
27
28
29hiveauxjarspath
30usrlocalhivelibusrlocalhivejdbc
31These JAR file are available to all users for all jobs
32
33
34hivemetastorewarehousedir
35hdfs 19216881019000userhivewarehouse
36相fsdefaultname关目录理表存储位置
37
38
39 <配置Hive Metastore>
40
41javaxjdooptionConnectionURL
42jdbcmysql 19216881013306hivecreateDatabaseIfNotExisttrue&characterEncodingUTF8
43
44
45
46javaxjdooptionConnectionDriverName
47commysqljdbcDriver 高版驱动需改成commysqlcjjdbcDriver
48
49
50
51javaxjdooptionConnectionUserName
理解Hadoop HDFS 6
1 介绍 6
2 HDFS设计原 6
21 设计目标 7
22 系统架构容错性设计 7
23 HDFS适合应类型 7
3 HDFS核心概念 7
31 Blocks 7
32 Namenode & Datanode 7
33 Block Caching 8
34 HDFS Federation 8
35 HDFS HA(High Availability高性) 8
4 命令行接口 9
5 Hadoop文件系统 11
6 Java接口 13
61 读操作 13
62 写数 14
63 目录操作 14
64 删数 15
7 数流(读写流程) 15
71 读文件 15
72 写文件 16
73 致性模型 17
74 Hadoop节点距离 18
8 相关运维工具 18
81 distcp行复制 18
82 衡HDFS集群 19
9 HDFS机架感知概念配置实现 19
机架感知什? 19
二告诉呢? 19
三什情况会涉机架感知? 19
四机架感知需考虑情况(权衡性性带宽消耗) 19
五通什方式够告知Hadoop NameNode Slaves机器属Rack?配置步骤 19
六网络拓扑机器间距离 21
10 HDFS理界面 21
YARN 22
基架构 22
工作机制 22
ResourceManager 23
资源理 23
务调度 23
部结构 23
作业提交全程 24
资源调度器 25
务推测执行 26
YARNWEB UI说明 27
集群运行状态查 29
Hadoop 30 新特性 30
Hadoop Common 30
Hadoop HDFS 30
Hadoop MapReduce 31
Hadoop YARN 31
总结 31
Hive部表外部表区 34
概念理解 34
创建部表t1 34
装载数(t1) 35
创建外部表t2 37
装载数(t2) 37
查文件位置 37
观察HDFS文件 40
重新创建外部表t2 41
官网解释 42
Hive数仓库拉链表流水表全量表增量表 42
Hadoop 320 完全分布式集群搭建 45
集群环境搭建 46
二Hadoop配置修改 47
修改 hadoopenvsh 配置 jdk 路径定义集群操作户 47
修改 coresitexml hadoop核心配置 47
修改 hdfssitexml hadoop 节点配置 47
修改 workers 告知 hadoop hdfsDataNode节点 48
修改 yarnsitexml 配置yarn服务 48
修改mapredsitexml 文件 49
修改配置文件 分发 节点三台服务器 49
三Hadoop服务启动 49
四运行WordCount 52
Linux台载MySQL 53
yum安装MySQL 56
Hive环境搭建 61
安装 61
二配置理 61
三运行 64
Apache Mahout环境搭建 65
PySpark环境搭建 66
Linux台载Python 38 66
1赖安装 66
2载安装包 67
3解压 67
4安装 67
5添加软链接 67
6测试 67
Linux升级安装python38配置pipyum 67
Linux安装Python 38环境卸载旧Python 70
安装新版Python 2713Python 362(Python 2Python 3存修改默认版Python 362) 72
Linux安装Apache Spark 310详细步骤 73
Spark安装配置 76
Spark集群安装设置 79
Ubuntu 1204Hadoop 220 集群搭建 82
Ubuntu 1404安装Hadoop240(单机模式) 87
启动Spark集群 94
Spark性优化 99
1Spark作业基运行原理 101
2资源参数调优 101
numexecutors 101
executormemory 102
executorcores 102
drivermemory 102
sparkdefaultparallelism 102
sparkstoragememoryFraction 102
sparkshufflememoryFraction 102
3资源参数参考示例 103
4Spark中三种Join策略 103
Broadcast Hash Join 103
Shuffle Hash Join 104
Sort Merge Join 104
5Spark 30 中 AQE新特性 105
6数仓库中数优化般原 109
7Spark 中宽赖窄赖 109
概述 109
详细运行原理 110
8Spark算子 113
9Spark RDD 144
Spark RDD特性 144
Spark RDD核心特性 144
关系型数库数性优化解决方案分表(前表历史表)表分区数清理原 147
原目 147
数否需清理阀值判断 147
满负载周期判断 147
迁移周期判断 147
类型数分区方案 148
历史表清理方案 148
注意点 148
数仓库缓慢变化维(Slow changing demenison) 实现方案 149
MySQLTeradataPySpark代码互转表代码 151
PySpark代码基结构 196
PySparkMySQL导出数parquet文件 197
PySparkTeradata导出数parquet文件 197
PySparkParquent文件写入Hive表 198
PySpark读取HiveSQL查询数写入parquet文件 198
PySpark获取Dataframe采样数保存CSV文件 198
PySpark连接MySQL数库插入数 198
PySpark连接Teradata数库插入数 198
PySpark遍历Dataframe行 199
PySpark移动Parquet文件目录 200
PySpark复制Parquet文件目录 200
PySpark删Parquet文件目录 200
PySpark修改Hive指存储路径 200
PySpark显示HDFS路径文件 201
PySpark显示普通Hive表容量(GB) 201
PySpark显示Hive分区表容量(GB) 201
PySpark显示HDFS目录子目录容量 201
PySpark调SqoopHDFS导入Hive表 201
HiveQLparquet文件创建Hive表 202
HiveQLHive表创建Hive视图 202
HiveQL格式化显示Hive查询结果数 202
Hive导出Hive查询结果数CSV文件 202
HiveQL显示Hive表 202
HiveQL显示Hive数库 202
Shell带日期参数运行HQL脚 202
HiveQL更新视图指天表数 203
HiveQL修改Hive表指存储文件 203
Shell清HDFS里数 204
Shell查HDFS数 204
Sqoop显示MySQL中数库 204
SqoopMySQL数库导入HDFS 204
SqoopHDFS数库导入MySQL 206
Sqoop显示MySQL中数库 206
Teradata支持数类型 207
MySQL支持数类型 209
Hive支持数类型 209
Parquet文件存储格式 210
项目组成 210
数模型 211
StripingAssembly算法 212
Parquet文件格式 215
性 216
项目发展 218
总结 218
Apache Airflow文档 218
原理 221
导 221
Airflow环境安装配置 222
通安装方法 222
Airflow环境安装(Docker) 224
Airflow环境配置(Docker) 224
Airflow环境安装(Windows 10) 225
容 227
项目 227
许证 228
快速开始 231
教程 231
Operator教程 257
图形界面截图 301
概念 305
数分析 323
命令行参数 325
调度触发器 345
插件 348
安全性 351
时区 358
Experimental Rest API 361
整合 362
Lineage 432
常见问题 433
API 参考 436
Apache Airflow 20 新特性 600
TaskFlow API(AIP31) 种新编写dags方式 600
完全REST API(AIP32) 601
调度器性显著提升 602
调度器高兼容 (AIP15) 603
务组 (AIP34) 603
崭新户界面 603
减少传感器负载智传感器 (AIP17) 604
简化KubernetesExecutor 604
Airflow core(核心)providers(第三方安装包) Airflow 拆分 60 包: 604
安全性 605
配置 605
基Apache Airflow企业级数框架架构设计 605
理解Hadoop HDFS
文详细介绍HDFS中许概念理解Hadoop分布式文件系统帮助
1 介绍
现代企业环境中单机容量法存储量数需跨机器存储统理分布集群文件系统称分布式文件系统旦系统中引入网络避免引入网络编程复杂性例挑战果保证节点时候数丢失
传统网络文件系统(NFS)然称分布式文件系统存限制NFS中文件存储单机法提供性保证客户端时访问NFS Server时容易造成服务器压力造成性瓶颈外果NFS中文件进行操作需首先步修改步服务端前客户端见某种程度NFS种典型分布式系统然文件确放远端(单)服务器面
NFS协议栈事实种VFS(操作系统文件种抽象)实现
HDFSHadoop Distributed File System简称Hadoop抽象文件系统种实现Hadoop抽象文件系统系统Amazon S3等集成甚通Web协议(webhsfs)操作HDFS文件分布集群机器时提供副进行容错性保证例客户端写入读取文件直接操作分布集群机器没单点性压力
果零开始搭建完整集群参考[Hadoop集群搭建详细步骤(260)](httpblogcsdnnetbingduanlbdarticledetails51892750)
2 HDFS设计原
HDFS设计初非常明确应场景适什类型应适什应相明确指导原
21 设计目标
· HDFSHadoop核心项目现数领域事实存储标准高容错性设计运行量廉价商业硬件设计会假设前提
· 首先会首先假设硬件障通常现象说块磁盘障概率非常服务器集群数千台甚万台节点时候(磁盘障)非常司空见惯事情说快速发现定位问题快速做障恢复重设计目标
· 第二HDFS适合容量数流式访问样场景说数场景动辄百G甚T文件相低延时言会更加意批量处理高吞吐样诉求
· 第三形成理念移动计算代价移动数代价数领域普遍识Hadoop推出HDFS存储时候推出MapReduce计算框架出目
· 存储非常文件:里非常指百MG者TB级实际应中已集群存储数达PB级根Hadoop官网YahooHadoop集群约10万颗CPU运行4万机器节点更世界Hadoop集群情况参考Hadoop官网
· 采流式数访问方式 HDFS基样假设:效数处理模式次写入次读取数集常数源生成者拷贝次然做分析工作
分析工作常读取中部分数全部 读取整数集需时间读取第条记录延时更重
· 运行商业硬件 Hadoop需特贵reliable()机器运行普通商机器(家供应商采购) 商机器代表低端机器集群中(尤集群)节点失败率较高HDFS目标确保集群节点失败时候会户感觉明显中断
22 系统架构容错性设计
HFDS典型MasterSlave架构里NameNode存储文件系统元数说分块文件路径等等类数BLOCK形式存储DataNode整体HDFS提供client客户提供文件系统命名空间操作说文件开关闭重命名移动等等
说HDFS存储文件提数副机制说里PART 0文件包括Block 1Block 3两Block时设置replica副数等213两Block会复制出外1外3存储外DataNode节点文件拆分两Block存储拥两副里面核心问题拆分数会存储方(DataNode)样调度策略问题Block副存节点(DataBlock)节点挂掉时候数丢失? HFDS解决问题呢?引入机架感知(Rack Awareness)样概念里引入两机架Rack 1Rack 2台机架会三样节点(DataNode)
23 HDFS适合应类型
场景适合HDFS存储数面列举:
1) 低延时数访问
延时求毫秒级应适合采HDFSHDFS高吞吐数传输设计牺牲延时HBase更适合低延时数访问
2)量文件
文件元数(目录结构文件block节点列表blocknode mapping)保存NameNode存中 整文件系统文件数量会受限NameNode存
验言文件目录文件块般占150字节元数存空间果100万文件文件占1文件块需约300M存十亿级文件数量现商机器难支持
3)方读写需意文件修改
HDFS采追加(appendonly)方式写入数支持文件意offset修改支持写入器(writer)
3 HDFS核心概念
31 Blocks
物理磁盘中块概念磁盘物理Block磁盘操作单元读写操作均Block单元般512 Byte文件系统物理Block抽象层概念文件系统Block物理磁盘Block整数倍通常KBHadoop提供dffsck类运维工具文件系统Block级进行操作
HDFSBlock块般单机文件系统默认128MHDFS文件拆分成blocksizedchunkchunk作独立单元存储Block文件会占整Block会占实际例 果文件1MHDFS中会占1M空间128M
HDFSBlock什?
化查找(seek)时间控制定位文件传输文件时间例假设定位Block需时间10ms磁盘传输速度100Ms果定位Block时间占传输时间例控制1Block需约100M
果Block设置MapReduce务中Map者Reduce务数 果集群机器数量会作业运行效率低
Block抽象处
block拆分单文件整磁盘容量构成文件Block分布整集群 理单文件占集群中机器磁盘
Block抽象简化存储系统Block需关注权限者等容(容文件级进行控制)
Block作容错高机制中副单元Block单位进行复制
32 Namenode & Datanode
整HDFS集群NamenodeDatanode构成masterworker()模式Namenode负责构建命名空间理文件元数等Datanode负责实际存储数负责读写工作
Namenode
Namenode存放文件系统树文件目录元数元数持久化2种形式:
· namespcae image
· edit log
持久化数中包括Block节点列表文件Block分布集群中节点信息系统重启时候重新构建(通Datanode汇报Block信息)
HDFS中Namenode成集群单点障Namenode时整文件系统HDFS针单点障提供2种解决机制:
1)备份持久化元数
文件系统元数时写文件系统 例时元数写文件系统NFS备份操作步原子
2)Secondary Namenode
Secondary节点定期合Namenodenamespace imageedit log 避免edit log通创建检查点checkpoint合会维护合namespace image副 Namenode完全崩溃时恢复数图Secondary Namenode理界面:
Secondary Namenode通常运行台机器合操作需耗费量CPU存数落NamenodeNamenode完全崩溃时会出现数丢失 通常做法拷贝NFS中备份元数Second作新Namenode
HA(High Availability高性)中运行Hot Standby作热备份Active Namenode障代原Namenode成Active Namenode
Datanode
数节点负责存储提取Block读写请求namenode直接客户端数节点周期性Namenode汇报节点存储Block相关信息
33 Block Caching
DataNode通常直接磁盘读取数频繁Block存中缓存默认情况Block数节点会缓存针文件性化配置
作业调度器利缓存提升性例MapReduce务运行Block缓存节点
户者应NameNode发送缓存指令(缓存文件缓存久) 缓存池概念理组缓存权限资源
34 HDFS Federation
知道NameNode存会制约文件数量HDFS Federation提供种横扩展NameNode方式Federation模式中NameNode理命名空间部分例NameNode理user目录文件 NameNode理share目录文件
NameNode理namespace volumnvolumn构成文件系统元数NameNode时维护Block Pool保存Block节点映射等信息NameNode间独立节点失败会导致节点理文件
客户端mount table文件路径映射NameNodemount tableNamenode群组封装层层Hadoop文件系统实现通viewfs协议访问
35 HDFS HA(High Availability高性)
HDFS集群中NameNode然单点障(SPOF Single Point Of Failure)元数时写文件系统Second NameNode定期checkpoint利保护数丢失提高性
NameNode唯文件元数fileblock映射负责方 挂包括MapReduce作业法进行读写
NameNode障时常规做法元数备份重新启动NameNode元数备份源:
· 文件系统写入中备份
· Second NameNode检查点文件
启动新Namenode需重新配置客户端DataNodeNameNode信息外重启耗时般较久稍具规模集群重启常需十分钟甚数时造成重启耗时原致:
1) 元数镜文件载入存耗时较长
2) 需重放edit log
3) 需收DataNode状态报告满足条件离开安全模式提供写服务
HadoopHA方案
采HAHDFS集群配置两NameNode分处ActiveStandby状态Active NameNode障Standby接责继续提供服务户没明显中断感觉般耗时十秒数分钟
HA涉实现逻辑
1) 备需享edit log存储
NameNode命NameNode享份edit log备切换时Standby通回放edit log步数
享存储通常2种选择
· NFS:传统网络文件系统
· QJM:quorum journal manager
QJM专门HDFSHA实现设计提供高edit logQJM运行组journal nodeedit log必须写部分journal nodes通常3节点允许节点失败类似ZooKeeper注意QJM没ZK然HDFS HA确ZK选举Namenode般推荐QJM
2)DataNode需时备发送Block Report
Block映射数存储存中(磁盘)Active NameNode挂掉新NameNode够快速启动需等DatanodeBlock ReportDataNode需时备两NameNode发送Block Report
3)客户端需配置failover模式(失效备援模式户透明)
Namenode切换客户端说感知通客户端库实现客户端配置文件中HDFS URI逻辑路径映射Namenode址客户端会断尝试Namenode址直成功
4)Standby代Secondary NameNode
果没启HAHDFS独立运行守护进程作Secondary Namenode定期checkpoint合镜文件edit日志
果Namenode失败时备份Namenode正关机(停止 Standby)运维员然头启动备份Namenode样没HA时候更省事算种改进重启整程已标准化Hadoop部需运维进行复杂切换操作
NameNode切换通代failover controller实现failover controller种实现默认实现ZooKeeper保证Namenode处active状态
Namenode运行轻量级failover controller进程该进程简单心跳机制监控Namenode存活状态Namenode失败时触发failoverFailover运维手动触发例日常维护中需切换Namenode种情况graceful(优雅) failover非手动触发failover称ungraceful failover
ungraceful failover情况没办法确定失败(判定失败)节点否停止运行说触发failover前Namenode运行QJM次允许Namenode写edit log前Namenode然接受读请求Hadoopfencing杀掉前NamenodeFencing通收回前Namenode享edit log访问权限关闭网络端口原Namenode继续接受服务请求STONITH技术前Namenode关机
HA方案中Namenode切换客户端说见前面已介绍通客户端库完成
4 命令行接口
HDFS提供种交互方式例通Java APIHTTPshell命令行命令行交互通hadoop fs操作例:
1 hadoop fs copyFromLocal 复制文件HDFS
2 hadoop fs mkdir 创建目录
3 hadoop fs ls 列出文件列表
Hadoop中文件目录权限类似POSIX模型包括读写执行3种权限:
· 读权限(r):读取文件者列出目录中容
· 写权限(w):文件文件写权限目录写权限指该目录创建者删文件(目录)权限
· 执行权限(x):文件没谓执行权限忽略目录执行权限访问器目录容
文件目录ownergroupmode三属性owner指文件者group权限组mode 者权限文件属组中组员权限非者非组员权限组成图表示者root拥读写权限supergroup组组员读权限读权限
文件权限否开启通dfspermissionsenabled属性控制属性默认false没开安全限制会客户端做授权校验果开启安全限制会操作文件户做权限校验特殊户superuserNamenode进程标识会针该户做权限校验
ls命令执行结果:
返回结果类似Unix系统ls命令第栏文件moded表示目录紧接着3种权限9位 第二栏指文件副数数量通dfsreplication配置目录表示没副说诸者组更新时间文件Unix系统中ls命令致
果需查集群状态者浏览文件目录访问Namenode暴露Http Server查集群信息般namenode机器50070端口
5 Hadoop文件系统
前面Hadoop文件系统概念抽象HDFS中种实现Hadoop提供实现图:
简单介绍Local文件系统抽象hdfs常见两种web形式(webhdfsswebhdfs)实现通HTTP提供文件操作接口harHadoop体系压缩文件文件时候压缩成文件效减少元数数量viewfs前面介绍HDFS Federation张提客户端屏蔽Namenode底层细节ftp顾名思义ftp协议实现文件操作转化ftp协议s3aAmazon云服务提供存储系统实现azure微软云服务台实现
前面提命令行HDFS交互事实方式操作文件系统例Java应程序orgapachehadoopfsFileSystem操作形式操作基FileSystem进行封装里介绍HTTP交互方式
WebHDFSSWebHDFS协议文件系统暴露HTTP操作种交互方式原生Java客户端慢适合操作文件通HTTP2种访问方式直接访问通代理访问
直接访问
直接访问示意图:
NamenodeDatanode默认开嵌入式web serverdfswebhdfsenabled默认truewebhdfs通服务器交互元数操作通namenode完成文件读写首先发namenode然重定datanode读取(写入)实际数流
通HDFS代理
采代理示意图示 代理处通代理实现负载均衡者带宽进行限制者防火墙设置代理通HTTP者HTTPS暴露WebHDFS应webhdfsswebhdfs URL Schema
代理作独立守护进程独立namenodedatanodehttpfssh脚默认运行14000端口
FileSystem直接操作命令行HTTTP外C语言APINFSFUSER等方式里做介绍
6 Java接口
实际应中HDFS数操作通FileSystem操作部分重点介绍相关接口关注HDFS实现类DistributedFileSystem相关类
61 读操作
URL读取数者直接FileSystem操作
Hadoop URL读取数
javanetURL类提供资源定位统抽象定义种URL Schema提供相应处理类进行实际操作hdfs schema便样种实现
1 InputStream in null
2 try {
3 in new URL(hdfsmasteruserhadoop)openStream()
4 }finally{
5 IOUtilscloseStream(in)
6 }
定义Schema需设置URLStreamHandlerFactory操作JVM进行次次操作会导致通常静态块中完成面截图示例:
FileSystem API读取数
1) 首先获取FileSystem实例般静态get工厂方法
1 public static FileSystem get(Configuration conf) throws IOException
2 public static FileSystem get(URI uri Configuration conf) throws IOException
3 public static FileSystem get(URI uri Configuration confString user) throws IOException
果文件通getLocal获取文件系统象:
public static LocalFileSystem getLocal(COnfiguration conf) thrown IOException
2)调FileSystemopen方法获取输入流
1 public FSDataInputStream open(Path f) throws IOException
2 public abstarct FSDataInputStream open(Path f int bufferSize) throws IOException
默认情况open4KBBuffer根需行设置
3)FSDataInputStream进行数操作
FSDataInputStreamjavaioDataInputStream特殊实现基础增加机读取部分读取力
1 public class FSDataInputStream extends DataInputStream
2 implements Seekable PositionedReadable
3 ByteBufferReadable HasFileDescriptor CanSetDropBehind CanSetReadahead
4 HasEnhancedByteBufferAccess
机读取操作通Seekable接口定义:
1 public interface Seekable {
2 void seek(long pos) throws IOException
3 long getPos() throws IOException
4 }
seek操作开销昂贵慎
部分读取通PositionedReadable接口定义:
1 public interface PositionedReadable{
2 public int read(long pistion byte[] bufferint offser int length) throws IOException
3 public int readFully(long pistion byte[] bufferint offser int length) throws IOException
4 public int readFully(long pistion byte[] buffer) throws IOException
5 }
62 写数
HDFS中文件FileSystem类create方法重载形式创建create方法返回输出流FSDataOutputStream调返回输出流getPos方法查前文件位移进行seek操作HDFS仅支持追加操作
创建时传递回调接口Peofressable获取进度信息
append(Path f)方法追加容已文件实现提供该方法例Amazon文件实现没提供追加功
面例子:
1 String localSrc args[0]
2 String dst args[1]
3
4 InputStream in new BufferedInputStream(new FileInputStream(localSrc))
5
6 Configuration conf new Configuration()
7 FileSystem fs FileSystemget(URIcreate(dst)conf)
8
9 OutputStream out fscreate(new Path(dst) new Progressable(){
10 public vid progress(){
11 Systemoutprint()
12 }
13 })
14
15 IOUtilscopyBytes(in out 4096true)
63 目录操作
mkdirs()方法会动创建没级目录
HDFS中元数封装FileStatus类中包括长度block sizereplicaions修改时间者权限等信息FileSystem提供getFileStatus方法获取FileStatusexists()方法判断文件者目录否存
列出文件(list)listStatus方法查文件者目录信息
1 public abstract FileStatus[] listStatus(Path f) throws FileNotFoundException
2 IOException
Path文件时候返回长度1数组FileUtil提供stat2Paths方法FileStatus转化Path象
globStatus通配符文件路径进行匹配:
public FileStatus[] globStatus(Path pathPattern) throws IOException
· 1
PathFilter定义文件名滤根文件属性进行滤类似javaioFileFilter例面例子排定正表达式文件:
1 public interfacePathFilter{
2 boolean accept(Path path)
3 }
64 删数
FileSystemdelete()方法
public boolean delete(Path f boolean recursive) throws IOException
· 1
recursive参数f文件时候忽略果f文件recursicetrue删整目录否抛出异常
7 数流(读写流程)
接详细介绍HDFS读写数流程致性模型相关概念
71 读文件
致读文件流程:
1)客户端传递文件PathFileSystemopen方法
2)DFS采RPC远程获取文件开始blockdatanode址Namenode会根网络拓扑结构决定返回节点(前提节点block副)果客户端身Datanode节点刚block副直接读取
3)客户端open方法返回FSDataInputStream象读取数(调read方法)
4)DFSInputStream(FSDataInputStream实现改类)连接持第block节点反复调read方法读取数
5)第block读取完毕寻找block佳datanode读取数果必DFSInputStream会联系Namenode获取批Block 节点信息(存放存持久化)寻址程客户端见
6)数读取完毕客户端调close方法关闭流象
读数程中果Datanode通信发生错误DFSInputStream象会尝试佳节点读取数记住该失败节点 续Block读取会连接该节点
读取BlockDFSInputStram会进行检验验证果Block损坏尝试节点读取数损坏block汇报Namenode
客户端连接datanode获取数namenode指导样支持量发客户端请求namenode流量均匀分布整集群
Block位置信息存储namenode存中相应位置请求非常高效会成瓶颈
72 写文件
步骤分解
1)客户端调DistributedFileSystemcreate方法
2)DistributedFileSystem远程RPC调Namenode文件系统命名空间中创建新文件时该文件没关联block 程中Namenode会做校验工作例否已存名文件否权限果验证通返回FSDataOutputStream象 果验证通抛出异常客户端
3)客户端写入数时候DFSOutputStream分解packets(数包)写入数队列中该队列DataStreamer消费
4)DateStreamer负责请求Namenode分配新block存放数节点节点存放Block副构成道 DataStreamerpacket写入道第节点第节点存放packet转发节点节点存放 继续传递
5)DFSOutputStream时维护ack queue队列等datanode确认消息道datanode确认packetack队列中移
6)数写入完毕客户端close输出流packet刷新道中然安心等datanode确认消息全部确认告知Namenode文件完整 Namenode时已知道文件Block信息(DataStreamer请求Namenode分配block)需等达副数求然返回成功信息客户端
Namenode决定副存Datanode?
HDFS副存放策略性写带宽读带宽间权衡默认策略:
· 第副放客户端相机器果机器集群外机选择(会选择容量太慢者前操作太繁忙)
· 第二副机放第副机架
· 第三副放第二副机架节点满足条件节点中机选择
· 更副整集群机选择然会量避免太副机架
副位置确定建立写入道时候会考虑网络拓扑结构面存放策略:
样选择滴衡性读写性
· 性:Block分布两机架
· 写带宽:写入道程需跨越交换机
· 读带宽:两机架中选读取
73 致性模型
致性模型描述文件系统中读写操见性HDFS中文件旦创建文件系统命名空间中见:
1 Path p new Path(p)
2 fscreate(p)
3 assertTaht(fsexists(p)is(true))
写入文件容保证见象流已刷新
`java
Path p new Path(p)
OutputStream out fscreate(p)
outwrite(contentgetBytes(UTF8))
outflush()
assertTaht(fsgetFileStatus(p)getLen0L) 0调flush
1
2 果需强制刷新数DatanodeFSDataOutputStreamhflush方法强制缓刷datanode
3 hflushHDFS保证时间点止写入文件数达数节点
4 ```java
5 Path p new Path(p)
6 OutputStream out fscreate(p)
7 outwrite(contentgetBytes(UTF8))
8 outflush()
9 assertTaht(fsgetFileStatus(p)getLenis(((longcontentlength())))
关闭象流时部会调hflush方法hflush保证datanode数已写入磁盘保证写入datanode存 机器断电时候导致数丢失果保证写入磁盘hsync方法hsync类型fsync()系统调fsync提交某文件句柄缓数
1 FileOutputStreamout new FileOutPutStream(localFile)
2 outwrite(contentgetBytes(UTF8))
3 outflush()
4 outgetFD()sync()
5 assertTaht(localFilegetLenis(((longcontentlength())))
hflushhsync会导致吞吐量降设计应时需吞吐量数健壮性间做权衡
外文件写入程中前正写入BlockReader见
74 Hadoop节点距离
读取写入程中namenode分配Datanode时候会考虑节点间距离HDFS中距离没
采带宽衡量实际中难准确度量两台机器间带宽
Hadoop机器间拓扑结构组织成树结构达公父节点需跳转数作距离事实距离矩阵例子面例子简明说明距离计算:
数中心机架节点距离0
数中心机架节点距离2
数中心机架节点距离4
数中心机架节点距离6
Hadoop集群拓扑结构需手动配置果没配置Hadoop默认节点位数中心机架
8 相关运维工具
81 distcp行复制
前面关注点单线程访问果需行处理文件需编写应Hadoop提供distcp工具行导入数Hadoop者Hadoop导出例子:
1 hadoop distcp file1 file2 作fs cp命令高效代
2 hadoop distcp dir1 dir2
3 hadoop distcp update dir1 dir2 #update参数表示步更新文件保持变
distcp底层MapReduce实现map实现没reducemap中行复制文件 distcpmap间均分配文件map数量通m参数指定
hadoop distcp update delete p hdfsmaster19000foo hdfsmaster2foo
样操作常两集群间复制数update参数表示步更新数delete会删目标目录中存源目录存文件p参数表示保留文件全校block副数量等属性
果两集群Hadoop版兼容webhdfs协议:
hadoop distcp webhdfsnamenode150070foo webhdfsnamenode250070foo
82 衡HDFS集群
distcp工具中果指定map数量1仅速度慢Block第副全部落运行唯map节点直磁盘溢出distcp时候默认map数量20
HDFSBlock均匀分布节点时候工作果没办法作业中量保持集群衡例限制map数量(便节点作业)balancer工具调整集群Block分布
9 HDFS机架感知概念配置实现
机架感知什?
告诉 Hadoop 集群中台机器属机架
二告诉呢?
Hadoop机架感知非适应Hadoop集群分辨某台Slave 机器属Rack非智感知需 Hadoop理者告知 Hadoop台机器属Rack样HadoopNameNode启动初始化时会机器 rack 应信息保存存中作接 HDFS 写块操作分配 datanode
列表时( 3 block 应三台 datanode)选择 datanode 策略量三副分布 rack
三什情况会涉机架感知?
Hadoop 集群规模情况
四机架感知需考虑情况(权衡性性带宽消耗)
(1)节点间通信够量发生机架跨机架
(2)提高容错力NameNode会数块副放机架
五通什方式够告知Hadoop NameNode Slaves机器属Rack?配置步骤
1默认情况Hadoop机架感知没启通常情况Hadoop集群 HDFS 选机器时候机选择说写数时Hadoop第块数 block1写rack1然机选择block2 写入rack2 时两Rack间产生数传输流量接机情况block3 重新写回 rack1时两Rack间产生次数流量Job处理数量非常者Hadoop推送数量非常时候种情况会造成 Rack间网络流量成倍升成性瓶颈进影响作业性整集群服务
Hadoop机架感知功启配置非常简单NameNode机器 hadoopsitexml 配置文件中配置选项:
topologyscriptfilenamepathtoRackAwarepy
配置选项 value 指定执行程序通常脚该脚接受参数输出值接受参数通常某台 DataNode机器IP址输出值通常该IP址应DataNodeRack例rack1NameNode启动时会判断该配置选项否空果非空表示已机架感知配置时NameNode会根配置寻找该脚接收 DataNodeHeartbeat时该 DataNodeIP址作参数传该脚运行输出作该DataNode属机架保存存Map中
脚编写需真实网络拓朴机架信息解清楚通该脚够机器IP址正确映射相应机架
简单实现:
#usrbinpython
#codingUTF8 –
import sys
rack {hadoopnode176tjrack1
hadoopnode178tjrack1
hadoopnode179tjrack1
hadoopnode180tjrack1
hadoopnode186tjrack2
hadoopnode187tjrack2
hadoopnode188tjrack2
hadoopnode190tjrack2
192168115rack1
192168117rack1
192168118rack1
192168119rack1
192168125rack2
192168126rack2
192168127rack2
192168129rack2
}
if namemain
print( + rackget(sysargv[1] rack0)
没确切文档说明 底机名 ip 址会传入脚脚中兼容机名 ip 址果机房架构较复杂话脚返回:dc1rack1 类似字符串
执行命令:chmod +x RackAwarepy
重启NameNode果配置成功NameNode启动日志中会输出:
INFO orgapachehadoopnetNetworkTopology Adding a new node rack119216811550010
六网络拓扑机器间距离
里基网络拓扑案例介绍复杂网络拓扑中Hadoop集群台机器间距离
机架感知NameNode 画出图示DataNode网络拓扑图D1R1 交换机底层 datanode H1
rackidD1R1H1H1 parent R1R1 D1 rackid信息通 topologyscriptfilename 配置 rackid 信息计算出意两台DataNode间距离
1 distance(D1R1H1D1R1H1)0 相DataNode
2 distance(D1R1H1D1R1H2)2 RackDataNode
3 distance(D1R1H1D1R1H4)4 IDC(互联网数中心(机房))DataNode
4 distance(D1R1H1D2R3H7)6 IDCDataNode
10 HDFS理界面
里HDFS理情况hadoop001开浏览器进入HDFS理界面输入:19216821612850070
点击DataNodes
YARN
Yarn资源调度台负责运算程序提供服务器运算资源相分布式操作系统台MapReduce等运算程序相运行操作系统应程序
基架构
YARNResourceManagerNodeManagerApplicationMasterContainer等组件构成
工作机制
1)运行机制
2)工作机制详解
(0)MapReduce程序提交客户端节点
(1)Yarn RunnerResourceManager申请Application
(2)ResourceManager该应程序资源路径返回Yarn Runner
(3)该程序运行需资源提交HDFS
(4)程序资源提交完毕申请运行MapReduce Application Master
(5)RM户请求初始化成Task
(6)中NodeManager领取Task务
(7)该NodeManager创建容器Container产生MapReduce Application Master
(8)ContainerHDFS拷贝资源
(9)MapReduce Application MasterResourceManager申请运行Map Task资源
(10)ResourceManager运行Map Task务分配外两NodeManager两NodeManager分领取务创建容器
(11)MapReduce两接收务NodeManager发送程序启动脚两NodeManager分启动Map TaskMap Task数分区排序
(12)MapReduce Application Master等Map Task运行完毕RM申请容器运行Reduce Task
(13)Reduce TaskMap Task获取相应分区数
(14)程序运行完毕MapReduce会ResourceManager申请注销
ResourceManager
负责全局资源理务调度整集群成计算资源池关注分配应负责容错
资源理
1 前资源节点分成Map slotReduce slot现ContainerContainer根需运行ApplicationMasterMapReduce者意程序
2 前资源分配静态目前动态资源利率更高
3 Container资源申请单位资源申请格式:
4 户提交作业ResourceManager然某NodeManager分配Container运行ApplicationMasterApplicationMaster根身程序需ResourceManager申请资源
5 YARN套Container生命周期理机制ApplicationMasterContainer间理应程序定义
务调度
1 关注资源情况根需求合理分配资源
2 Scheluer根申请需特定机器申请特定资源(ApplicationMaster负责申请资源时数化考虑ResourceManager量满足申请需求指定机器分配Container减少数移动)
部结构
· Client Service 应提交终止输出信息(应队列集群等状态信息)
· Adaminstration Service 队列节点Client权限理
· ApplicationMasterService 注册终止ApplicationMaster 获取ApplicationMaster资源申请取消请求异步传Scheduler 单线程处理
· ApplicationMaster Liveliness Monitor 接收ApplicationMaster心跳消息果某ApplicationMaster定时间没发送心跳务失效资源会回收然ResourceManager会重新分配ApplicationMaster运行该应(默认尝试2次)
· Resource Tracker Service 注册节点 接收注册节点心跳消息
· NodeManagers Liveliness Monitor 监控节点心跳消息果长时间没收心跳消息认该节点效 时该节点Container标记成效会调度务该节点运行
· ApplicationManager 理应程序记录理已完成应
· ApplicationMaster Launcher 应提交负责NodeManager交互分配Container加载ApplicationMaster负责终止销毁
· YarnScheduler 资源调度分配 FIFO(with Priority)FairCapacity方式
· ContainerAllocationExpirer 理已分配没启Container超定时间回收
作业提交全程
1)作业提交程YARN
作业提交全程详解
(1)作业提交
第0步:client调jobwaitForCompletion方法整集群提交MapReduce作业
第1步:clientRM申请作业id
第2步:RMclient返回该job资源提交路径作业id
第3步:client提交jar包切片信息配置文件指定资源提交路径
第4步:client提交完资源RM申请运行MrAppMaster
(2)作业初始化
第5步:RM收client请求该job添加容量调度器中
第6步:某空闲NM领取该job
第7步:该NM创建Container产生MRAppmaster
第8步:载client提交资源
(3)务分配
第9步:MrAppMasterRM申请运行maptask务资源
第10步:RM运行maptask务分配外两NodeManager两NodeManager分领取务创建容器
(4)务运行
第11步:MR两接收务NodeManager发送程序启动脚两NodeManager分启动maptaskmaptask数分区排序
第12步:MrAppMaster等maptask运行完毕RM申请容器运行reduce task
第13步:reduce taskmaptask获取相应分区数
第14步:程序运行完毕MR会RM申请注销
(5)进度状态更新
YARN中务进度状态(包括counter)返回应理器 客户端秒(通mapreduceclientprogressmonitorpollinterval设置)应理器请求进度更新 展示户
(6)作业完成
应理器请求作业进度外 客户端5分钟会通调waitForCompletion()检查作业否完成时间间隔通mapreduceclientcompletionpollinterval设置作业完成 应理器container会清理工作状态作业信息会作业历史服务器存储备户核查
2)作业提交程MapReduce
资源调度器
目前Hadoop作业调度器三种:FIFOCapacity SchedulerFair SchedulerHadoop272默认资源调度器Capacity Scheduler
具体设置详见:yarndefaultxml文件
1)先进先出调度器(FIFO)
2)容量调度器(Capacity Scheduler)
3)公调度器(Fair Scheduler)
务推测执行
1)作业完成时间取决慢务完成时间
作业干Map务Reduce务构成硬件老化软件Bug等某务运行非常慢
典型案例:系统中99Map务完成少数Map老进度慢完成办?
2)推测执行机制:
发现拖腿务某务运行速度远慢务均速度拖腿务启动备份务时运行谁先运行完采谁结果
3)执行推测务前提条件
(1)task备份务
(2)前job已完成task必须005(5)
(3)开启推测执行参数设置Hadoop272 mapredsitexml文件中默认开
may be executed in parallel
4)启推测执行机制情况
(1)务间存严重负载倾斜
(2)特殊务务数库中写数
5)算法原理
YARNWEB UI说明
安装完Yarn浏览器中通httpmaster8088访问YarnWEB UI图:
详细解释图中标记1(cluster)2(Nodes)两界面中资源关信息
面7字段信息进行解释:
1Active Nodes:表示Yarn集群理节点数实NodeManager数集群2NodeManager
2Memory Total:表示Yarn集群理存总存总等NodeManager理存NodeManager理存通yarnsitexml中配置进行配置:
配置中NodeManager理存1630MB整Yarn集群理存总1630MB * 2 3260MB约等318GBMemory Total
3Vcores Total:表示Yarn集群理cpu虚拟核心总数等NodeManager理虚拟核心NodeManager理虚拟核心数通yarnsitexml中配置进行配置
配置中NodeManager理虚拟核心数2整Yarn集群理虚拟核心总数2 * 2 4Vcores Total
4Scheduler Type:表示资源分配类型Hadoopyarn安装文章中说三中资源调度
5Minimum Allocation:分配资源说务Yarn申请资源时候Yarn少会分配
6Maximum Allocation:分配资源说务Yarn申请资源时候Yarn会分配
面Yarn集群理两NodeManager状态信息分:
1Rack:表示NodeManager机器机架
2Node State:表示NodeManager状态
3Mem Used:表示NodeManager已存Mem Avail:表示NodeManager剩少存VCores Used:表示NodeManager已VCores数量VCores Avail:表示NodeManager剩少VCores数量
点击Node Address
进入界面:
界面信息slave2NodeManager详细信息中Total Vmem allocated for Containers表示NodeManager理虚拟存虚拟存yarnsitexml中配置设置:
面配置yarnnodemanagervmempmemratio虚拟存物理存例41说虚拟存物理存41倍虚拟存1630MB * 41 6683MB约等653GB
集群运行状态查
注:般资源超配置资源话 Staday Fair Shar mem Min Resources mem
发生然Staday Fair Shar mem Min Resources mem
暂时未遇单列超max资源配情况Staday Fair Shar mem Min Resources mem情况
Hadoop 30 新特性
Hadoop 30功性方面hadoop核进行项重改进包括:
Hadoop Common
(1)精简Hadoop核包括剔期API实现默认组件实现换成高效实现(FileOutputCommitter缺省实现换v2版废hftp转webhdfs代移Hadoop子实现序列化库orgapachehadoopRecords
(2)Classpath isolation防止版jar包突google Guava混合HadoopHBaseSpark时容易产生突(httpsissuesapacheorgjirabrowseHADOOP11656)
(3)Shell脚重构 Hadoop 30Hadoop理脚进行重构修复量bug增加新特性支持动态命令等httpsissuesapacheorgjirabrowseHADOOP9902
Hadoop HDFS
(1)HDFS支持数擦编码HDFS降低性前提节省半存储空间(httpsissuesapacheorgjirabrowseHDFS7285)
(2)NameNode支持支持集群中activestandby namenode部署方式注:ResourceManager特性hadoop 20中已支持(httpsissuesapacheorgjirabrowseHDFS6440)
Hadoop MapReduce
(1)Tasknative优化MapReduce增加CC++map output collector实现(包括SpillSortIFile等)通作业级参数调整切换该实现shuffle密集型应性提高约30(httpsissuesapacheorgjirabrowseMAPREDUCE2841)
(2)MapReduce存参数动推断Hadoop 20中MapReduce作业设置存参数非常繁琐涉两参数:mapreduce{mapreduce}memorymbmapreduce{mapreduce}javaopts旦设置合理会存资源浪费严重前者设置4096MB者Xmx2g剩余2g实际法java heap(httpsissuesapacheorgjirabrowseMAPREDUCE5785)
Hadoop YARN
(1)基cgroup存隔离IO Disk隔离(httpsissuesapacheorgjirabrowseYARN2619)
(2)curator实现RM leader选举(httpsissuesapacheorgjirabrowseYARN4438)
(3)containerresizing(httpsissuesapacheorgjirabrowseYARN1197)
(4)Timelineserver next generation (httpsissuesapacheorgjirabrowseYARN2928)
hadoop30新参数
hadoop30
HADOOP
Move to JDK8+
Classpath isolation on by default HADOOP11656
Shell script rewrite HADOOP9902
Move default ports out of ephemeral range HDFS9427
HDFS
Removal of hftp in favor of webhdfs HDFS5570
Support for more than two standby NameNodes HDFS6440
Support for Erasure Codes in HDFS HDFS7285
YARN
MAPREDUCE
Derive heap size or mapreduce*memorymb automatically MAPREDUCE5785
HDFS7285中实现Erasure Coding新功鉴功远没发布阶段面块相关代码会进行进步改造做谓预分析帮助家提前解Hadoop社区目前实现功前没接触Erasure Coding技术中间程确实偶然相信文带家收获
Erasure coding纠删码技术简称EC种数保护技术早通信行业中数传输中数恢复种编码容错技术通原始数中加入新校验数部分数产生关联性定范围数出错情况通纠删码技术进行恢复面结合图片进行简单演示首先原始数n然加入m校验数块图示
Parity部分校验数块行数块组成Stripe条带行条带n数块m校验块组成原始数块校验数块通现数块进行恢复原
果校验数块发生错误通原始数块进行编码重新生成果原始数块发生错误 通校验数块解码重新生成
mn值固定变进行相应调整会奇中底什原理呢 实道理简单面图成矩阵矩阵运算具逆性数进行恢复出张标准矩阵相图家二者关联
总结
Hadoop 30alpha版预计2016夏天发布GA版11月12月发布
Hadoop 30中引入重功优化包括HDFS 擦编码Namenode支持MR Native Task优化YARN基cgroup存磁盘IO隔离YARN container resizing等
相前生产发布版Hadoop 2Apache Hadoop 3整合许重增强功 Hadoop 3版提供稳定性高质量API实际产品开发面简介绍Hadoop3变化
· 低Java版求Java7变Java8
Hadoopjar基Java 8运行版进行编译执行Java 7更低Java版户需升级Java 8
· HDFS支持纠删码(erasure coding)
纠删码种副存储更节省存储空间数持久化存储方法ReedSolomon(104)标准编码技术需14倍空间开销标准HDFS副技术需3倍空间开销纠删码额外开销重建远程读写通常存储常数(冷数)外新特性时户需考虑网络CPU开销
· YARN时间线服务 v2(YARN Timeline Service v2)
YARN Timeline Service v2应两挑战:(1)提高时间线服务扩展性性(2)通引入流(flow)聚合(aggregation)增强性代Timeline Service v1xYARN Timeline Service v2 alpha 2提出样户开发者进行测试提供反馈建议YARN Timeline Service v2测试容器中
· 重写Shell脚
Hadoopshell脚重写修补许长期存bug增加新特性
· 覆盖客户端jar(Shaded client jars)
2x版中hadoopclient Maven artifact配置会拉取hadoop传递赖hadoop应程序环境变量回带传递赖版应程序版相突问题
HADOOP11804 添加新 hadoopclientapihadoopclientruntime artifcathadoop赖隔离单Jar包中避免hadoop赖渗透应程序类路径中
· 支持Opportunistic ContainersDistributed Scheduling
ExecutionType概念引入样应够通Opportunistic执行类型请求容器调度时没资源种类型容器会分发NM中执行程序种情况容器放入NM队列中等资源便执行Opportunistic container优先级默认Guaranteedcontainer低需情况资源会抢占便Guaranteed container样需提高集群率
Opportunistic container默认中央RM分配目前已增加分布式调度器支持该分布式调度器做AMRProtocol解析器实现
· MapReduce务级优化
MapReduce添加映射输出收集器化实现支持密集型洗牌操作(shuffleintensive)jobs带30性提升
· 支持余2NameNodes
针HDFS NameNode高性初实现方式提供活跃(active)NameNode备(Standby)NameNode通3JournalNode法定数量复制编辑种架构够系统中节点障进行容错
该功够通运行更备NameNode提供更高容错性满足部署需求通配置3NameNode5JournalNode集群够实现两节点障容错
· 修改重服务默认端口
前Hadoop版中重Hadoop服务默认端口Linux时端口范围容(3276861000)意味着启动程中服务器端口突会启动失败突端口已时端口范围移NameNodeSecondary NameNodeDataNodeKMS会受影响文档已做相应修改通阅读发布说明 HDFS9427HADOOP12811详细解修改端口
· 提供文件系统连接器(filesystem connnector)支持Microsoft Azure Data LakeAliyun象存储系统
Hadoop支持Microsoft Azure Data LakeAliyun象存储系统集成作Hadoop兼容文件系统
· 数节点置衡器(Intradatanode balancer)
单DataNode理磁盘情况执行普通写操作时磁盘量较均添加者更换磁盘时会导致DataNode磁盘量严重均衡目前HDFS均衡器关注点DataNode间(inter)intra处理种均衡情况
hadoop3 中通DataNode部均衡功已处理述情况通hdfs diskbalancer ClI调
· 重写守护进程务堆理机制
针Hadoop守护进程MapReduce务堆理机制Hadoop3 做系列修改
HADOOP10950 引入配置守护进程堆新方法特HADOOP_HEAPSIZE配置方式已弃根机存进行动调整
MAPREDUCE5785 简化MAP配置减少务堆需务配置Java选项中明确指出需堆已明确指出堆现配置会受该改变影响
· S3GuradS3A文件系统客户端提供致性元数缓存
HADOOP13345 亚马逊S3存储S3A客户端提供选特性:够DynamoDB表作文件目录元数快速致性存储
· HDFS基路器互联(HDFS RouterBased Federation)
HDFS RouterBased Federation添加RPC路层HDFS命名空间提供联合视图现ViewFsHDFS Federation功类似区通服务端理表加载原客户端理简化现存HDFS客户端接入federated cluster操作
· 基API配置Capacity Scheduler queue configuration
OrgQueue扩展capacity scheduler提供种编程方法该方法提供REST API修改配置户通远程调修改队列配置样队列administer_queue ACL理员实现动化队列配置理
· YARN资源类型
Yarn资源模型已般化支持户定义计算资源类型仅仅CPU存集群理员定义GPU数量软件序列号连接存储资源然Yarn务够资源进行调度
Hive部表外部表区
未external修饰部表(managed table)external修饰外部表(external table)
区:
部表数Hive身理外部表数HDFS理
部表数存储位置hivemetastorewarehousedir(默认:userhivewarehouse)外部表数存储位置制定(果没LOCATIONHiveHDFSuserhivewarehouse文件夹外部表表名创建文件夹属表数存放里)
删部表会直接删元数(metadata)存储数删外部表仅仅会删元数HDFS文件会删
部表修改会修改直接步元数外部表表结构分区进行修改需修复(MSCK REPAIR TABLE table_name)
进行试验进行理解
概念理解
创建部表t1
create table t1(
id int
name string
hobby array
add map
)
row format delimited
fields terminated by ''
collection items terminated by ''
map keys terminated by ''
2 查表描述:desc t1
装载数(t1)
注:般少insert (insert overwrite)语句算算插入条数会调MapReduce里选择Load Data方式
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1 partcol2val2 )]
创建文件粘贴述记录载图:
文件容
1xiaomingbookTVcodebeijingchaoyangshagnhaipudong
2lileibookcodenanjingjiangningtaiwantaibei
3lihuamusicbookheilongjianghaerbin
然载
load data local inpath 'homehadoopDesktopdata' overwrite into table t1
忘记写文件名data笔者第次忘记写整Desktop传查全null乱码
查表容:
select * from t1
创建外部表t2
create external table t2(
id int
name string
hobby array
add map
)
row format delimited
fields terminated by ''
collection items terminated by ''
map keys terminated by ''
location 'usert2'
装载数(t2)
load data local inpath 'homehadoopDesktopdata' overwrite into table t2
查文件位置
图NameNode50070explorerhtml#user目录t2文件
t1呢?前配置默认路径里
样通命令行获两者位置信息:
desc formatted table_name
注:图中managed table部表external table外部表
##分删部表外部表
面分删部表外部表查区
观察HDFS文件
发现t1已存
t2然存
外部表仅仅删元数
重新创建外部表t2
create external table t2(
id int
name string
hobby array
add map
)
row format delimited
fields terminated by ''
collection items terminated by ''
map keys terminated by ''
location 'usert2'
里面插入数select * 结果
见数然
官网解释
官网中关external表介绍:
A table created without the EXTERNAL clause is called a managed table because Hive manages its data
Managed and External Tables
By default Hive creates managed tables where files metadata and statistics are managed by internal Hive processes A managed table is stored under the hivemetastorewarehousedir path property by default in a folder path similar to appshivewarehousedatabasenamedbtablename The default location can be overridden by the location property during table creation If a managed table or partition is dropped the data and metadata associated with that table or partition are deleted If the PURGE option is not specified the data is moved to a trash folder for a defined duration
Use managed tables when Hive should manage the lifecycle of the table or when generating temporary tables
An external table describes the metadata schema on external files External table files can be accessed and managed by processes outside of Hive External tables can access data stored in sources such as Azure Storage Volumes (ASV) or remote HDFS locations If the structure or partitioning of an external table is changed an MSCK REPAIR TABLE table_name statement can be used to refresh metadata information
Use external tables when files are already present or in remote locations and the files should remain even if the table is dropped
Managed or external tables can be identified using the DESCRIBE FORMATTED table_name command which will display either MANAGED_TABLE or EXTERNAL_TABLE depending on table type
Statistics can be managed on internal and external tables and partitions for query optimization
Hive官网介绍:
httpscwikiapacheorgconfluencedisplayHiveLanguageManual+DDL#LanguageManualDDLDescribeTableViewColumn
Hive数仓库拉链表流水表全量表增量表
1 全量表:天新状态数
2 增量表:天新增数增量数次导出新数
3 拉链表:维护历史状态新状态数种表拉链表根拉链粒度实际相快做优化部分变记录已通拉链表方便原出拉链时点客户记录
4 流水表: 表修改会记录反映实际记录变更
拉链表通常账户信息历史变动进行处理保留结果流水表天交易形成历史
流水表统计业务相关情况拉链表统计账户客户情况
数仓库拉链表(原理设计Hive中实现)
情况保持历史状态需拉链表做样做目保留状态情况节省空间
拉链表适种情况吧
数量点表中某字段变化呢变化频率高业务需求呢需统计种变化状态天全量份呢点太现实
仅浪费存储空间时业务统计点麻烦时拉链表作提现出节省空间满足需求
般数仓中通增加begin_dateen_date表示例两列start_dateend_date
1 20160820 20160820 创建 20160820 20160820
1 20160820 20160821 支付 20160821 20160821
1 20160820 20160822 完成 20160822 99991231
2 20160820 20160820 创建 20160820 20160820
2 20160820 20160821 完成 20160821 99991231
3 20160820 20160820 创建 20160820 20160821
3 20160820 20160822 支付 20160822 99991231
4 20160821 20160821 创建 20160821 20160821
4 20160821 20160822 支付 20160822 99991231
5 20160822 20160822 创建 20160822 99991231
begin_date表示该条记录生命周期开始时间end_date表示该条记录生命周期结束时间
end_date 99991231’表示该条记录目前处效状态
果查询前效记录select * from order_his where dw_end_date 99991231′
果查询20160821历史快select * from order_his where begin_date < 20160821′ and end_date > 20160821’
简单介绍拉链表更新:
假设天维度天状态天终状态
张订单表例原始数天订单状态明细
1 20160820 20160820 创建
2 20160820 20160820 创建
3 20160820 20160820 创建
1 20160820 20160821 支付
2 20160820 20160821 完成
4 20160821 20160821 创建
1 20160820 20160822 完成
3 20160820 20160822 支付
4 20160821 20160822 支付
5 20160822 20160822 创建
根拉链表希
1 20160820 20160820 创建 20160820 20160820
1 20160820 20160821 支付 20160821 20160821
1 20160820 20160822 完成 20160822 99991231
2 20160820 20160820 创建 20160820 20160820
2 20160820 20160821 完成 20160821 99991231
3 20160820 20160820 创建 20160820 20160821
3 20160820 20160822 支付 20160822 99991231
4 20160821 20160821 创建 20160821 20160821
4 20160821 20160822 支付 20160822 99991231
5 20160822 20160822 创建 20160822 99991231
出 1234订单状态统计前效状态
例hive例考虑实现性关
首先创建表
CREATE TABLE orders (
orderid INT
createtime STRING
modifiedtime STRING
status STRING
) row format delimited fields terminated by '\t'
CREATE TABLE ods_orders_inc (
orderid INT
createtime STRING
modifiedtime STRING
status STRING
) PARTITIONED BY (day STRING)
row format delimited fields terminated by '\t'
CREATE TABLE dw_orders_his (
orderid INT
createtime STRING
modifiedtime STRING
status STRING
dw_start_date STRING
dw_end_date STRING
) row format delimited fields terminated by '\t'
首先全量更新先20160820止数
初始化先20160820数初始化进
INSERT overwrite TABLE ods_orders_inc PARTITION (day '20160820')
SELECT orderidcreatetimemodifiedtimestatus
FROM orders
WHERE createtime < '20160821' and modifiedtime <'20160821'
刷dw中
INSERT overwrite TABLE dw_orders_his
SELECT orderidcreatetimemodifiedtimestatus
createtime AS dw_start_date
'99991231' AS dw_end_date
FROM ods_orders_inc
WHERE day '20160820'
结果
select * from dw_orders_his
OK
1 20160820 20160820 创建 20160820 99991231
2 20160820 20160820 创建 20160820 99991231
3 20160820 20160820 创建 20160820 99991231
剩余需进行增量更新
INSERT overwrite TABLE ods_orders_inc PARTITION (day '20160821')
SELECT orderidcreatetimemodifiedtimestatus
FROM orders
WHERE (createtime '20160821' and modifiedtime '20160821') OR modifiedtime '20160821'
select * from ods_orders_inc where day'20160821'
OK
1 20160820 20160821 支付 20160821
2 20160820 20160821 完成 20160821
4 20160821 20160821 创建 20160821
先放增量表中然进行关联张时表中插入新表中
DROP TABLE IF EXISTS dw_orders_his_tmp
CREATE TABLE dw_orders_his_tmp AS
SELECT orderid
createtime
modifiedtime
status
dw_start_date
dw_end_date
FROM (
SELECT aorderid
acreatetime
amodifiedtime
astatus
adw_start_date
CASE WHEN borderid IS NOT NULL AND adw_end_date > '20160821' THEN '20160821' ELSE adw_end_date END AS dw_end_date
FROM dw_orders_his a
left outer join (SELECT * FROM ods_orders_inc WHERE day '20160821') b
ON (aorderid borderid)
UNION ALL
SELECT orderid
createtime
modifiedtime
status
modifiedtime AS dw_start_date
'99991231' AS dw_end_date
FROM ods_orders_inc
WHERE day '20160821'
) x
ORDER BY orderiddw_start_date
INSERT overwrite TABLE dw_orders_his
SELECT * FROM dw_orders_his_tmp
根面步骤20160822号数更新进结果
select * from dw_orders_his
OK
1 20160820 20160820 创建 20160820 20160820
1 20160820 20160821 支付 20160821 20160821
1 20160820 20160822 完成 20160822 99991231
2 20160820 20160820 创建 20160820 20160820
2 20160820 20160821 完成 20160821 99991231
3 20160820 20160820 创建 20160820 20160821
3 20160820 20160822 支付 20160822 99991231
4 20160821 20160821 创建 20160821 20160821
4 20160821 20160822 支付 20160822 99991231
5 20160822 20160822 创建 20160822 99991231
想数
值注意订单表中数天次状态更新应天状态天终状态天订单状态创建支付完成应拉取终状态进行拉练表更新否面数会出现异常
1 6 20160822 20160822 创建 20160822 99991231
2 6 20160822 20160822 支付 20160822 99991231
3 6 20160822 20160822 完成 20160822 99991231
Hadoop 320 完全分布式集群搭建
集群环境搭建
首先准备4台服务器(虚拟机)
设置静态ip址映射 centos7 修改静态ip设置址映射
址映射
然设置集群SSH免密登录分发脚 centos7配置集群SSH免密登录(包含群发文件脚)
果防火墙记关闭防火墙
1 systemctl stop firewalldservice
2 systemctl disable firewalldservice
载 hadoop312 分传4台服务器 roothadoop 目录
址 httparchiveapacheorgdisthadoopcommonhadoop320hadoop320targz
传 4台设备 分执行解压 重命名
1 cd roothadoop
2 tar zxvf roothadoophadoop320targz
安装JDK18 jdk载解压 rootjdk 重命名 jdk8
载址
httpswwworaclecomtechnetworkjavajavasedownloadsjdk8downloads2133151html
编辑 etcprofile 设置环境变量
vim etcprofile
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 添加
1 export JAVA_HOMErootjdkjdk8
2 export JRE_HOMErootjdkjdk8jre
3 export HADOOP_HOMEroothadoophadoop320
4 PATHPATHHOMEbinJAVA_HOMEbinHADOOP_HOMEbinHADOOP_HOMEsbinrootbin
5 export LD_LIBRARY_PATHHADOOP_HOMElibnative
6 export HADOOP_CONF_DIRHADOOP_HOMEetchadoop
更新 profile 文件
source etcprofile
测试环境变量否生效
java version
hadoop version
二Hadoop配置修改
进入 hadoop 配置文件目录
cd roothadoophadoop320etchadoop
修改 hadoopenvsh 配置 jdk 路径定义集群操作户
面增加
1 export JAVA_HOMErootjdkjdk8
2
3 export HDFS_NAMENODE_USERroot
4 export HDFS_DATANODE_USERroot
5 export HDFS_SECONDARYNAMENODE_USERroot
6 export YARN_RESOURCEMANAGER_USERroot
7 export YARN_NODEMANAGER_USERroot
8
9 export HADOOP_PID_DIRroothadoopdatapids
10 export HADOOP_LOG_DIRroothadoopdatalogs
修改 coresitexml hadoop核心配置
1
2
3
4
5
6
7
8
9
10
· fsdefaultFSNameNode址hadooptmpdirhadoop时目录址
修改 hdfssitexml hadoop 节点配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
· dfsreplication 副数
· dfsnamenodesecondaryhttpaddress指定secondaryNameNodehttp访问址端口号
· 里 hadoop2 设置 SecondaryNameNode服务器
修改 workers 告知 hadoop hdfsDataNode节点
1 hadoop2
2 hadoop3
3 hadoop4
修改 yarnsitexml 配置yarn服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
· yarnresourcemanagerwebappaddress 配置 resourcemanager 服务器址端口
· yarnresourcemanagerhostname 指定 resourcemanager 服务器
· yarnlogaggregationenable 配置否启日志聚集功
· yarnlogaggregationretainseconds 配置聚集日志HDFS保存长时间
· yarnlogserverurl 配置yarn日志服务器址
修改mapredsitexml 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
· yarnappmapreduceamenv mapreducemapenv mapreducereduceenv
· 三mapreduce指定hadoop目录 果配置会出现 运行mapreduce找main方法等错误
· mapreducejobhistoryaddress 配置务历史服务器址
· mapreducejobhistorywebappaddress 配置历史服务器web访问址
修改配置文件 分发 节点三台服务器
前目录 执行xsync分发脚
1 xsync hadoopenvsh
2 xsync coresitexml
3 xsync hdfssitexml
4 xsync workers
5 xsync yarnsitexml
6 xsync mapredsitexml
配置完成
三Hadoop服务启动
hadoop1节点执行namenode初始格式化命令 (仅第次启动需执行)
hdfs namenode format
执行成功生成目录
cd roothadoopdatadfsname
生成集群唯id说明执行成功
hadoop1执行命令
1 startdfssh
2 startyarnsh
者执行
startallsh
hadoop4执行命令 启动job历史服务
mapred daemon start historyserver
执行完成分4台设备jps查进程
启动成功
· hadoop1 NameNode ResourceManager 节点
· hadoop2 SecondaryNameNode DataNode NodeManager 节点
· hadoop3 DataNode NodeManager 节点
· hadoop4 DataNode NodeManager JobHistoryServer 节点
查HDFS Web界面 httphadoop19870
查 YARN web界面 httphadoop18088
hadoop搭建完成
四运行WordCount
首先 root 目录创建txt文件
vim roottesttxt
容
1 hadoop 1
2 hadoop 2
3 hadoop 3
4 hadoop 4
5 hadoop 5
6 hadoop 6
7 hadoop 7
8 hadoop 8
9 hadoop 9
10 hadoop 10
testtxt文件传 hdfs 执行命令
1 hdfs dfs mkdir userroot
2 hdfs dfs put roottesttxt userroot
找官方带案例jar
cd roothadoophadoop320sharehadoopmapreduce
运行jar执行MapReduce WordCount案例
hadoop jar hadoopmapreduceexamples320jar wordcount userroottesttxt rootoutput
· wordcount 第路径 文件路径
· 第二路径 结果输出路径 (必须存)
执行成功 查执行结果
hdfs dfs lsr rootoutput
success执行成功
partr00000 m mapper 输出 r reduce 输出 00000 job 务编号 整文件结果输出文件
hdfs dfs cat rootoutputpartr00000
文件中 hadoop 词出现 10次 结果正确
Linux台载MySQL
1 官网载安装包
载链接:点击开链接
httpsdevmysqlcomdownloadsmysql
果系统32位选择第64位选择第二
wget 载
wget httpsdevmysqlcomgetDownloadsMySQL80mysql8011linuxglibc212i686targz
解压文件
tar zxvf mysql8011linuxglibc212i686targz
2 移动压缩包usrlocal目录重命名文件
mv rootmysql8011linuxglibc212i686 usrlocalmysql
3MySQL根目录新建文件夹data存放数
mkdir data
4创建 mysql 户组 mysql 户
1 groupadd mysql
2
3 useradd g mysql mysql
5改变 mysql 目录权限
1 chown R mysqlmysql usrlocalmysql
2
3 者
4
5 chown R mysql
6
7 chgrp R mysql
注意点
6初始化数库
创建mysql_install_db安装文件
1 mkdir mysql_install_db
2 chmod 777 mysql_install_db
初始化
binmysqld initialize usermysql basedirusrlocalmysql datadirusrlocalmysqldata 初始化数库
者
usrlocalmysqlbinmysqld initialize usermysql
1 usrlocalmysqlbinmysqld initialize usermysql
2
3 usrlocalmysqlbinmysqld (mysqld 8011) initializing of server in progress as process 5826
4
5 [Server] A temporary password is generated for root@localhost twiTlsi<0O
6
7 usrlocalmysqlbinmysqld (mysqld 8011) initializing of server has completed
记录时密码:
twiTlsi<0O
里遇问题没libnumaso1
zsh command not found mysqld
binmysqld initialize
binmysqld error while loading shared libraries libnumaso1 cannot open shared object file No such file or directory
20180429 170630 [WARNING] mysql_install_db is deprecated Please consider switching to mysqld initialize
20180429 170630 [ERROR] Can't locate the language directory
需安装 libnuma
1 yum install libnuma
2
3 yum y install numactl
4
5 yum install libaio1 libaiodev
安装文件
7mysql配置
cp usrlocalmysqlsupportfilesmysqlserver etcinitdmysqld
修改mycnf文件
vim etcmycnf
1
2 [mysqld]
3 basedir usrlocalmysql
4 datadir usrlocalmysqldata
5 socket usrlocalmysqlmysqlsock
6 charactersetserverutf8
7 port 3306
8 sql_modeNO_ENGINE_SUBSTITUTIONSTRICT_TRANS_TABLES
9 [client]
10 socket usrlocalmysqlmysqlsock
11 defaultcharactersetutf8
esc保存
wq 退出
8建立MySQL服务
cp a supportfilesmysqlserver etcinitdmysqld
1 cp mysqlserver etcinitdmysql
2 chmod +x etcinitdmysql
添加系统服务
chkconfig add mysql
cp a supportfilesmysqlserver etcinitdmysqld
chmod +x etcrcdinitdmysqld
chkconfig add mysqld
检查服务否生效
chkconfig list mysqld
9 配置全局环境变量
编辑 etcprofile 文件
# vi etcprofile
profile 文件底部添加两行配置保存退出
export PATHPATHusrlocalmysqlbinusrlocalmysqllib
export PATH
设置环境变量立生效
source etcprofile
10启动MySQL服务
service mysql start
查初始密码
cat rootmysql_secret
11登录MySQL
mysql uroot p密码
修改密码:
SET PASSWORD FOR 'root'@localhostPASSWORD('123456') #应换成密码
12设置远程登录
mysql>use mysql
mysql>update user set host'' where user'root' limit 1
刷新权限
mysql>flush privileges
然检查3306端口否开放
netstat nupl|grep 3306
开放3306端口
firewall cmd permanent addprot3306tcp
重启防火墙
firewall cmd reload
yum安装MySQL
安装环境:AliyunLinux(阿里linux系统64位)
cat etcosrelease
getconf LONG_BIT
首先系统中没带mysql东西先删掉
查:
find name mysql
删:
rm rf 边查找路径路径空格隔开
#者边条命令
find namemysql|xargs rm rf
开始安装
rpm Uvh httpsrepomysqlcommysql57communityreleaseel711noarchrpm
yum enablerepomysql80community install mysqlcommunityserver
步开始询问选择概意思:
总371M否载?
输入y然回车
概意思文件中检索密钥MySQL导入GPG问否OK?(英文谅解)
输入y然回车
Complete 完成
查mysql状态:
service mysqld start
接需查mysql创建默认密码首次登陆配置mysql时需
grep A temporary password varlogmysqldlog
mysql默认密码开始配置mysql
mysql_secure_installation
登陆数库:mysql u root p
功告成咯
需提醒阿里云版系统防火墙默认关闭设置果需外连接数库话记检查阿里云服务器安全组里否开放数库默认端口3306
然进入mysql库中修改update user set host'' where user'root'
sqlyog等工具连接数库
坑:
sqlyog连接数库时出现错误提示:Authentication plugin caching_sha2_password’ cannot be loaded
客户端支持caching_sha2_password种密码加密方式
需修改密码老版密码验证方式
登陆数库进入mysql库
update user set host'' where user'root'
重启:service mysqld restart
ALTER USER 'root'@'' IDENTIFIED WITH mysql_native_password BY '新密码'
重启:service mysqld restart
里 Abc123456a 新密码
修改退出sqlyog连接试试?
连接成功
Hive环境搭建
前提:
1 安装Hive前求先预装:
2 安装JDK 8
3 安装Hadoop277
4 安装MySQL
安装
1 载hive解压缩户目录:
1 tar xzvf apachehive236bintargz
2 改名:
3 mv apachehive236bin hive
2 设置环境变量:
二配置理
首先进入conf目录带template缀文件移缀
中hivedefaultxml移缀需修改名hivesitexml
1 通方法Hive进行配置:
11 修改hiveenvsh
1 cp hiveenvshtemplate hiveenvsh
2 Hive Hadoop 需 hiveenvsh 文件中指定 Hadoop 安装路径:
3
4 vim hiveenvsh
5
6 开配置文件中添加行:
7
8 export JAVA_HOMEusrlocalhadoopjdk180_221
9 export HADOOP_HOMEusrlocalhadoophadoop277
10 export HADOOP_CONF_DIRHADOOP_HOMEetchadoop
11 export HIVE_HOMEusrlocalhive
12 export HIVE_CONF_DIRHIVE_HOMEconf
13 export HIVE_AUX_JARS_PATHHIVE_HOMElib
12 修改hivelog4j2properties配置hivelog
1 cp hivelog4j2propertiestemplate hivelog4j2properties
2
3 vim confhivelog4j2properties
4
5 配置面参数(果没logs目录hive根目录创建):
6
7 propertyhivelogdirusrlocalhivelogs
13 usrlocalhive215新建tmp目录tmp新建hive目录
1 cd usrlocalhive
2 mkdir tmp
3 mkdir tmphive
14 修改hivesitexml
1 cp hivedefaultxmltemplate hivesitexml
2
3 hivesitexml文件中:
4
5 {systemjavaiotmpdir}换成homehduserhivetmp
6
7 {systemusername}换1921688101 节点名
2) hivesitexml 中配置 MySQL 数库连接信息:
面配置信息需改写出需文件弄外部ctrl+f进行搜索应里数然进行修改
1
2
3
4 < 设置面属性 >
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <配置Hive Metastore>
40
41
42
43
44
45
46
47
48
49
50
51