HDFS安装配置、Shell命令
一、概述
1). 优点
- 分布式
- 运行在通用廉价的硬件上(commodity hardware)
- 高容错(fault-tolerant)
- 提供高吞吐量 high throughput
- 大数据集 large data sets
2). 分布式文件系统
-
普通文件系统:Linux/Windows/Max...
- 单机
- 目录结构
- 存放文件夹/文件
- 对外提供服务:创建、修改、删除、查看、移动等等
-
分布式文件系统
- 横跨N个机器
3). HDFS主要设计目标
Hardware Failure: 硬件故障
每个机器只存储文件的部分数据
HDFS默认采用3副本机制
核心目标: 检测故障并快速,自动地从故障中恢复Streaming Data Access: 流式数据访问
设计用于批处理 batch processing
the emphasis is on high throughput of data access rather than low latency of data access.
重点在于高吞吐量而不是数据的低延迟Large Data Sets : 大规模数据集
Moving Computation is Cheaper than Moving Data: 移动计算 比 移动数据 更划算
4). HDFS的架构【*****】
可以参考官网 https://hadoop.apache.org/docs/stable/ -> 左边目录HDFS -> Architecture
NameNode(NN, master) and DataNodes(DN, slave)
master/slave的架构 主从架构
NameNode(NN):
the file system namespace
regulates access to files by clientsDataNode(DN):storage
HDFS exposes a file system namespace and allows user data to be stored in files.
a file is split into one or more blocks
blocks are stored in a set of DataNodes
NameNode executes file system namespace operations: CRUD
NameNode:determines the mapping of blocks to DataNodes: 文件映射(用户不用感知)
通常情况下是,一个Node部署在一台机器上
二、Linux环境配置
虚拟机使用的为VMwarePro15
- Linux版本:CentOS7.3
- ip配置:
192.168.10.188
; 需要配置V8网卡以及虚拟机静态IP - 主机名:
hadoop000
- 用户名:
hadoop
- hostname改为:
hadoop000
- 客户端工具 MobaXterm,ssh登录:
ssh hadoop@192.168.10.188
- 所需要的目录(合适的文件存放在合适的目录)
[hadoop@hadoop000 ~]$ mkdir software 存放课程所使用的软件安装包
[hadoop@hadoop000 ~]$ mkdir app 存放课程所有软件的安装目录
[hadoop@hadoop000 ~]$ mkdir data 存放课程中使用的数据
[hadoop@hadoop000 ~]$ mkdir lib 存放课程中开发过的作业jar存放的目录
[hadoop@hadoop000 ~]$ mkdir shell 存放课程中相关的脚本
[hadoop@hadoop000 ~]$ mkdir maven_resp 存放课程中使用到的maven依赖包存放的目录
- 补充
- 切换hadoop到root用户:
[hadoop@hadoop000 ~]$ sudo -i
- 切换root到hadoop用户:
[root@hadoop000 ~]# su hadoop
【注意要配置sudo权限】 - 建议配置阿里云的yum镜像
- 切换hadoop到root用户:
三、Hadoop环境搭建
1). Hadoop使用版本
后缀要保证一致,比如使用hadoop-2.6.0-cdh5.15.1,那么其他的框架等也需要使用-cdh5.15.1*
- 使用的Hadoop相关版本:CDH
- CDH相关软件包下载地址
- Hadoop使用版本:
hadoop-2.6.0-cdh5.15.1
Linux下载:(建议下载到本地然后上传到服务器,尽量多加载下页面然后Ctrl+F进行搜索hadoop-2.6.0-cdh5.15.1.tar.gz)
sudo wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.1.tar.gz
- Hive使用版本:
hive-1.1.0-cdh5.15.1
(参照上述下载方式)
2).学习注意事项
Hadoop/Hive/Spark相关框架的学习:
-
使用单机版足够
- 如果使用集群学习会导致:从入门到放弃
- 使用Linux/Mac学习进行环境搭建
- 一定不要使用Windows搭建Hadoop环境
- 所以Linux基础是要会的
3). Hadoop安装前置要求
- Java版本要求1.8+
- 必须安装ssh(集群节点通信,而且还需要配置公钥与私钥)
四、安装Java
- 拷贝本地软件包到服务器:(也可以使用FileZilla/MobaXterm等工具上传)
scp jdk-8u91-linux-x64.tar.gz hadoop@192.168.199.233:~/software/
- 解压jdk到~/app/:
tar -zvxf jdk-8u91-linux-x64.tar.gz -C ~/app/
-
把jdk配置系统环境变量中:
- vim文件:
~/.bash_profile
- vim文件:
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
- 使得配置修改生效:
source .bash_profile
# 验证:
java -version
echo $JAVA_HOME
如果有其他终端在配置文件更改之前启动,也需要执行source命令才能生效
五、安装ssh无密码登陆
官网介绍要配置ssh; 方便主从节点通信;进程之间不用输密码
# 1. 切换到 `/home/hadoop/`目录下
cd /home/hadoop/
# 2. 生成公钥密钥; 一路回车操作
ssh-keygen -t rsa
# 3. 查看
cd ~/.ssh
[hadoop@hadoop000 .ssh]$ ll
总用量 12
-rw------- 1 hadoop hadoop 1679 10月 15 02:54 id_rsa 私钥
-rw-r--r-- 1 hadoop hadoop 398 10月 15 02:54 id_rsa.pub 公钥
-rw-r--r-- 1 hadoop hadoop 358 10月 15 02:54 known_hosts
# 4. 配置公钥
cat id_rsa.pub >> authorized_keys
# 5. 修改权限
chmod 600 authorized_keys
六、Hadoop(HDFS)安装
1). 解压安装配置
- 下载解压:
~/app
(参考配置Java)
# hadoop软件包常见目录说明
bin:hadoop客户端名单
etc/hadoop:hadoop相关的配置文件存放目录
sbin:启动hadoop相关进程的脚本
share:常用例子
- 添加
HADOOP_HOME/bin
到系统环境变量~/.bash_profile
(参考配置Java)
export HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.15.1
export PATH=$HADOOP_HOME/bin:$PATH
- 生效验证
# 使得配置修改生效:
source .bash_profile
# 验证:
hadoop version
echo $HADOOP_HOME
2). 修改配置文件
- 切换目录
cd /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/etc/hadoop
- hadoop-env.sh添加内容
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_191
- core-site.xml (添加到根标签中)
<property>
<name>fs.defaultFS</name> <!-- 默认文件系统 -->
<value>hdfs://hadoop000:8020</value> <!-- 暴露的服务端口 -->
</property>
- hdfs-site.xml (添加到根标签中)
<property>
<name>dfs.replication</name>
<value>1</value> <!-- 副本系数 -->
</property>
<property>
<name>hadoop.tmp.dir</name> <!-- 文件系统的目录: -->
<value>/home/hadoop/app/tmp</value>
<!-- 数据(默认是在/tmp下,但是系统每次重启都会清空该文件夹);
所以要配置在自定义的环境;数据将存放到此文件夹下 -->
</property>
- slaves 修改内容为
hadoop000
3). 启动HDFS:
- 第一次执行的时候一定要格式化HDFS文件系统,不要重复执行(否则会格式化数据)
hdfs namenode -format
- 启动集群:
./$HADOOP_HOME/sbin/start-dfs.sh
# $HADOOP_HOME的配置见上文描述,也可以直接到目录下启动
- 验证: 必须启动如下3个进程
[hadoop@hadoop000 sbin]$ jps
60002 DataNode
60171 SecondaryNameNode
59870 NameNode
util.NativeCodeLoader(压缩相关)默认是没有配置的,所以不会启动如果有进程没有启动;在
如果发现有进程没有启动,查看$HADOOP_HOME/logs/hadoop-hadoop-进程名.log
信息
- 验证2: 查看服务浏览器访问端口50070,注意关注
Live Nodes
信息,表示目前活跃的节点数
http://192.168.10.188:50070
- 如果发现jps ok,但是浏览器不OK? 十有八九是防火墙问题
# 查看防火墙状态:
sudo firewall-cmd --state
# 关闭防火墙:
sudo systemctl stop firewalld.service
# 禁止防火墙开机启动:
sudo firewall-cmd --state
chkconfig --list | grep firewalld
systemctl list-unit-files | grep firewalld
systemctl disable firewalld
systemctl list-unit-files | grep firewalld
4). 停止HDFS服务
- 切换到
/$HADOOP_HOME/sbin/
目录下
./stop-dfs.sh
- 注意:
start/stop-dfs.sh
与hadoop-daemons.sh
的关系
start-dfs.sh =
hadoop-daemons.sh start namenode
hadoop-daemons.sh start datanode
hadoop-daemons.sh start secondarynamenode
stop-dfs.sh =
同理....
七、【★★★★★】HDFS命令行操作
和Linux Shell命令相似,shell-like!
命令为/$HADOOP_HOME/bin/hadoop
;当然配置了环境变量可以直接使用;
1). 常见命令格式
文件系统的操作,见名知意
hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] [-x] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] [-x] <path> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getmerge [-nl] <src> <localdst>]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-text [-ignoreCrc] <src> ...]
2). hadoop常用命令:
hadoop fs -ls /
hadoop fs -ls -R / 递归展示
hadoop fs -put
hadoop fs -copyFromLocal
hadoop fs -moveFromLocal
hadoop fs -cat
hadoop fs -text
hadoop fs -get
hadoop fs -mkdir
hadoop fs -mv 移动/改名
hadoop fs -getmerge
hadoop fs -rm
hadoop fs -rmdir
hadoop fs -rm -r 递归删除
3). HDFS存储扩展:
- put原理:将文件上传切块(1...n block)存放在不同的节点上
- get原理: 去nn(NameNode)上查找这个file对应的元数据信息,合并文件并下载