如果有天堂,天堂应该是图书馆的模样。 –博尔赫斯
(不那么冷就更好了)
主要内容:Hadoop、hive、HBASE、zookeeper、MySQL、sqoop、kafka(有时间补)、日志
Apache Hadoop是处理大数据的一种新方法
Hadoop是Apache软件基金会所开发的并行计算框架与分布式文件系统
Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架。
Hadoop是根据Google公司发表的MapReduce和Google档案系统的论文自行实作而成。
这些是找到的资料描述,这里我们把它理解为软件框架,这个软件框架呢,表现在大量数据处理(通常一千兆兆字节即:十的十五次方字节计量)有突出能力,它的样子呈现生态系统,包含许多组件。
1、ETL是啥??
Extraction-Transformation-Loading的缩写,中文名为数据抽取、转换和加载
2、那Sqoop(数据库ETL工具)用来干嘛的?
先了解现代数据存储系统如何运作(本少侠还不清楚),一些数据可能不适于存储在关系数据库中,因为大部分数据需要按照原始形式存储。向数据库中添加数据的前提是先把数据转变成一个可以加载到数据库的预定的模式,这一步骤被称为提取、转换和加载(ETL),会消耗时间和成本(是真的…贼长…)。最重要的是,关于数据如何使用的决定必须在ETL步骤中间作出。此外,一些数据经常在ETL步骤中被丢弃,因为它不能放入数据模式或被认为不需要。
凑巧,(其实,大多数的巧合都是设计好的)hadoop的重点是按照其原始格式使用数据。Hadoop访问数据时,看起来就像在执行ETL步骤。但与传统的数据仓库方法不同的是hadoop称为读时模式,传统的数据仓库方法,称为写时模式
本侠理解,sqoop是数据不加工的搬运工。
简单说:Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中
Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。
例子:
a.使用Sqoop将数据从Hive导入MySQL
前提:启动Hadoop集群、MySQL服务
命令:
进入目录: cd /usr/local/sqoop
导入命令: ./bin/sqoop export –connect jdbc:mysql://localhost:3306/dblab –username root –password hadoop –table user_action –export-dir ‘/user/hive/warehouse/dblab.db/user_action’ –fields-terminated-by ‘\t’;
字段解释:
./bin/sqoop export ##表示数据从 hive 复制到 mysql 中
–connect jdbc:mysql://localhost:3306/dblab
–username root #mysql登陆用户名
–password hadoop #登录密码
–table user_action #mysql 中的表,即将被导入的表名称
–export-dir ‘/user/hive/warehouse/dblab.db/user_action ’ #hive中被导出的文件
–fields-terminated-by ‘\t’ #Hive 中被导出的文件字段的分隔符
b.使用Sqoop将数据从MySQL导入HBase
前提:启动Hadoop集群、MySQL服务、HBase服务
命令:
进入目录: cd /usr/local/sqoop
导入: ./bin/sqoop import –connect jdbc:mysql://localhost:3306/dblab –username root –password hadoop –table user_action –hbase-table user_action –column-family f1 –hbase-row-key id –hbase-create-table -m 1
3、更多:
1、Hive位置
2、数据仓库和数据库有啥区别(一直好奇)
数据库是面向事务的设计,数据仓库是面向主题设计的。
数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。
数据库是为捕获数据而设计,数据仓库是为分析数据而设计,它的两个基本的元素是维表和事实表。(维是看问题的角度,比如时间,部门,维表放的就是这些东西的定义,事实表里放着要查询的数据,同时有维的ID)
网上查的,巴拉巴拉很有道理的样子
3、数据仓库用来干嘛呢
个人理解最简单的回答,对历史数据的分析和整理就是数据仓库。
数据仓库根本上来说是因为各种各样应用系统无法高效处理大量的历史数据才出现的。
4、数据仓库hive
Hive数据存储格式的两个维度:
行格式(row format)
文件存储格式(file format)
Apache Hive是建立在hadoop之上的数据仓库,使用称为HiveQL,类似SQL语言,提供大数据集的数据汇总、即时查询和分析
官网介绍:
Why Hive?
Hive is a data warehouse system for Hadoop that facilitates easy data summarization, ad-hoc queries, and the analysis of large datasets stored in Hadoop compatible file systems. Hive provides a mechanism to project structure onto this data and query the data using a SQL-like language called HiveQL.
(详情看hive官网)
5、SQL和HiveQL这么像,比较一番
1、HBase是什么?
同样先看下所处位置:
HBase是一个高性能的分布式数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等;
是典型的NoSQL数据库,区别于传统的RDBMS(关系数据库管理系统);所以它是具有版本控制功能的分布式非关系型数据库。
它仿照自Google的Bigtable。
HBase和BigTable的底层技术对应关系
2、HBase模型概述
HBase类似数据库中的表,具有行和列。不同于关系数据库基于行模式存储。HBase是基于列存储的,列被分组为列族,每个列族都由几个文件保存,不同列族的文件是分离的,所有列族都一起存储在物理文件系统中。
列族中所有的列都具有相同的前缀。例如,一张每天股票价格的表,假如某一列族为“price”,它有四个成员——price:open、price:close、price:low和price:high。
关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引——行键,通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来。也就是说表的所有访问都是通过表的行键进行的,它被认为是主键。
详情看HBase官网介绍
3、HBase与hive关系
在大数据架构中,Hive和HBase是协作关系,数据流一般如下图:
(1)通过ETL工具将数据源抽取到HDFS存储;
(2)通过Hive清洗、处理和计算原始数据;
(3)HIve清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase
(4)数据应用从HBase查询数据;
安装过程中各种错,来一波日志:
1、系统日志是用来查找原因的。日志内容多且复杂,你需要做的就是耐心、然后找出你需要的,也许你不明白问题的原因,搜索吧
2、出了问题,首先查看系统日志,根据提示排查问题
3、如果系统日志看起来没问题,接着检查hadoop服务和应用程序日志。跟着错误的性质,查看对应的hadoop服务日志的方向,例如,如有一个hdfs有问题,那么就查看在NameNode和数据节点上的日志,而非yarn资源管理器或者节点管理器日志。
4、日志不一定在标准日志位置(/var/log)。日志文件的位置在服务的XML配置文件中设置
5、默认,hadoop系统日志文件是累积的,所以确保查看的是日志末尾。日志由log4j包管理
6、两种模式日志存储
日志聚合(好像还不清楚是啥)时可在yarn资源管理器用户界面(http://192.168.237.147:8088 或50070)中显示或yarn logs命令查看
未使用日志聚合,日志存放于本地,位置:yarn-site.xml文件中的yarn.nodemanager.log-dirs属性中。
若没有使用日志聚合,必须记录作业所用的集群节点(懵逼脸),然后必须直接从此节点获取日志文件。
《写给大忙人的Hadoop2》 作者:Douglas Eadline(美)著 卢涛 李颖 译
《深入理解Hadoop》 作者:Madhu Siddalingaiah(美)著 于博 冯傲风 译
CSDN博主 桂小林 相关知识(也是少侠的导师啦啦啦)