前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop(2)——HDFS(分布式文件系统)

Hadoop(2)——HDFS(分布式文件系统)

作者头像
羊羽shine
发布2019-05-28 13:36:39
5430
发布2019-05-28 13:36:39
举报
文章被收录于专栏:Golang开发
概述

英文全称是The Hadoop Distributed File System官方地址http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html 非常巨大的分布式文件系统 运行在普通廉价的硬件上commodity hardware 高容错的 易扩展,为用户提供性能不错的文件存储服务

设计目标Assumptions and Goals

硬件错误,每个机器只存储文件的部分数据,block存放在不同的机器上的,blocksize=128M由于容错,HDFS默认采用3个副本机制 流数据访问Streaming Data Access 大规模数据集Large Data Sets 移动计算比移动数据便宜

架构

master(NameNode)/slave(DataNodes)主从架构 NN 管理文件,提供对外接口 DN 存储数据

image.png

一个master承担NameNode,其他slave承担DataNode,一个文件会被拆分成Block,默认blockSize大小是128M,DataNode存储文件块。一个文件所有的块除了最后一块其他块大小都是一样的

HDFS安装

(1)安装hadoopcdh下载地址:http://archive.cloudera.com/cdh5/cdh/5/

image.png

环境变量配置vim .bash_profile

代码语言:javascript
复制
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH

export HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.15.1
export PATH=$HADOOP_HOME/bin:$PATH

执行source .bash_profile让环境变量生效 文件结构

代码语言:javascript
复制
[root@maste hadoop]# tree -d -L 2
.
├── bin
├── bin-mapreduce1
├── cloudera
│   └── patches
├── etc
│   ├── hadoop
│   ├── hadoop-mapreduce1
│   ├── hadoop-mapreduce1-pseudo
│   └── hadoop-mapreduce1-secure
├── examples
│   ├── bin
│   ├── include
│   └── lib
├── examples-mapreduce1
│   └── Linux-amd64-64
├── include
├── lib
│   └── native
├── libexec
├── logs
├── sbin
│   └── Linux
├── share
│   ├── doc
│   └── hadoop
├── src
│   ├── build
│   ├── dev-support
│   ├── hadoop-assemblies
│   ├── hadoop-client
│   ├── hadoop-common-project
│   ├── hadoop-dist
│   ├── hadoop-hdfs-project
│   ├── hadoop-mapreduce1-project
│   ├── hadoop-mapreduce-project
│   ├── hadoop-maven-plugins
│   ├── hadoop-minicluster
│   ├── hadoop-project
│   ├── hadoop-project-dist
│   ├── hadoop-tools
│   └── hadoop-yarn-project
└── tmp
    └── dfs

43 directories

其中重要的文件夹目录是: bin Hadoop 客户端命令 etc/hadoop hadoop相关的配置文件存放目录 sbin 启动hadoop的相关命令的脚本 share使用的demo

hadoop相关配置

编辑 etc/hadoop/hadoop-env.sh 定义JAVA_HOME和HADOOP_PREFIX:

代码语言:javascript
复制
  # set to the root of your Java installation
  export JAVA_HOME=/usr/java/latest

  # Assuming your installation directory is /usr/local/hadoop
  export HADOOP_PREFIX=/usr/local/hadoop

一般我们只需要配置export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/就可以了。 执行启动hadoop命令

代码语言:javascript
复制
  $ bin/hadoop

hadoop 配置 etc/hadoop/core-site.xml,hadoop.tmp.dir存放hadoop文件系统依赖的基本配置,如果hdfs-site.xml中不配置namenode和datanode的存放位置,默认就放在这个路径中

代码语言:javascript
复制
<configuration>
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:8020/</value>
</property>
<property>
 <name>hadoop.tmp.dir</name>
 <value>/root/hadoop/tmp</value>
  <description>存放hadoop文件系统依赖的基本配置</description>
 </property>
</configuration>

修改etc/hadoop/hdfs-site.xml配置副本数量,对于单机节点副本只能是1个

代码语言:javascript
复制
<configuration>
<property>
        <name>dfs.replication</name>
        <value>1</value>
        <description>设置副本数</description>
</property>
</configuration>
Shell操作

第一次执行需要格式化hadoop,清空整个数据,其中设置的数据目录会被格式化,这个不建议重复执行,会造成数据丢失。

代码语言:javascript
复制
 hdfs namenode -format // 格式化hdfs
......
/root/hadoop/tmp/dfs/name has been successfully formatted.

在sbin启动hdfs命令

代码语言:javascript
复制
 sbin]$ ./start-dfs.sh
$ jps
16370 Jps
15869 NameNode
15998 DataNode
16206 SecondaryNameNode

浏览器中输入{host}:50070也可以查看hdfs 情况

image.png

将文件放入hadoop根目录

代码语言:javascript
复制
$ echo "hello word" >> hello.txt
$ hadoop fs -put hello.txt /
$ echo "hello hadoop" >> hadoop.txt
$ hadoop fs -copyFromLocal hadoop.txt  /

移动本地文件到hadoop

代码语言:javascript
复制
$ echo "move test" >> movetest.txt
$ hadoop fs -moveFromLocal movetest.txt /

下载hdfs文件到本地

代码语言:javascript
复制
$ rm hello.txt
$ hadoop fs -get /hello.txt

查看根目录底下的文件

代码语言:javascript
复制
$ hadoop fs -ls /
Found 1 items
-rw-r--r--   1 hadoop supergroup         11 2019-04-05 22:18 /hello.txt

查看文件内容

代码语言:javascript
复制
$ hadoop fs -cat /hello.txt
hello word
$ hadoop fs -text /hello.txt
hello word

创建文件夹

代码语言:javascript
复制
hadoop fs -mkdir /test

递归创建文件夹

代码语言:javascript
复制
hadoop fs -mkdir -p /a/b/

递归查看文件夹

代码语言:javascript
复制
hadoop fs -ls -R /

移动文件到文件夹

代码语言:javascript
复制
$ hadoop fs -mkdir /test
$ hadoop fs -mv /hello.txt /test
$ hadoop fs -ls /test
Found 1 items
-rw-r--r--   1 hadoop supergroup         11 2019-04-05 22:18 /test/hello.txt

删除文件

代码语言:javascript
复制
hadoop fs -rm /hello.txt

删除文件夹

代码语言:javascript
复制
$ hadoop fs -rm -r  /test
Deleted /test
问题总结
dadanode启动失败原因

问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的clusterID会重新生成,而datanode的clusterID 保持不变。 打开hdfs-site.xml里配置的datanode和namenode对应的目录,分别打开current文件夹里的VERSION,可以看到clusterID项正如日志里记录的一样,确实不一致,修改datanode里VERSION文件的clusterID 与namenode里的一致,再重新启动dfs(执行start-dfs.sh)再执行jps命令可以看到datanode已正常启动。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.03.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 设计目标Assumptions and Goals
  • 架构
  • HDFS安装
  • hadoop相关配置
  • Shell操作
  • 问题总结
    • dadanode启动失败原因
    相关产品与服务
    大数据
    全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档