(大数据分析-1)HDFS Review

本文介绍了HDFS的基本原理,包括其设计目标、高可用性、文件读写流程以及相关指令操作。并展示了如何通过具体指令查看HDFS的目录结构、拓扑信息和管理报告。


1 HDFS基本原理及介绍

1.1 基本原理

HDFS仅负责存储数据,mapReduce负责读写数据

  • 设计目标:大文件存储(TB、PB)、高容错(软件容错,数据多份拷贝)、高吞吐
  • 不适合场景:存储大量小文件、随机读取、低延迟读取
1.1.1 HDFS基本概念
  1. 数据块(block)

    大文件会被分割为多个block(默认128M存储,小于一个块的文件不会占据整个空间),一 个数据块在多个datanode上存储多份副本(默认3份),副本可以通过校验解决大量存储问 题

    block是HDFS中数据读写的最小单位,大小可配置。如果BLOCK配置太小,寻址时间占比高; block配置太大,map数太小,作业变慢

    块存储优势:

    • 文件数据块可分布不同磁盘
    • 元数据(meta data)与用户数据分开存储
    • 提高数据容错能力和可用性
    • 提高读取性能

    数据块和副本在不同机柜传输,避免单点故障,需要考虑内部网络通信带宽。

  2. namenode(类似书籍目录)

    记录文件系统的元数据,维护文件系统树及整个树内所有的文件和目录

    • 管理文件系统的命名空间(元数据信息:所有目录和文件)
    • 记录命名空间的改动和本身属性改动
    • 保存数据块的节点信息。不持久保存。
    • 协同clicent对文件的访问
  3. dataNode
    • 存储管理数据块,供客户端或nameNode调度
    • 定期向namenode发送存储块的列表

    nameNode中保存文件和块之间的所属关系。dataNode中保存数据块和本地文件的对应关系。如果nameNode毁坏,dataNode无法恢复文件。

  4. 心跳机制
    • dataNode周期性向nameNode发送心跳信号和状态报告
    • namenode根据报告验证元数据
    • 超时的dataNode标记为宕机,不再发送IO任务
1.1.2 HDFS High Availability(高可用性)
  • 1.0:存在namenode单点问题,集群只有1个namenode,宕机后需要停止整个集群
  • 2.0:主备namenode,分别active和standby,datanode同时发送给两个namenode数据(心跳、文件和数据块对应关系等),做到热切换,通过第3方(zookeeper)检查、监测、切换namenode
1.1.3 HDFS文件读写
  1. HDFS读文件
    1. client用filesystem的open()函数打开文件
    2. distributedFileSystem通过RPC调用元数据节点,得到文件数据块信息
    3. 对于每一个数据块,元数据节点返回保存数据块的数据节点地址
    4. distributedFileSystem返回FSDataInputStream给客户端,用来读取数据
    5. client调用stream的read()函数开始读取数据
    6. DFSInputStream连接保存此文件第一个数据块的最近数据节点
    7. 当此数据块读取完毕,DSFInputStream关闭数据连接
  2. HDFS写文件
    1. client调用creat()创建文件
    2. DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间创建一个新文件
    3. 元数据节点首先确定文件原来不存在,并且客户单有创建文件的权限,然后创建新文件
    4. distributedFileSystem返回DFSOutputStream,客户端用户写数据
    5. 客户端开始写文件,DFSOutputStream将数据分成块,写入data queue
    6. data streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点,第二个数据节点将数据发送给第三个数据节点。
    7. DFSOutputStream为发出的数据块保存了ack queue,等待pipeline的数据节点告知数据已成功写入。
    8. 当客户端结束写入数据,则调用stream的close函数。此函数将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。
1.1.4 NameNode目录
  1. 配置文件、配置参数
  2. edits log:文件更新以顺序方式写入磁盘镜像,记录着文件系统曾经的更改,定期校验

current目录参数

  • seen txid,与inprogress一致
  • namespaceID
  • clusterID
  • cTIme
  • storageType
  • blockpoolID
  • layoutVersion
1.1.5 dataNode目录

数据块、数据块.meta(记录该数据块的元数据信息,空间占比大约30%)

1.2 相关指令

从namenode获取的目录内容,显示在datanode上的文件、文件夹信息。下面显示根目录内容

