HDFS安装
– 伪分布式安装
– 完全分布式安装
• 下载及解压
• 检查java和ssh的免密码登陆
• 修改core-site.xml
• 修改hdfs-site.xml
• 修改masters文件和slaves文件
• 格式化namenode
• Start-hdfs.sh启动
[创建文件夹]
sudo mkdir /data
cd /
ls -all
[改变拥有者]
sudo chown neworigin:neworigin /data/
[拷贝]
cp /mnt/hgfs/BigData/第四天/jdk-8u121-linux-x64.tar.gz /data/
[解压]
tar -xzvf jdk-8u121-linux-x64.tar.gz
[查看路径]
pwd
[/etc/environment]
>sudo nano /etc/environment
JAVA_HOME=/data/jdk1.8.0_121
PATH="$PATH:/data/jdk1.8.0_121/bin"
>source /etc/environment
[查看环境]
>java -version
hadoop配置
[拷贝]
cp /mnt/hgfs/BigData/第四天/hadoop-2.7.0.tar.gz /data/
[解压]
tar -xzvf hadoop-2.7.0.tar.gz
[etc/environment]
HADOOP_HOME=/data/hadoop-2.7.0
PATH=$PATH:/data/hadoop-2.7.0/bin:/data/hadoop-2.7.0/sbin
[测试]
>hadoop version
[配置文件]
>cd /data/hadoop-2.7.0/etc/hadoop
[core-site.xml]
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
[hdfs-site.xml]
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
--------------------------------------
cp mapred-site.xml.template mapred-site.xml
[mapred-site.xml]
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
[yarn-site.xml]
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
[设置免密登录]
[安装]
sudo apt-get install ssh
[生成秘钥]
ssh-keygen -t rsa[根目录执行]或
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cd ~/.ssh/
[拷贝到公钥]
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 或
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
>ssh localhost
>exit
>ssh localhost
[启动hadoop]
>hdfs namenode -format [工作禁止使用]
>start-all.sh
[查看进程]
>jps
[暂停hadoop]
>stop-all.sh
[webui]
s100:50070
[进程]
DataNode //数据节点 DN
ResourceManager//资源管理器 RM
NameNode //名称节点 NN
NodeManager //节点管理器 NM
SecondaryNameNode//辅助名称节点 2NN
[hadoop shell]
>hadoop fs
[创建目录]
>hadoop fs -mkdir -p /user/neworigin/
[上传文件]
>echo helloworld > 1.txt
>hadoop fs -put ~/1.txt /user/neworigin/
[查看文件系统]
>hadoop fs -lsr 或
>hadoop fs -ls -R 或
>hadoop fs -ls -R /
[修改文件权限]
>hadoop fs -chmod 777 1.txt
[删除文件]
>hadoop fs -rm 1.txt
[读文件]
>hadoop fs -cat 1.txt 或
>hadoop fs -text 1.txt
>hdfs dfs -cat 1.txt
一个文件存储方式
• 按大小被切分成若干个block ,存储到不同节点上
• 默认情况下每个block都有三个副本
– Block大小和副本数通过Client端上传文件时设置,
文件上传成功后副本
数可以变更,Block Size不可变更
NameNode(NN)
– NameNode主要功能:接受客户端的读写服务
– NameNode保存metadate信息包括
• 文件owership和permissions
• 文件包含哪些块
• Block保存在哪个DataNode(由DataNode启动时上报)
NN有且只有一台处于active状态
NameNode的metadate信息在启动后会加载到内存
• metadata存储到磁盘文件名为”fsimage”
• Block的位置信息不会保存到fsimage
• edits记录对metadata的操作日志
所以元数据信息一定要做持久化
SNN执行合并时机
• 根据配置文件设置的时间间隔
fs.checkpoint.period 默认3600秒
• 根据配置文件设置edits log大小
fs.checkpoint.size 规定edits文件的最大值默
认是64MB
DataNode(DN)
– 存储数据(Block)
– 启动DN线程的时候会向NN汇报block信息
– 通过向NN发送心跳保持与其联系(3秒一次),如
果NN 10分钟没有收
到DN的心跳,则认为其已经lost,并copy其上的block
到其它DN
向NN汇报健康信息
Block的副本放置策略
– 第一个副本:放置在上传文件的DN;如果是集群外提
交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
– 第二个副本:放置在于第一个副本不同的机架的节点
上。
– 第三个副本:与第二个副本相同机架的节点。
– 更多副本:随机节点
HDFS文件权限
– 与Linux文件权限类似
• r: read; w:write; x:execute,权限x对于文件忽
略,对于文件夹表示是否允许访问其内容
– 如果Linux系统用户zhangsan使用hadoop命令创建
一个文件,那么这个文件在HDFS中owner就是zhangsan。
– HDFS的权限目的:阻止好人错错事,而不是阻止坏
人做坏事。 HDFS相信,你告诉我你是谁,我就认为你
是谁。权限认证默认是开启的
安全模式(不能上传下载文件)
– namenode启动的时候,首先将映像文件(fsimage)
载入内存,并执行编辑日志(edits)中的各
项操作。
– 一旦在内存中成功建立文件系统元数据的映射,则
创建一个新的fsimage文件(这个操作不
需要SecondaryNameNode)和一个空的编辑日志。
– 此刻namenode运行在安全模式。即namenode的文件
系统对于客服端来说是只读的。 (显示目录,显示文
件内容等。写、删除、重命名都会失败)。
在此阶段Namenode收集各个datanode的报告,当数
据块达到最小副本数以上时,会被认
为是“安全”的, 在一定比例(可设置)的数据块被
确定为“安全”后,再过若干时间,安
全模式结束
– 当检测到副本数不足的数据块时,该块会被复制直
到达到最小副本数,系统中数据块的位
置并不是由namenode维护的,而是以块列表形式存储
在datanode中。