• 第二部分:HDFS
  • 第三部分:MapReduce
  • 第四部分:项目案例实战


《Hadoop》

Hadoop常用命令

命令

说明

jps

查看进程

service iptables stop

关闭防火墙

start-all.sh

启动Hadoop服务



1、Hadoop介绍

Hadoop是使用Java编写,允许分布在集群,使用简单的编程模型的计算机大型数据集处理的Apache的开源框架。 Hadoop框架应用工程提供跨计算机集群的分布式存储和计算的环境。 Hadoop是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储



1.1 Hadoop2.x的组成

MapReduce - 计算

Yarm - 资源调度

HDFS - 数据存储

Common - 辅助工具



1.1.2 MapReduce

MapReduce是一种并行编程模型,用于编写普通硬件的设计,谷歌对大量数据的高效处理(多TB数据集)的分布式应用在大型集群(数千个节点)以及可靠的容错方式。 MapReduce程序可在Apache的开源框架Hadoop上运行.



1.1.3 HDFS

Hadoop分布式文件系统(HDFS)是基于谷歌文件系统(GFS),并提供了一个设计在普通硬件上运行的分布式文件系统。它与现有的分布式文件系统有许多相似之处。来自其他分布式文件系统的差别是显著。它高度容错并设计成部署在低成本的硬件。提供了高吞吐量的应用数据访问,并且适用于具有大数据集的应用程序.除了上面提到的两个核心组件,Hadoop的框架还包括以下两个模块:

  • Hadoop 通用:这是Java库和其他Hadoop组件所需的实用工具.
  • Hadoop YARN:这是作业调度和集群资源管理的框架


1.2 Hadoop如何工作?

建立重配置,处理大规模处理服务器这是相当昂贵的,但是作为替代,可以联系许多普通电脑采用单CPU在一起,作为一个单一功能的分布式系统,实际上,集群机可以平行读取数据集,并提供一个高得多的吞吐量。此外,这样便宜不到一个高端服务器价格。因此使用Hadoop跨越集群和低成本的机器上运行是一个不错不选择.

Hadoop运行整个计算机集群代码。这个过程包括以下核心任务由 Hadoop 执行

  • 数据最初分为目录和文件。文件分为128M和64M(128M最好)统一大小块.
  • 然后这些文件被分布在不同的群集节点,以便进一步处理。
  • HDFS,本地文件系统的顶端﹑监管处理。
  • 块复制处理硬件故障。
  • 检查代码已成功执行。
  • 执行发生映射之间,减少阶段的排序。
  • 发送排序的数据到某一计算机。
  • 为每个作业编写的调试日志.


1.3 Hadoop优势

  • Hadoop框架允许用户快速地编写和测试的分布式系统。有效并在整个机器和反过来自动分配数据和工作,利用CPU内核的基本平行度。
  • Hadoop不依赖于硬件,以提供容错和高可用性(FTHA),而Hadoop库本身已被设计在应用层可以检测和处理故障。
  • 服务器可以添加或从集群动态删除,Hadoop可继续不中断地运行。
  • Hadoop的的另一大优势在于,除了是开源的,因为它是基于Java并兼容所有的平台


1.4 Hadoop设计思想

  • 分块存储 每一个块就叫block
    怎么分合适? 1T 2T
    hadoop2.x中默认的切分的块的大小128M,Hadoop1.x为64M
    一个文件不足128M也会单独存一个块,块的大小就是存储数据的实际大小
  • hdfs中默认块的存储采用备份机制,默认的备份个数是3个
  • 相同数据块的副本一定存储在不同的节点上
  • 备份越多越好吗?
    副本越多,数据安全性越高,占用过多的存储资源,维护变得困难


2、Linux上安装Hadoop2.x(伪分布式搭建)

2.1 Hadoop操作模式

下载 Hadoop 以后,可以操作Hadoop集群以以下三个支持模式之一:

  • 本地/独立模式:下载Hadoop在系统中,默认情况下之后,它会被配置在一个独立的模式,用于运行Java程序.
  • 模拟分布式模式:这是在单台机器的分布式模拟。Hadoop守护每个进程,如 hdfs, yarn, MapReduce 等,都将作为一个独立的java程序运行。这种模式对开发非常有用。
  • 完全分布式模式:这种模式是完全分布式的最小两台或多台计算机的集群。


2.2 Linux下配置Java

1、下载解压好jdk以后,创建文件:

vi /etc/profile.d/java.sh

2、写入:

JAVA_HOME=/usr/soft/jdk1.8.0_144
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
export JAVA_HOME PATH CLASSPATH