[root@hadoop1 ~]# hdfs dfs -ls /
Found 7 items
drwxr-xr-x   - hbase hbase           0 2015-09-15 14:39 /hyperbase1
drwxr-xr-x   - hbase hbase           0 2015-09-15 14:25 /hyperbase1_hregionindex
drwxr-xr-x   - hdfs  hbase           0 2015-09-14 16:24 /inceptorsql1
drwxrwxrwx   - hdfs  hadoop          0 2015-09-14 16:20 /tmp
drwxr-xr-x   - hdfs  hbase           0 2015-09-15 15:33 /transwarp-health-check-dir
drwxrwxrwx   - hdfs  hadoop          0 2015-09-14 16:29 /user
drwxr-xr-x   - hdfs  hbase           0 2015-09-14 16:20 /yarn1

显示/user文件夹内容。hdfs的某个文件,对应hbase的region、mapReduce的输出结果等

[root@hadoop1 ~]# hdfs dfs -ls /user
Found 4 items
drwx------   - hive  hive            0 2015-09-14 16:25 /user/hive
drwxr-xr-x   - oozie hadoop          0 2015-09-14 16:29 /user/oozie
drwx------   - root  root            0 2015-09-15 10:59 /user/root
drwx------   - yarn  yarn            0 2015-09-14 16:24 /user/yarn

显示hdfs各节点拓扑(机柜、机架位置信息,为管理员手工配置,可以与真实物理拓扑无 关,用于hdfs的跨机柜、机架复制block使用)

[root@hadoop1 ~]# su hdfs
bash-4.1$ hdfs dfsadmin -printTopology
Rack: /default-rack
   192.168.180.134:50010 (hadoop1)//第1个节点
   192.168.180.135:50010 (hadoop2)//第2个节点
   192.168.180.136:50010 (hadoop3)//第3个节点
   192.168.180.137:50010 (hadoop4)//第4个节点

显示hdfs管理报告

bash-4.1$ hdfs dfsadmin -report
Configured Capacity: 1155606609920 (1.05 TB)//配置容量
Present Capacity: 1098917232640 (1023.45 GB)//实际容量
DFS Remaining: 1098537857024 (1023.09 GB)//剩余容量
DFS Used: 379375616 (361.80 MB)//已使用容量
DFS Used%: 0.03%//hdfs空间利用率
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0//丢失的block

-------------------------------------------------
Live datanodes (4)://存活4个datanode

Name: 192.168.180.137:50010 (hadoop4)
Hostname: hadoop4
Decommission Status : Normal
Configured Capacity: 288901652480 (269.06 GB)//配置容量
DFS Used: 55148544 (52.59 MB)//已使用容量
Non DFS Used: 10624794624 (9.90 GB)//非DFS容量
DFS Remaining: 278221709312 (259.11 GB)//剩余容量
DFS Used%: 0.02%//DFS使用率
DFS Remaining%: 96.30%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 10
Last contact: Tue Sep 15 15:43:07 CST 2015


Name: 192.168.180.135:50010 (hadoop2)
Hostname: hadoop2
Decommission Status : Normal
Configured Capacity: 288901652480 (269.06 GB)//配置容量
DFS Used: 102649856 (97.89 MB)//已使用容量
Non DFS Used: 10741223424 (10.00 GB)//非DFS容量
DFS Remaining: 278057779200 (258.96 GB)
DFS Used%: 0.04%
DFS Remaining%: 96.25%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 6
Last contact: Tue Sep 15 15:43:09 CST 2015


Name: 192.168.180.134:50010 (hadoop1)
Hostname: hadoop1
Decommission Status : Normal
Configured Capacity: 288901652480 (269.06 GB)
DFS Used: 125693952 (119.87 MB)
Non DFS Used: 24659619840 (22.97 GB)
DFS Remaining: 264116338688 (245.98 GB)
DFS Used%: 0.04%
DFS Remaining%: 91.42%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 10
Last contact: Tue Sep 15 15:43:09 CST 2015


Name: 192.168.180.136:50010 (hadoop3)
Hostname: hadoop3
Decommission Status : Normal
Configured Capacity: 288901652480 (269.06 GB)
DFS Used: 95883264 (91.44 MB)
Non DFS Used: 10663739392 (9.93 GB)
DFS Remaining: 278142029824 (259.04 GB)
DFS Used%: 0.03%
DFS Remaining%: 96.28%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 12
Last contact: Tue Sep 15 15:43:07 CST 2015


