Hadoop及其命令

363 阅读4分钟

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文件夹下

image-20210124134953595

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

image-20210124141240048

http://192.168.0.104:9870

image-20210124141344647 image-20210124141620026 image-20210124141429846

当前有一个节点

看一下整体的目录空间

image-20210124141701024

根路径下有这些文件夹

image-20210124141753358

【验证Yarn】

端口号8088

http://192.168.0.104:8088

image-20210124142844966

服务停止

[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到底是上传到了集群的什么样的一个位置

image-20210124164953295

我们来到hadoop下的dfs这个文件夹下

image-20210124165050739

下面有两个文件夹,data下有个编号,每个数据块连接池有个编号

image-20210124165448269

image-20210124165403075

我们切到连接池下的指定目录,就能看到数据块列表

我们可以查看一下数据块里的内容,我们看看昨天上传的影评

cd subdir29/
ll
cat blk_1073749459
image-20210124165922830