初探大数据
- centos 6.4
- CDH5.7.0系列http://archive.cloudera.com/cdh5/cdh/5/
生产或测试环境选择对应CDH版本时,一定要采用尾号一样的版本
OOPTB
- apache-maven-3.3.9-bin.tar.gz
- Jdk-7u51-linux-x64.tar.gz
- Zeppelin-0.7.1-bin.tgz
- Hive-1.1.0-cdh5.7.0.tar.gz
- hadoop-2.6.0-cdh5.7.0.tar.gz
- Mysql-connector-java.5.1.27.bin.jar
- Scala-2.11.8.tar.gz
- spark-2.1.0-bin-2.6.0-cdh5.7.0
大数据概述
- 数据量
- 速度
- 多样性、复杂性
- 基于高度分析的新价值
Hadoop
一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储
Apache顶级项目 访问网站 projetName.apache.org
包括 HSFS/YARN/MapReduce
狭义Hadoop VS 广义Hadoop
- 狭义的Hadoop:是一个适合大数据分布式存储HDFS、分布式计算MapReduce和资源调度YARN的平台
- 广义的Hadoop:指的是Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,hadoop是其中最重要最基础的一个部分;生态系统中的每一个子系统只解决某一个特定的问题域(甚至可能很窄),不搞统一型的一个全能系统,而是小而精的多个小系统
为什么选择haddoop作为大数据平台的解决方案?
- 源码开源
- 社区活跃,参与者很多
- 涉及到分布式存储和计算的方方面面
HDFS
分布式文件系统(Hadoop Distributed File System)
HDFS概述
Hadoop分布式文件系统(HDFS)是一种分布式文件系统,设计用于在商用硬件上运行。 它与现有的分布式文件系统有许多相似之处。 但是,与其他分布式文件系统的差异很大。 HDFS具有高度容错能力,旨在部署在低成本硬件上。 HDFS提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。 HDFS放宽了一些POSIX要求,以实现对文件系统数据的流式访问。 HDFS最初是作为Apache Nutch网络搜索引擎项目的基础设施而构建的。 HDFS是Apache Hadoop Core项目的一部分
Assumptions and Goals
- 硬件故障是常态而非例外。 HDFS实例可能包含数百或数千台服务器计算机,每台计算机都存储文件系统数据的一部分。 事实上,存在大量组件并且每个组件具有非平凡的故障概率意味着HDFS的某些组件始终不起作用。 因此,检测故障并从中快速自动恢复是HDFS的核心架构目标。
- 运行在HDFS上的应用程序需要对其数据集进行流访问。它们不是通常在通用文件系统上运行的通用应用程序。HDFS更多的是为批处理而设计的,而不是用户的交互使用。重点是数据访问的高吞吐量,而不是数据访问的低延迟。
- 在HDFS上运行的应用程序具有大型数据集。 HDFS中的典型文件大小为千兆字节到太字节。 因此,HDFS被调整为支持大文件。 它应该为单个集群中的数百个节点提供高聚合数据带宽和扩展。 它应该在单个实例中支持数千万个文件。
- HDFS应用程序需要一次只读一次读取文件的访问模型。 除了追加和截断之外,无需更改创建,写入和关闭的文件。 支持将内容附加到文件末尾,但无法在任意点更新
- 如果应用程序在其操作的数据附近执行,则计算所请求的计算效率更高。 当数据集的大小很大时尤其如此
- HDFS的设计便于从一个平台移植到另一个平台。 这有助于广泛采用HDFS作为大量应用程序的首选平台。
NameNode and DataNodes
HDFS具有主/从架构。 HDFS集群由单个NameNode,一个管理文件系统命名空间的主服务器和管理客户端对文件的访问组成。 此外,还有许多DataNode,通常是群集中每个节点一个,用于管理连接到它们运行的节点的存储。 HDFS公开文件系统命名空间,并允许用户数据存储在文件中。 在内部,文件被分成一个或多个块,这些块存储在一组DataNode中。 NameNode执行文件系统命名空间操作,如打开,关闭和重命名文件和目录。 它还确定了块到DataNode的映射。 DataNode负责提供来自文件系统客户端的读写请求。 DataNode还根据NameNode的指令执行块创建,删除和复制。
NameNode和DataNode是设计用于在商用机器上运行的软件。 这些机器通常运行GNU / Linux操作系统(OS)。 HDFS是使用Java语言构建的; 任何支持Java的机器都可以运行NameNode或DataNode软件。 使用高度可移植的Java语言意味着可以在各种计算机上部署HDFS。 典型部署具有仅运行NameNode软件的专用计算机。 群集中的每台其他计算机都运行一个DataNode软件实例。 该体系结构可以在同一台机器上运行多个DataNode,但在实际部署中很少出现这种情况。
群集中存在单个NameNode极大地简化了系统的体系结构。 NameNode是所有HDFS元数据的仲裁者和存储库。 系统的设计使用户数据永远不会流经NameNode。
HDFS支持传统的分层文件组织。 用户或应用程序可以在这些目录中创建目录并存储文件。 文件系统命名空间层次结构与大多数其他现有文件系统类似; 可以创建和删除文件,将文件从一个目录移动到另一个目录,或重命名文件。 HDFS支持用户配额和访问权限。 HDFS不支持硬链接或软链接。 但是,HDFS架构并不排除实现这些功能。
NameNode维护文件系统名称空间。 NameNode记录对文件系统命名空间或其属性的任何更改。 应用程序可以指定应由HDFS维护的文件的副本数。 文件的副本数称为该文件的复制因子。 该信息由NameNode存储。
HDFS旨在可靠地在大型群集中的计算机上存储非常大的文件。它将每个文件存储为一系列块。复制文件的块以实现容错。块大小和复制因子可根据文件进行配置。
除最后一个块之外的文件中的所有块都具有相同的大小
应用程序可以指定文件的副本数。复制因子可以在文件创建时指定,并可以在以后更改。 HDFS中的文件是一次写入的(除了追加和截断),并且在任何时候都有一个写入器。
NameNode做出有关块复制的所有决定。它定期从群集中的每个DataNode接收Heartbeat和Blockreport。收到心跳意味着DataNode正常运行。 Blockreport包含DataNode上所有块的列表
HDFS架构
1 Master(NameNode/NN) 带N个Slaves(DataNode/DN)
1个文件会被拆分为多个Block,根据blockSize。如130M文件,blockSize=128M,则被拆分为2个块,分别是128M和2M
NN:
- 负责客户端请求和响应
- 负责元数据(文件的名称、副本系数、Block存放的DN)的管理
DN:
- 存储用户的文件对用的数据库(Block)
- 要定期向NN发送心跳信息,汇报本身及其所有的block信息、健康状况
A typical deployment has a dedicated machine that runs only the NameNode software. Each of the other machines in the cluster runs one instance of the DataNode software.The architecture does not preclude running multiple DataNodes on the same machine but in a real deployment that is rarely the case.
NameNode+N个DataNode
建议:NN和DN是部署在不同的节点上
HDFS环境搭建
使用虚拟机的话 网络使用桥接模式
虚拟机最好关闭防护墙
- 使用版本 hadoop02.6.0-cdh5.7.0
软件存放目录
/home/hadoop
- software:存放的是安装的软件包
- app:存放的是所有软件的安装目录
- data:存放的是所有使用的测试数据目录
- source:存放的是软件源码目录,比如spark
-
下载hadoop
-
下载jdk7u51 https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择7u51
- tar -zxvf xx -C ~/app/
- 配置环境变量
-
机器参数设置
修改机器名/etc/systemconfig/network
vi /etc/systemconfig/network NETWORKING=yes HOSTNAME=hadoop001
设置IP和hostname的映射关系 /etc/hosts
192.168.0.116 hadoop001
127.0.0.1 localhost
ssh免密码登录(此步骤不是必须的,但必须每次收动输入密码)
ssh-keygen -t rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
-
HDFS配置修改 http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz
hadoop-env.sh
core-site.xml
hdfs-site.xml
在hadoop-2.6.0-cdh5.7.0/etc/hadoop下修改
Hadoop-env.sh
expore JAVA_HOME=/home/hadoop/app/jdk1.7.0_51/
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop001:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/app/tmp</value> </property> </configuration>
<configuration> <property> <!--副本数--> <name>dfs.replication</name> <value>1</value> </property> </configuration>
-
这一步操作,只是在第一次时执行,每次如果都格式化的话,那么HDFS上的数据就会被清空
在bin目录下 执行 ./hdfs namenode -format。如下表示格式化成功
-
启动HDFS
sbin/start-dfs.sh
验证是否启动成功:
jps
- DataNode
- SecondaryNameNode
- NameNode
浏览器
- http://hadoop001:50070/
HDFS shell常用命令使用
-
ls
hadoop fs -ls /
hadoop fs -ls -R / 递归查看
-
mkdir
hadoop fs -mkdir test
hadoop fs -mkdir -p /a/b 递归创建文件夹
-
put
hadoop fs -put /home/hadoop/a.txt( 文件系统中的文件路径) /test 上传文件、文件夹至hdfs
-
get
hadoop fs -get /tets/a.txt ~/app/(文件系统的路径) 将文件从hdfs拿到本地
-
rm
hadoop fs -rm /test/a.txt 从hdfs上删除
hadoop fs -rmr -a 递归删除目录
-
cat
hadoop fs -cat /test/a.txt 查看文件内容
HDFS优缺点
优点:
- 高容错
- 适合批处理
- 适合大数据处理
- 可构建在廉价的机器上
缺点:
- 不适合低延迟的数据访问(大文件分块,要访问文件 需访问到各个块)
- 不适合小文件存储
MapReduce
不擅长实时计算,适合离线批处理