<think>我们正在讨论如何使用大数据技术分析电影评分数据。根据引用内容,我们可以构建一个分析流程。主要步骤包括数据收集、数据预处理、数据分析和可视化。首先,数据收集通常通过爬虫从网站(如豆瓣)获取,包括电影名称、类型、导演、演员、评分等信息(引用[1][2])。然后,进行数据清洗和预处理,如去重、填充缺失值、文本编码等(引用[1])。接下来,使用大数据处理框架(如Spark)进行数据分析(引用[3])。分析可以包括:1.计算电影平均评分并排序(如Top10电影)。2.按类型、导演、演员等维度分析评分分布。3.分析评分随时间的变化趋势。4.用户评论的情感分析(引用[2])。最后,将结果保存到数据库(如MySQL)或文件(如CSV),并通过可视化工具展示(引用[2][3])。现在,我们可以使用Spark(PythonAPI)来实现一个简单的评分分析示例:计算Top10电影(按平均评分)。步骤:1.读取数据(假设数据格式:movieId,title,userId,rating,timestamp)。2.按电影ID分组计算平均评分。3.按平均评分降序排序,取前10名。以下是示例代码:</think>### 如何使用大数据技术分析电影评分数据 #### 1. **数据采集与清洗** - **数据来源**:通过爬虫技术从豆瓣、IMDb等平台获取结构化数据(电影ID、名称、类型、导演、评分)和非结构化数据(用户评论)[^1][^2] - **清洗步骤**: - 处理缺失值:对缺失评分使用平均分填充 - 去重处理:删除重复的用户评分记录 - 异常值处理:过滤评分范围外的异常值(如$>5$或$<0$分) - 文本处理:对评论进行分词和情感分析[^2] #### 2. **数据存储与管理** - **存储方案**: ```mermaid graph LR A[原始数据] --> B{HDFS分布式存储} B --> C[Spark预处理] C --> D[(Hive数据仓库)] D --> E[MySQL结果表] ``` - **技术栈**: - 分布式存储:HDFS - 数据处理:Spark/PySpark - 结构化存储:MySQL/HBase[^3] #### 3. **核心分析方法** 1. **基础统计分析**: - 计算全局平均分:$\bar{R} = \frac{1}{n}\sum_{i=1}^{n} r_i$ - 按维度分组统计: ```python # Spark SQL示例 df.groupBy("genre").agg(avg("rating").alias("avg_rating")) ``` 2. **时间序列分析**: - 评分随时间变化趋势: $$ R_t = \alpha R_{t-1} + (1-\alpha)r_t $$ - 节假日效应分析(如春节档评分波动) 3. **关联规则挖掘**: - 导演-演员组合评分矩阵: | 导演\演员 | 演员A | 演员B | |-----------|-------|-------| | 导演X | 8.2 | 7.6 | | 导演Y | 7.9 | 8.4 | 4. **情感分析**(NLP): - 评论情感分:$S_{sent} = \frac{P_{pos} - P_{neg}}{P_{total}}$ - 生成评论文本词云[^2] #### 4. **可视化呈现** - **多维分析仪表盘**: - 地理热力图:区域评分分布 - 类型雷达图:$\{动作, 喜剧, 剧情...\}$ 维度评分 - 时间折线图:年度评分趋势 - **交互式查询**: ```sql SELECT title, AVG(rating) FROM movie_ratings WHERE year > 2020 GROUP BY title HAVING COUNT(*) > 1000 ``` #### 5. **技术实现示例** ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("MovieAnalysis").getOrCreate() # 读取数据 df = spark.read.csv("hdfs://movie_ratings.csv", header=True) # 计算Top10电影(引用[3]方法) top10 = df.groupBy("movie_id", "title") \ .agg(avg("rating").alias("avg_rating"), count("*").alias("review_count")) \ .filter("review_count > 1000") \ .orderBy(desc("avg_rating")) \ .limit(10) # 存储结果到MySQL top10.write.format("jdbc") \ .option("url", "jdbc:mysql://db_host/db_name") \ .option("dbtable", "top10_movies") \ .option("user", "user") \ .option("password", "pass") \ .save() ``` #### 6. **应用场景** 1. **个性化推荐**:基于用户评分矩阵$U_{m×n}$的协同过滤 2. **市场预测**:通过历史评分预测新片票房 3. **制片优化**:分析高评分电影的共性特征(如剧本结构$P_{plot}$、特效占比$R_{sfx}$)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值