1、环境配置
- ip(/etc/sysconfig/network-scripts)
# 网卡1
DEVICE=eht0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.59.11
GATEWAY=192.168.59.1
NETMASK= 255.255.255.0
# 网卡2
DEVICE=eht0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
- hostname(vim /etc/sysconfig/network)
HOSTNAME = hadoop1.keane.com
- 映射( vim /etc/hosts)
192.168.59.11 hadoop.keane.com
- (vim /etc/selinux/config)
SELINUX=disabled
- 重启
2、安装jdk
- 1.安装
rpm -ivh jdk-7u80-linux-x64.rpm
- 2、配置环境变量
# vim ~.bash_profile
JAVA_HOME=/usr/java/jdk1.7.0_80
CLASSPATH=.
PATH=$JAVA_HOME/bin:
export JAVA_HOME
export CLASSPATH
# 重新加载配置文件
source .bash_profile
# 验证是否配置成功
echo $JAVA_HOME
# 输出配置地址
3、安装hadoop
- 1、解压
tar -zxvf hadoop-2.5.2.tar.gz -C /opt/install/
- 2、使用notebook插件NppFTP对配置文件进行修改(注意关闭防火墙systemctl stop firewalld)
- 3、hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_80
- 4、core-site.xml(解决总入口和临时目录的问题)
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1.keane.com:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/install/hadoop-2.5.2/data/tmp</value>
</property>
- 5、hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
# 控制程序代码访问权限
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
- 6、yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- 7、mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 8、slaves
hadoop1.keane.com
- 9、格式化
bin/hdfs namenode -fromat
- 10、启动
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
4、hdfs命令
ls、put、get、mkdir、rm
bin/hdfs dfs -mkdir /keane
# 查看命令
bin/hdfs dfs# 新版
bin/hdfs fs# 老版
5、python访问HDFS
pip install hdfs
- 注意:
程序访问hdfs默认执行读操作,没有写的权限,如果需要写入,需要加入配置-hdfs-site.xml - 下载
- 上传
res = self.client.upload(hdfs_path="",local_path="")
print(res)
- 删除
- 创建目录
6、HDFS集群搭建
- 1、集群中机器的选择
DataNode:存储数据,硬盘大
NameNode:入口、树状目录结构、文件基本信息(都存放在内存中),内存比较大 - 2、2个问题
- namenode上启动所有的datanode -->配置文件slaves
- 登录DataNode(ip,登录提供的密码)–>shell脚本
ssh免密码登录–>解决登录需要密码的问题
- 3、ssh免密登录
- ssh协议: 一台主机到另一台主机
- 用户端:
通过加密算法生成公私钥对,公钥发给远程主机,私钥自己保存。 - 登录
登录时,用户使用私钥+随机字符串进行登录 - 远程主机
远程主机接受公钥后返回主机随机字符串,用户端使用私钥+随机字符串发给远程主机,然后远程主机解密,正确可以登录
- 4、生成公私钥对
ssh ip 登录本机回自动生成一个.ssh文件夹
# 进入文件夹 ~/.ssh
ssh-keygen -t rsa # 生成公私钥对
# 将公钥发给远程主机
ssh-copy-id root@ip
- 5、如何将公钥发给远程主机
ssh-copy-id root@ip
- 6、HDFS集群搭建
1、克隆三台节点
2、每个节点设置ip地址、主机名、映射、防火墙、selinux、jdk ssh 免密登录
3、解压hadoop安装包# 将host文件复制到其他主机 scp /etc/hosts root@ip:/etc
4、修改6个配置文件,并同步集群的每个节点因为copy的已完成的节点,需要删除data/tmp中的数据 rm -rf *
5、格式化# hsfs-site.xml -->节点换为3个或直接删除 <property> <name>dfs.replication</name> <value>3</value> </property> # slaves hadoop1.keane.com hadoop2.keane.com hadoop3.keane.com
6、启动、关闭集群bin/hdfs namenode -format
sbin/start-dfs.sh sbin/stop-dfs.sh 统一启动namenode/datanode/secondarynamenode
7、NameNode的持久化
- 1、NameNode定期的存储到硬盘中
FSImage-->NameNode某一时刻的数据镜像
1、搭建HDFS集群时,进行格式化操作(bin/hdfs namenode -format),生成一个空的FSImage(data/tmp),后面会写入EditsLog
2、每一次重启NameNode时,把EditsLog和FSImage的数据在内存中合并,并生成一个新的EditsLog(如果没到指定的时间不会合并,到了指定的时间才会合并)
3、NameNode会定时的将Edits的数据和FSImage的数据进行合并(checkpoint机制)
EditsLog-->某一时刻后的,写操作信息