3、执行命令:

source /etc/profile.d/java.sh

4、检查是否安装成功:

java -version


2.3 Linux下配置Hadoop

安装Hadoop之前必须安装好Java



2.3.1 解压安装

1、下载解压好Hadoop以后,创建文件:

vi /etc/profile.d/hadoop.sh

2、写入:

HADOOP_HOME=/usr/soft/hadoop
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME PATH

3、执行命令:

source /etc/profile.d/hadoop.sh

4、检查是否安装成功:

hadoop version



2.3.2 配置 搭建伪分布式

注意:修改配置文件可以用 editplus/notpad 远程连接修改



2.3.2.1 配置hadoop的相关配置文件

修改 /soft/hadoop/etc/hadoop 目录下的文件

1、修改 core-site.xml 文件
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://主机名:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop/tmp</value>
    </property>
</configuration>

这里要能使用主机名,还得添加一个映射,不然系统是找不到的。

# 查看/修改主机名  
vi /etc/sysconfig/network
或者
localhost
# 打开后文件如下:
   NETWORKING=yes  
   HOSTNAME=虚拟机名  

# 添加映射
vi /etc/hosts             
在文件末尾添加一句:
	ip地址 虚拟机名
	
# 测试是否添加成功:
ping 主机名



2、修改 hdfs-site.xml 文件
<configuration>
    <property>
        <name>dfs.replication</name>  
        <value>1</value>
        <!--这里的1表示备份文件的数量为1,默认是3,这里因为是学习Hadoop所以设置成1-->
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/hadoop/tmp/dfs/data</value>
    </property>
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
</configuration>



3、修改 mapred-site.xml 文件

将mapred-site.xml.template 复制一份 改名为 mapred-site.xml

<configuration>
    <property>  
        <name>mapreduce.framework.name</name>  
        <value>yarn</value>  
    </property>  
</configuration>



4、修改 yarn-site.xml 文件
<configuration>
    <property>  
        <name>yarn.nodemanager.aux-services</name>  
        <value>mapreduce_shuffle</value>  
    </property>  
</configuration>



2.3.2.2 安装SSH - 免登录协议
# 1、安装
yum -y install openssh-clients openssh-server

# 2、生成公钥和私钥:  
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa   (注意 p是大写)

# 3、进入目录
cd ~/.ssh  

# 4、将公钥 导入到秘钥库(其实就是个复制文件)  
cp id_rsa.pub  authorized_keys  
# id_rsa.pub - 公钥

# 5、测试  
ssh localhost
# 如果不用再输入密码了 则成功

# 退出
exit



2.3.2.3 启动hadoop
# nameNode格式化
hadoop namenode -format
# 这里格式化的是元数据

# 启动hadoop进程   
start-all.sh

# 查看进程     
jps

有以下五个进程说明搭建成功  
1412 NameNode
1910 NodeManager
1499 DataNode
1676 SecondaryNameNode
1821 ResourceManager



2.3.2.4 在电脑上访问Hadoop

首先要关闭防火墙

service iptables stop

在浏览器地址栏中输入:

ip地址:50070

ip地址:8088

进入看到Hadoop的页面即可。



2.3.3 其他问题
1、解决‘yum官方停止支持’的问题

执行如下命令:

sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo

yum clean all

yum makecache



2、如果ssh连接出现The authenticity of host can’t be established的问题
修改/etc/ssh/ssh_config文件的配置,以后则不会再出现此问题  
在最后面添加:  
StrictHostKeyChecking no UserKnownHostsFile /dev/null


3、Windows上安装Hadoop

目的: 为了操作Linux上的Hadoop(Windows上需要有jdk和Hadoop)

步骤:

  1. 安装jdk
  2. 安装Hadoop
  1. 添加环境变量HADOOP_HOME值:你的Hadoop安装的路径
  2. 在path变量中添加%HADOOP_HOME%/bin
  1. 测试hadoop version出现版本信息即安装成功


安装可能会出现的问题

如果你的jdk安装在C:\Program Files或者D:\Program Files

目录下,就会报错:

hdfs 备份目录 hdfs默认备份_hdfs 备份目录

打开编辑hadoop-2.7.3\etc\hadoop\hadoop-env.cmd文件:

hdfs 备份目录 hdfs默认备份_分布式_02

  1. jdk在C:\Program Files目录下的话,因为Program Files中间有空格会报错,将其改成PROGRA~1即可。
  2. jdk在D:\Program Files目录下的话,则必须将jdk复制出来(建议和Hadoop放在一个目录下)然后再修改hadoop-env.cmd即可。