我爱编程

Hadoop入门

2017-05-07  本文已影响0人  Spike_3154

HDFS的体系结构

设计目标

HDFS体系结构图


HDFS是典型的master-slave架构,其中NameNode作为Master而DataNode作为Slave。
HDFS由分布在不同机架上的DataNode以及NameNode所组成。一般用户从NameNode获取到元数据信息,并且从DataNode再获取真正的数据。

基础概念

数据块(Block):HDFS最基本的存储单元。默认大小是64M.
元数据:HDFS系统中文件与目录的属性信息。HDFS采用镜像文件(Fsimage)+日志文件(EditLog)的备份机制。其中日志文件包含了HDFS操作的所有信息。
主从节点通信:NameNode与DataNode之间使用TCP进行通信。
HDFS写数据流程:如下图所示:


HDFS读数据流程

注意,数据读取的过程中FSDataInputStream总是从离客户端最近的DataNode上读取一个个的数据块。

MapReduce体系结构

Client:客户端,用于用户提交程序,查看作业运行状态。
JobTracker:MapReduce架构主节点,一个MapReduce作业只有一个JobTracker。负责作业初始化,分配,与作业进行通信,协调其执行。
TaskTracker:任务节点,与JobTracker通信并在分配的数据块上执行Map或者Reduce操作/。
HDFS:用于存储输入以及输出的数据。

2017-05-08_092003.png

基础概念

作业(Job):一个MapReduce作业用到的Jar以及类的集合。
任务(Task):一个作业包含多个task
键值对:Map()以及Reduce()操作的输入以及输出均为<Key,Value>的形式

运行模式

单机模式:使用本地文件系统,一般用于MapReduce程序调试
伪分布式模式

完全分布式模式

安装

JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local    # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop            # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop       # 修改文件权限
cd /usr/local/hadoop
./bin/hadoop version

单机配置

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input   # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*          # 查看运行结果

Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。

Hadoop伪分布式配置

vim ./etc/hadoop/core-site.xml
# 改成下面的配置
<configuration>
        <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/usr/local/hadoop/tmp</value>
             <description>Abase for other temporary directories.</description>
        </property>
        <property>
             <name>fs.defaultFS</name>
             <value>hdfs://localhost:9000</value>
        </property>
</configuration>
<configuration>
        <property>
             <name>dfs.replication</name>
             <value>1</value>
        </property>
        <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
             <name>dfs.datanode.data.dir</name>
             <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>
./bin/hdfs namenode -format

可能出现权限不够的情况,这时需要给/usr/local/hadoop内文件加上访问权限
格式化完成会出现“successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。

./sbin/start-dfs.sh

运行例子

./bin/hdfs dfs -mkdir -p /user/hadoop
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
./bin/hdfs dfs -ls input
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-
examples-*.jar grep input output 'dfs[a-z.]+'
./bin/hdfs dfs -cat output/*
rm -r ./output    # 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output     # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*
Configuration conf = new Configuration();
Job job = new Job(conf);
/* 删除输出目录 */
Path outputPath = new Path(args[1]);
outputPath.getFileSystem(conf).delete(outputPath, true);
./sbin/stop-dfs.sh

启动Yarn

eversilver@debian:/usr/local/hadoop$ cp ./etc/hadoop/mapred-
site.xml.template ./etc/hadoop/mapred-site.xml
eversilver@debian:/usr/local/hadoop$ vim ./etc/hadoop/mapred-site.xml
# 编辑内容如下
<configuration>
        <property>
             <name>mapreduce.framework.name</name>
             <value>yarn</value>
        </property>
</configuration>
<configuration>
        <property>
             <name>yarn.nodemanager.aux-services</name>
             <value>mapreduce_shuffle</value>
            </property>
</configuration>
./sbin/start-yarn.sh      # 启动YARN
./sbin/mr-jobhistory-daemon.sh start historyserver  # 开启历史服务器,才能在
# Web中查看任务运行情况
eversilver@debian:/usr/local/hadoop$ jps
21328 ResourceManager
21732 JobHistoryServer
19765 NameNode
13974 QuorumPeerMain
21798 Jps
21607 NodeManager
19880 DataNode
15933 Kafka
20029 SecondaryNameNode
./sbin/stop-yarn.sh
./sbin/mr-jobhistory-daemon.sh stop historyserver
上一篇下一篇

猜你喜欢

热点阅读