hadoop入门(hadoop安装-hdfs简单介绍)

1. 总揽

安装
hdfs 的简单使用实例
hdfs 的简单介绍




2. 安装hadoop

好久没有上线了. 是时候来一波节奏了. 希望通过这次的学习能够开始了解hadoop底层的简单原理, 能够开始简单的使用hadoop 中的API .
还有同时开始习惯使用Linux 的使用, 然后做更多的配置, 这个是避免不了的. 
最后花了差不多大半天的时间才配置好....只能说自己的linux 的基础太差了. 

准备: jdk1.7+hadoop1.2.1(2.5版本除了问题了. 说跟我的cent版本中没有包.然后就换了个低一点的. )+centos 5.0
安装hadoop 需要的以下的步骤
  • 配置host文件
  • 建立hadoop运行账号
  • 配置ssh免密码连入
  • 下载hadoop 压缩包. 同时解压
  • 配置里面的各种文件
  • 向各个节点发送配置好的hadoop 
  • 格式化namenode
  • 启动hadoop 
  • 用jps 校验是否成功

(1) 配置hosts文件
#linux 命令
#先转换成root的权限 . 可以用su 命令
vi /etc/hosts
编辑如下:
            


(2)建立使用账号
#建立账号 (在root权限下面建立)
useradd [username]
passwd [username]
我记得好像同时要修改这个账号的权限.
使用chowm 命令可以实现

(3) ssh免密码配置
首先你要有ssh 这个工具如果没有先上网download
#生成公钥和密钥
ssh-keygen -t rsa
#会在/home/{user.name}/.ssh 下有一个目录      
你会看到这两个文件生成了. id_rsa_pub是一个公钥   

#复制一份公钥 同时修改里面的ip地址
cp ip_rsa.pub authorized_keys
#修改成功之后就开始向每台机子发送相应的公钥
scp authorized_keys huser@h2:/home/huser/.ssh
#验证是否成功发送过去, 如果发了一次就要将之前的删了..
ssh huser@h2
#如果不需要密码就可以登录的话就是成功了,失败了就重复上面的操作. 或者重新找资料吧..

(4)上网找hadoop 的压缩包, 直接下载太慢了...
找到之后用命令解压
tar -zxvf [包名]


(5)然后就配置解压好的hadoop里面的配置文件..
1.2.1 中的配置文件在conf 里面  2.x 在 etc/hadoop 中

#hadoop-env.sh /yarn-env.sh 中的JAVA_HOME 修改成正确的.
core-site.xml中的配置
<configuration>
 
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.74.128:9000</value>
</property>
 
<property>
<name>hadoop.tmp.dir</name>
<value>/home/huser/hadoop1/tmp</value>
</property>
</configuration>
slaves中的配置

masters 中的配置
h1 //这个是namenode节点的ip地址. 或者是他的hostname

hdfs-site.xml 中的配置
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

mapred-site.xml中的配置
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.74.128:9001</value>
</property>
</configuration>


(6) 向其他机子发送hadoop
scp -r ./haoop1 huser@h2:/home/huser
scp -r ./haoop1 huser@h3:/home/huser


(7)格式化namenode
#1.2.1中的格式化是
bin/hadoop namenode -format
 
#2.5中的是
bin/hdfs namenode -format

(8)启动hadoop
#启动
bin/start-all.sh
#关闭
bin/stop-all.sh
(9)最后可以用jps 命令查看是否启动成功
或者打开 localhost:50070 或者 localhost:50030
查看情况




3.hdfs 的简单使用实例

首先我们在/home/huser下面创建一个文件夹 里面装有两个文件里面有一些单词
mkdir input
cd input
echo "hello world" > test1.txt
echo "hello hadoop" > test2.txt
 
