Hadoop及其命令
一个Hadoop集群包含多台节点。
数据量特别大:如何存储?如何运算?几P的数据量
HDFS侧重分布式存储。一台机子存不下,所以有了集群的概念。
集群一般都是奇数台,有选举机制。
假设有一个300M的文件,集群里有5台机子。这种情况下集群式如何存储的呢?
它并不是把这300M文件直接存到一个节点里面,而是采用切割的方式。
一个Block(数据块)是128M. 它会分割成3块:128M、128M、44M.(真的割)
Leader(NameNode掌管集群,负责分配存在哪三个节点上面。具体怎么分配取决于集群节点的剩余空间和物理距离)
HDFS:
NameNode不存数据,专门用来宏观掌控。
DataNode负责数据的读取和读出。
SecondNameNode负责辅助NameNode,是NameNode的小助理。
所以HDFS主要有这三个进程。
基于大数据有两个生态圈:
Hadoop生态圈:侧重1.分布式存储 2.分析运算。一般是用Hive进行分析运算
Spark生态圈:基于内存运算,既可以进行离线分析,也可以进行实时运算。
Hadoop概述
Hadoop是大数据库处理框架
Hadoop核心三要素:
分布式文件系统HDFS——解决大数据存储
分布式计算框架MapReduce——解决大数据计算
分布式资源管理系统Yarn
相关的组件都装在了model文件夹下
Hadoop配置修改
版本: Hadoop-3.2.1
修改主机名与IP地址的映射
[hadoop@hadoop01 model]$ sudo vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.100 hadoop01 #注意 将之前的10.2.0.181 改成自己的IP
主机映射改了之后必须通过重启系统让他生效 reboot
修改hadoop-env.sh
-
位置:/opt/model/hadoop-3.2.1/etc/hadoop
-
[hadoop@hadoop01 hadoop]$ vi /opt/model/hadoop-3.2.1/etc/hadoop/hadoop-env.sh 37 export JAVA_HOM=/opt/model/jdk1.8/
HDFS服务管理
服务启动
[hadoop@hadoop01 hadoop-3.2.1]$ start-dfs.sh #启动分布式文件存储系统HDFS
Starting namenodes on [hadoop01]
Starting datanodes
Starting secondary namenodes [hadoop01]
[hadoop@hadoop01 hadoop-3.2.1]$ start-yarn.sh #启动资源管理Yarn 分配磁盘空间啥的
Starting resourcemanager
Starting nodemanagers
【验证服务】
[hadoop@hadoop01 hadoop-3.2.1]$ jps
2640 NodeManager #属于yarn
2246 SecondaryNameNode#属于hdfs
3034 Jps
2059 DataNode#属于hdfs
2523 ResourceManager #属于yarn
1934 NameNode #属于hdfs
基于网页测试HDFS、Yarn启动成功
【验证HDFS】
端口号是9870
当前有一个节点
看一下整体的目录空间
根路径下有这些文件夹
【验证Yarn】
端口号8088
服务停止
[hadoop@hadoop01 hadoop]$ stop-dfs.sh
[hadoop@hadoop01 hadoop]$ stop-yarn.sh
HDFS命令
前提:start-dfs.sh
hdfs常用文件命令
[hadoop@hadoop01 hadoop]$ hdfs --help
Usage: hdfs [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
OPTIONS is none or any of:
--buildpaths attempt to add class files from build tree
--config dir Hadoop config directory
--daemon (start|status|stop) operate on a daemon
--debug turn on shell script debug mode
--help usage information
--hostnames list[,of,host,names] hosts to use in worker mode
--hosts filename list of hosts to use in worker mode
--loglevel level set the log4j level for this command
--workers turn on worker mode
SUBCOMMAND is one of:
Admin Commands:
cacheadmin configure the HDFS cache
crypto configure HDFS encryption zones
debug run a Debug Admin to execute HDFS debug commands
dfsadmin run a DFS admin client
dfsrouteradmin manage Router-based federation
ec run a HDFS ErasureCoding CLI
fsck run a DFS filesystem checking utility
haadmin run a DFS HA admin client
jmxget get JMX exported values from NameNode or DataNode.
oev apply the offline edits viewer to an edits file
oiv apply the offline fsimage viewer to an fsimage
oiv_legacy apply the offline fsimage viewer to a legacy fsimage
storagepolicies list/get/set/satisfyStoragePolicy block storage policies
Client Commands:
classpath prints the class path needed to get the hadoop jar and the required libraries
dfs run a filesystem command on the file system #常用
envvars display computed Hadoop environment variables
fetchdt fetch a delegation token from the NameNode
getconf get config values from configuration
groups get the groups which users belong to
lsSnapshottableDir list all snapshottable dirs owned by the current user
snapshotDiff diff two snapshots of a directory or diff the current directory contents with a snapshot
version print the version
Daemon Commands:
balancer run a cluster balancing utility
datanode run a DFS datanode
dfsrouter run the DFS router
diskbalancer Distributes data evenly among disks on a given node
journalnode run the DFS journalnode
mover run a utility to move block replicas across storage types
namenode run the DFS namenode
nfs3 run an NFS version 3 gateway
portmap run a portmap service
secondarynamenode run the DFS secondary namenode
sps run external storagepolicysatisfier
zkfc run the ZK Failover Controller daemon
SUBCOMMAND may print help when invoked w/o parameters or with -h.
[hadoop@hadoop01 hadoop]$
命令前加hsdf就是对集群进行操作
对集群文件系统进行操作 前缀:hdfs dfs
| 功能 | 命令 |
|---|---|
| 查看目录 | hdfs dfs -ls / |
| 创建目录 | hdfs dfs -mkdir -p /input/weather/data |
| 删除目录 | hdfs dfs -rm -r /input/weather |
| 上传 | hdfs dfs -put 本地文件位置 集群位置 |
| 把内容追加到某个文件 | hdfs dfs -appendToFile 本地文件位置 集群文件位置 |
| 下载(默认下载到当前文件夹) | hdfs dfs -get 文件位置 |
| 查看文件内容 | hdfs dfs -cat 文件位置 |
#1) 目录管理
[hadoop@hadoop01 hadoop]$ hdfs dfs -ls / #查看根下的目录列表
Found 4 items
drwxr-xr-x - hadoop supergroup 0 2021-01-23 14:51 /flume
drwxrwxrwx - hadoop supergroup 0 2020-07-20 10:51 /hive
drwxrwxrwx - hadoop supergroup 0 2020-07-20 17:02 /tmp
drwxrwxrwx - hadoop supergroup 0 2020-09-15 15:50 /warehouse
[hadoop@hadoop01 hadoop]$
[hadoop@hadoop01 hadoop]$ hdfs dfs -mkdir /input #创建一级目录
[hadoop@hadoop01 hadoop]$ hdfs dfs -mkdir -p /input/weather/data #创建多级目录
[hadoop@hadoop01 hadoop]$ hdfs dfs -rm -r /input/weather #删除目录
Deleted /input/weather
#2)文件管理
#2.1)将本/opt/data/world.sql 上传到HDFS的/input空间
[hadoop@hadoop01 data]$ hdfs dfs -put world.sql /input #上传文件到当前默认的hdfs(本节点所在集群)
#2.2) 将本地文件上传到指定集群
[hadoop@hadoop01 data]$ hdfs dfs -put market.sql hdfs://hadoop01:9000/input
#2.3)上传订单日志到/input
[hadoop@hadoop01 data]$ echo "s10001,张三,冰箱,5000,1,2021-01-19" >> order.log
[hadoop@hadoop01 data]$ cat order.log
s10001,张三,冰箱,5000,1,2021-01-19
[hadoop@hadoop01 data]$ hdfs dfs -put order.log /input
#2.4)order.log每天会产生一个日志文件,追加到order.log中
[hadoop@hadoop01 data]$ cat 2021_01_20_order.log
s10002,张三,冰箱,5000,2,2021-01-20
s10003,李四,洗衣机,4000,1,2021-01-20
[hadoop@hadoop01 data]$ hdfs dfs -appendToFile 2021_01_20_order.log /input/order.log#把本地的2021_01_20_order.log追加到集群里的/input/order.log里
#2.5)查看文件
[hadoop@hadoop01 data]$ hdfs dfs -cat /input/order.log
s10001,张三,冰箱,5000,1,2021-01-19
#2.6)将集群文件下载到linux本地
[hadoop@hadoop01 hdfs_data]$ hdfs dfs -get /input/order.log #执行下载
[hadoop@hadoop01 hdfs_data]$ ll
-rw-rw-rw- 1 hadoop hadoop 159 1月 20 16:49 order.log #验证下载情况
[hadoop@hadoop01 hdfs_data]$ cat order.log #查看下载的文件信息
s10001,张三,冰箱,5000,1,2021-01-19
s10002,张三,冰箱,5000,2,2021-01-20
s10003,李四,洗衣机,4000,1,2021-01-20
s10004,王五,彩电,6000,2,2021-01-20
hdfs dfsadmin命令
#查看集群状态
[hadoop@hadoop01 hdfs_data]$ hdfs dfsadmin -report
也可以直接在网站上查看
HDFS上传数据块的查看
比如上上面的order.log到底是上传到了集群的什么样的一个位置
我们来到hadoop下的dfs这个文件夹下
下面有两个文件夹,data下有个编号,每个数据块连接池有个编号
我们切到连接池下的指定目录,就能看到数据块列表
我们可以查看一下数据块里的内容,我们看看昨天上传的影评
cd subdir29/
ll
cat blk_1073749459