首页 > 技术文章 > HADOOP学习记录

jinlin 2019-01-21 20:41 原文

记HADOOP的学习

Hadoop起源

2004年,开发一款搜索引擎,nutch。nutch基于Lucence实现的搜索引擎,能够从互联网上抓取网页数据。抓取来的海量数据的存储问题。但是,这些海量数据都是非结构化数据,不能存在关系型数据库里。如果连数据的存储和管理都解决不了化,就谈不上后续为用户提供搜索服务,包括通过算法去优化检索速度。

正好那时候,Google发表了两篇论文《Google File System》 《Google MapReduce》
《Google File System》简称GFS,是Google公司用于解决海量数据存储的文件系统。
《Google MapReduce》简称MapReduce,是Google的计算框架,基于GFS。

2006年cutting根据《Google File System》设计了Nutch的HDFS,hadoop distributed file system。

Hadoop最开始是nutch的子项目,目的是解决nutch的海量数据存储问题。在nutch 0.8版本之后,Hadoop独立处理,成为一个独立的项目。后来,又根据《Google MapReduce》设计了基于HDFS的uMapRedce计算框架。

2006年之后,cutting带着Hadoop去了雅虎,当时有100多人的团队共同帮cutting完善hadoop。后来yahoo把Hadoop贡献了Apache。所以,现在Hadoop是Apache的顶级项目。

大数据的特点

  • TB,PB级别的数据
  • 非结构化数据
  • 快速增长,每天都会有大量数据产生。

大数据带来的变化

  • 大数据没有产生之前,数据分析,主要要依靠比较精良的算法。算法越严密,结果越精确。但是有了大数据之后,当数据量达到一定规模的时候,数据本身就可以说话了。所以就不需要太依靠算法去分析结果。
  • 当数据量达到一定程度后,不需要考虑因果关系,就能得到结果。
    所以,大数据是一种新的生产力。

Hadoop在MAC上的搭建

hadoop有三种安装模式

  • 单机模式

只支持MapReduce,不支持HDFS。这种模式一般用于调试MapReduce任务用的。

  • 单机的伪分布式模式

这种模式即支持MR,也支持HDFS

  • 完全分布式模式

用多个机器或多台虚拟机去搭建

安装方式

单机版

用于本地调试mapreduce使用,可直接在工程中引用hadoop的相关jar包,就可以使用到hadoop的mapreduce功能

单机的伪分布式模式
  • 方式一、直接使用命令

brew install hadoop

但是这样可能会存在使用时找不到HADOOP_CONF_DIR所在路径,造成无法正常运行的问题

  • 方式二、下载hadoop安装包,手动配置

步骤如下:

  • 1.解压hadoop压缩包,在~/.bash_profile中配置hadoop的相关路径
HADOOP_HOME=/Users/caojinlin/opt/hadoop-2.8.2
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME
export PATH
  • 2.配置相关文件
    配置hadoop安装目录下etc/hadoop下的配置文件

    • hadoop-env.sh
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
    
    export HADOOP_CONF_DIR=/Users/caojinlin/opt/hadoop-2.8.2/etc/hadoop
    
    export HADOOP_OPTS="-Djava.library.path=/Users/caojinlin/opt/hadoop-2.8.2/lib/native"  
    
    
    • core-site.xml
    <configuration>
    <property>
    	<name>fs.defaultFS</name>
    	<value>hdfs://localhost:9000</value>
    </property>
    
    <!--用来指定hadoop运行时产生文件的存放目录  自己创建-->
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>/Users/caojinlin/opt/hadoop-2.8.2/tmp</value>
    </property>
    </configuration>
    
    • hafs-site.xml
    <configuration>
    <property>
    	<name>fs.defaultFS</name>
    	<value>hdfs://localhost:9000</value>
    </property>
    
    <!--用来指定hadoop运行时产生文件的存放目录  自己创建-->
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>/Users/caojinlin/opt/hadoop-2.8.2/tmp</value>
    </property>
    </configuration>
    
    • mapred-site.xml
    <configuration>
      <property>
      <!--指定mapreduce运行在yarn上-->
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
       </property>
    </configuration>
    
    
    • yarn.site.xml
    <configuration>
     <!-- Site specific YARN configuration properties -->
      <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>localhost</value>
      </property>
      <property>
      <!--NodeManager获取数据的方式-->
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
    </configuration>
    
    
  • 3.配置免密码登录

    运行如下的命令

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  • 4.格式化namenode

执行hadoop namenode -format
当窗口出现时则代表成功。此时,创建了初始化的fsimage文件后edits文件。

namenode格式化

  • 5.启动hadoop

在hadoop的安装目录下的sbin中找到start-all.sh,启动这个命令,则可以启动hadoop

启动后可以运行jps查看运行的进程,如果其中有DataNode,NameNode,NodeManager,SecondaryNameNode,ResourceManager这五个进程,则说明hadoop成功启动了

HDFS学习

运行成功hadoop后可以在浏览器的localhost:50070页面查看HDFS系统

也可以通过命令行进行操作HDFS

HDFS的常用相关命令

命令 说明
hadoop  fs -mkdir /park 在hdfs 的根目录下,创建  park目录
hadoop  fs  -ls  / 查看hdfs根目录
hadoop  fs -put  /Users/caojinlin/1.txt  /park 将/Users/caojinlin目录下的1.txt放在hdfs的park目录下
hadoop  fs -get  /park/jdk  /home 把hdfs文件系统下park目录的文件下载到/Users/caojinlin目录下
hadoop fs -rm /park/文件名 删除hdfs 的park目录的指定文件
hadoop fs -rmdir /park 删除park目录,但是前提目录里没有文件
hadoop fs -rmr /park 删除park目录,即使目录里有文件
hadoop fs -cat /park/a.txt 查看park目录下的a.txt文件
haddop jar  xxx.jar 执行jar包
hadoop fs -getmerge /park  /root/tmp 将park目录下的所有文件合并成一个文件,并下载到/Users/caojinlin目录下
hadoop dfsadmin -safemode leave 离开安全模式
hadoop dfsadmin -safemode enter 进入安全模式
hadoop dfsadmin -report 查看存活的datanode节点信息
hadoop fsck /park/1.txt -files  -blocks -locations  -racks 查看1.txt 这个文件block信息以及机架信息

HDFS相关知识

HDFS中文件是按块进行存储的,hadoop1.X是按64MB切文件,hadoop2.X是按128MB切文件。

启动的进程中

namenode: 管理元数据信息,文件名,文件大小,文件块等信息,但是不存储具体数据。

datanode:用于负责存储块数据

Secondarynamenode: 负责定期的合并fsimage和edits文件,将合并后的元数据文件fsimage传给namenode,是namenode的辅助节点。

在格式化namenode时生成的fsimage和edits文件用来记录元数据信息

edits文件:记录元数据信息的改动,只要元数据发生变化,edits文件就产生记录

fsimage和edits文件会定期合并,这个周期默认事3600s,fsimage根据edits里的改动记录进行元数据的更新。

每次进行namenode格式化的时候都需要删除原来的edits文件和fsimage文件,不然会因为namenode对应不上相关的记录无法启动。

推荐阅读