集群简介

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目录下

下载&安装

  1. 你需要先下载hadoop。
  2. 配置haddop-env.sh 将JAVA_HOME目录去具体定位(原因是任务执行的时候使用ssh方式,这样如果用变量的方式去指定会不生效)。
  3. 修改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>
  1. 配置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>

文件副本的意思是一共有几份(包括原本)

  1. 配置mapred-site.xml

mapreduce基本会放在yarn平台上执行,因此需要指定运行平台。

<!-- 默认是local,也就是单机运行,所以这里改成yarn -->
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  1. 配置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的免密登录

  1. 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的例子

  1. 首先你可以创建一个文本,并把它上传到hdfs中。
  2. 接着你可以在hadoop_home/share/hadoop/mapreduce目录中看到一个hadoop-mapreduce-examples-2.6.4.jar文件。
  3. 然后你需要执行步骤2中的jar包来运行。 执行命令:
hadoop jar hadoop-mapreduce-examples-2.6.4.jar wordcount 步骤1的文件所在目录 结果存放目录