然后进入 hadoop 跟目录中执行命令 将两个文件放进hdfs 中
bin/hadoop dfs -put ../input in
#导入成功之后你可以看看里面的内容
bin/hadoop dfs -ls ./in/*
数据准备好了之后就可以跑一下 hadoop 中自带的wordcount程序
bin/hadoop jar hadoop-1.2.1-exmapls.jar wordcount in out
等了一下之后就可以看结果了(我的电脑太慢了.跑的时候有个节点还崩了)
最后我们来看看结果
bin/hadoop -cat ./out/*
最后就可以看到我们输出的结果了. 


4.hdfs 的简单介绍

hdfs的特点
  • 硬件错误是常态.所有需要冗余
  • 流式数据访问. 即数据批量读取而非随机读写, hadoop 擅长做的是数据分析而不是事务处理.
  • 大规模数据集
  • 简单一致性模型, 为了降低系统复杂度, 对文件采用一次性写多次读的逻辑设计, 即是文件一经写入, 关闭, 就再也不能修改
  • 程序采用"数据就近" 原则分配节点执行.

hdfs 中的架构模型
  • namenode
  • DataNode
  • 事务日志
  • 映像文件
  • SecondaryName


1)NameNode
  • 管理文件系统的命名空间
  • 记录每个文件的数据块在各个DataNode上的位置和副本
  • 协调客户端对文件的访问. 
  • 记录命名空间内的改动或空间本身属性的改动. 
  • NameNode使用事务日志记录HDFS元数据的变化. 使用映像文件存储文件系统的命名空间, 包括文件映射, 文件属性等
NameNode是单节点的在企业中压根没法用.如果崩了namenode基本上这个系统就没了.

2)DataNode
  • 负责所在物理节点的存储管理
  • 一次写入, 多次读取. (不修改)
  • 文件由数据块组成的(在Linux 看来就是一个Block ) 
  • 数据库尽量散布到各个节点. 实现冗余

4.1 读取数据的过程
  • 客户端要访问HDFS中的一个文件.
  • 首先从NameNode获得组成这个文件的数据块位置列表. 
  • 根据列表知道存储数据库的datanode
  • 访问datanode获取数据
  • NameNode并不参与数据实际传输(它只负责调度. 他知道数据的位置, 告诉你自己去找)



4.2 HDFS 可靠性
  • 冗余副本策略
    • 可以在hdfs-site.xml 中设置复制因子制定副本数量
    • 所有数据块都有副本
    • DataNode启动时, 遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表(blockreport) 汇报给namenode
  • 机架策略
    • 集群一般放在不同机架上, 机架间带宽要比机架内宽带要小
    • HDFS 的  "机架感知" 
    • 策略是: 一般在本机架存放一个副本, 在其它机架在存放别的副本, 这样可以防止机架失效时丢失数据, 也可以提高带宽利用率
  • 心跳机制
    • Namenode周期性从datanode接收心跳信号和块报告
    • Namenode根据块报告验证元数据
    • 没有按时发送心跳的datanode会被标记为宕机, 不会再给它任何I/O请求
    • 如果datanode失效造成副本数量下降,并且低于预先设置的阈值, namenode会检测出这些数据块, 同时在合适的时机进行重新复制. 
    • 引发重新复制的原因还包括数据副本本身损坏,磁盘错误, 复制因子被增大
  • 安全模式
    • Namenode启动是会先经过一个"安全模式" 阶段
    • 安全模式阶段不会产生数据写
    • 在此阶段Namenode收集各个datanode的报告, 当数据块达到最小副本数以上时, 会被认为是"安全" 的
    • 在一定比例(可设置)的数据块被确认为"安全"后, 在过若干时间, 安全模式结束
    • 当检测到副本数不足的数据块时, 该块会被复制直到达到最小副本数
  • 校验和
    • 在文件创立, 每个数据块都产生校验和
    • 校验和会作为单独一个隐藏文件保存在命名空间下.
    • 客户端获取数据可以检查校验和是否相同, 从而发现数据块是否损坏
    • 如果正在读取的数据块受损, 则可以继续读取其他副本

  • 回收站
    • 删除文件时, 其实是放入回收站/trash
    • 回收站里的文件可以快速恢复.
    • 可以设置一个时间阈值, 当回收站里文件存放的时间超过这个阈值, 就被彻底的删除, 并且释放占用的数据块
  • 元数据保护
    • 映像文件刚和事务日志是Namenode的核心数据, 可以配置为拥有多个副本
    • 副本会降低Namenode的处理速度, 但增加安全性. 
    • namenode依然是单节点, 如果发证故障要手工切换
  • 快照机制
    • 支持存储某个时间点的映像, 需要时可以是数据重返某个时间点的状态
    • hadoop目前还不支持快照.









发布了22 篇原创文章 · 获赞 1 · 访问量 24万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览