集群简介
hadoop集群具体来说包含两个集群:HDFS集群和YARN集群。两者在逻辑上区分,但是物理上常在一起。
HDFS集群
负责海量数据的存储,集群中的角色主要有NameNode / DataNode。
NameNode负责记录元数据,DataNode负责管理数据块。每一个数据块都可以有多个副本,每个副本不会存在的相同的DataNode上。数据块根据block size来切分。
DataNode会定时的向NameNode汇报本机上数据块信息。
YARN集群
负责海量数据运算时的资源调度(为MapReduce程序分配运算硬件资源),集群中的角色主要有ResourceManager / NodeManager。 这样一来,将NodeManager放置在HDFS的DataNode节点中可以减少文件的传输。
Hadoop的安装
hadoop的配置文件基本都在hadoop/etc/hadoop目录下
下载&安装
- 你需要先下载hadoop。
- 配置haddop-env.sh 将JAVA_HOME目录去具体定位(原因是任务执行的时候使用ssh方式,这样如果用变量的方式去指定会不生效)。
- 修改core-site.xml配置
IP:PORT是namenode节点的地址,该节点提供文件存储位置
<configuration>
<!-- NameNode节点,port默认用9000 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ip:port</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop_tmp_data</value>
</property>
</configuration>
- 配置hdfs-site.xml(也可以不配,因为有默认值)
<configuration>
<!-- 副本数量,默认是3 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- secondary namenode,也可以不指定,默认用本机 -->
<property>
<name>dfs.secondary.http.address</name>
<value>ip:port</value>
</property>
</configuration>
文件副本的意思是一共有几份(包括原本)
- 配置mapred-site.xml
mapreduce基本会放在yarn平台上执行,因此需要指定运行平台。
<!-- 默认是local,也就是单机运行,所以这里改成yarn -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 配置yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>ip</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
初始化HDFS
hadoop使用之前需要格式化HDFS的文件系统。你可以在namenode配置的机器上执行hadoop namenode -format
。之后,你就可以通过 start namenode
来启动namenode机器。之后就可以在http://namenodeIp:50070
来访问hadoop提供的web界面。
如果你想启动datanode,那么需要执行 start datanode
。之后你可以执行jps
查看进程是否存在。然后可以去上述的web机器面查看有无与namenode连接上。
如果你想关闭对应的节点,需要执行 stop datanode|namenode
。
如果你不想一台一台启动,那么可以在namenode
节点的HADOOP_HOME/etc/hadoop
目录下修改slaves
文件中配置所有datanode
机器名。然后执行HADOOP_HOME/sbin/
脚本来启动所机器。如果你想关闭,可以使用HADOOP_HOME/sbin/
和HADOOP/sbin/
,不建议使用HADOOP/sbin/
。
使用这样的方式,需要配置namenode到datanode节点的免密登入。
配置NameNode到DataNode的免密登录
- NameNode生成key
ssh-keygen
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
ssh-copy-id hadoop4
HDFS的基本使用
基本命令使用入口在
bin/hadoop fs
。
# 查看文件
hadoop fs -ls 目录
hadoop fs -cat 文件
# 上传文件
hadoop fs -put 本机文件(可以指定多个文件) hadoop文件目录
# 获取文件
hadoop fs -get 文件
mapreduce基本使用
这里举一个word cnt的例子
- 首先你可以创建一个文本,并把它上传到hdfs中。
- 接着你可以在
hadoop_home/share/hadoop/mapreduce
目录中看到一个hadoop-mapreduce-examples-2.6.4.jar
文件。 - 然后你需要执行步骤2中的jar包来运行。 执行命令:
hadoop jar hadoop-mapreduce-examples-2.6.4.jar wordcount 步骤1的文件所在目录 结果存放目录