大数据分为:分布式存储、分布式运算。存储的是数据(文件),运算消耗的是CPU、内存、磁盘等硬件资源。
Hadoop提供了分布式存储和分布式运算的功能。
但是Hadoop的核心组件,极为底层,如果直接基于这个底层框架来开发我们的数据分析逻辑,比较繁琐,开发效率很低。所以,在Hadoop这个底层框架之上,又衍生了大量的快捷开发工具:
1、HIVE:可以让用户只要写SQL来表达数据处理逻辑即可
2、
HDFS集群的安装
1、HDFS集群中机器的角色
2、
HDFS的基本特性
功能:为用户存储大量文件
特性:
HDFS是一个文件系统,并且提供了文件系统都提供的目录结构
用户存入HDFS的文件,会被切分成若干个文件块,分散到多台 DATA NODE 上
Namenode 节点只负责管理元数据;Datanode 节点只负责存储文件块
HDFS的基本操作
如何启动一个命令行的hdfs客户端
任何一台机器上,只要有hadoop的安装包,就可以启动:hadoop fs 参数
常用
1、上传文件到集群中
hadoop fs -put 本地路径 hdfs上的路径
hadoop fs -put /root/a.txt /
相同功能的另一种写法:hadoop fs -copy FromLocal 本地路径 hdfs上的路径
2、下载文件
hadoop fs -get hdfs上的路径
hadoop fs -get /a.txt
相同功能的另一种写法:hadoop fs -copyToLocal hdfs上的路径
3、查看hdfs中目录信息
hadoop fs -ls /
4、创建文件夹
hadoop fs -mkdir /aaa
hadoop fs -mkdir -p /bbb/ccc
5、删除文件或文件夹
hadoop fs -rm /a.txt
hadoop fs -rm -r /bbb
HDFS如何动态扩容
扩容就是增加datanode,datanode可以在线扩容。
步骤:
1)准备一台服务器,配置好环境: 网络、ip、防火墙、免密登陆、jdf
2)从原集群的任意一台机器上复制hadoop安装包到新机器上
3)在原集群的slaves文件中添加新机器的主机名
4)在新机器上启动datanode即可
a.直接用start-dfs.sh
b.或者在新机器上手动启动一个datanode进程:hadoop-daemon.sh start datanode
HDFS的一些配置属性
1.块大小
hdfs中存储的文件块的切块大小,默认128M
参数: dfs.blocksize 默认:134217728(128M)
此参数用于客户端程序,也就是说,hdfs里面存储的文件块的块大小完全由客户端决定
2.副本数量
hdfs中存储的文件块的副本数量,默认3个
参数: dfs.replication 默认:3
此参数用户客户端程序,也就是说里面存储的文件块的副本数量完全由客户端决定
为什么默认要3个?
第一个副本:存在离客户端最近的一台datanode上
第二个副本:存在跟上一台datanode相同的机架上的另一台datanode上
第三个副本:存在另一个机架上的某台datanode上
3.元数据存储目录
元数据存储目录就是namenode的工作目录,其位置由以下参数决定:
参数: dfs.namenode.name.dir 默认:file://${hadoop.tmp.dir}/dfs/name
此参数是给服务端程序:namenode使用
此参数默认值在生产中并不合适。应该给namenode专门配置一个安全的位置作为工作目录
正确做法:应该给namenode配置多个目录,而且这多个目录应该挂在不同的磁盘
<property>
<name>dfs.namenode.name.dir</name>
<value>/mnt/disk1,/mnt/disk2,/mnt/disk3,nfs://</value>
</property>
配置多个目录后,namenode会往各目录中写入相同的数据作为冗余备份
4.datanode文件块存储目录
datanode的工作目录也是参数可配的:
参数: dfs.datanode.data.dir 默认:file://${hadoop.tmp.dir}/dfs/data
默认配置在生产系统中并不合适,应该:
让datanode的工作目录指定到服务器上用于存储数据的多块数据磁盘上
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/disk1,/data/disk2,/data/disk3</value>
</property>
配置多个目录后,datanode会往各目录中轮询写入不同的数据,扩容datanode自身的容量