天天看点

大数据技术原理与应用 第二章 大数据处理架构Hadoop

厦门大学林子雨老师课程 —— 大数据技术原理与应用 学习笔记

参考资料:http://dblab.xmu.edu.cn/post/bigdata-online-course/#lesson0

1. Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce

2. Hadoop在企业中的应用架构

大数据技术原理与应用 第二章 大数据处理架构Hadoop

3. Hive会把提交的sql转换为一系列MapReduce作业后再去执行。

4. Hadoop项目结构

大数据技术原理与应用 第二章 大数据处理架构Hadoop
大数据技术原理与应用 第二章 大数据处理架构Hadoop

5. 在Mac上安装伪分布式Hadoop

此处参考博客:

https://blog.csdn.net/fox64194167/article/details/80617527

https://blog.csdn.net/qfikh/article/details/75041190

(1)升级Java:Mac自带jdk是1.7,Hadoop 3.0需要1.8以上版本。用brew cask install java很慢,建议从官网上下载jdk-8u172,再手动安装。网址为http://www.oracle.com/technetwork/java/javase/downloads/index.html。

(2)安装Hadoop:

$ brew install Hadoop

(3)SSH登录权限设置

配置SSH的原因:

Hadoop名称节点(NameNode)需要启动集群中所有机器的Hadoop守护进程,这个过程需要通过SSH登录来实现。Hadoop并没有提供SSH输入密码登录的形式,因此,为了能够顺利登录每台机器,需要将所有机器配置为名称节点可以无密码登录它们。

用dsa密钥认证来生成一对公钥和私钥:

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

将生成的公钥加入到用于认证的公钥文件中:

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

接下来测试一下是否配置成功:

$ ssh localhost

如果遇到connection refused之类的错误,检查一下mac是否开启远程登录功能,在系统偏好设置中可以设置。

(4)配置Hadoop文件

需要配置的文件主要都在这个目录下:/usr/local/Cellar/hadoop/3.1.0/libexec/etc/hadoop  

a) hadoop-env.sh

输入以下代码看看你把 Java 装到哪里了:

$ /usr/libexec/java_home
           

你会看到类似这样的结果:

/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
           

打开 hadoop-env.sh 文件(位置 etc/hadoop/),找到 # export JAVA_HOME=,改参数如下:

export JAVA_HOME={your java home directory}
           

把 {your java home directory} 改成你上面查到的 Java 路径,记得去掉注释 #。比如

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
           

b) core-site.xml

打开 core-site.xml 文件(位置 etc/hadoop/),改参数如下:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/Cellar/hadoop/3.1.0/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
           

hadoop.tmp.dir表示存放临时数据的目录,即包括NameNode的数据,也包括DataNode的数据。该路径任意指定,只要实际存在该文件夹即可。

name为fs.defaultFS的值,表示hdfs路径的逻辑名称。fs.default.name 保存了NameNode的位置,HDFS和MapReduce组件都需要用到它,这就是它出现在core-site.xml 文件中而不是 hdfs-site.xml文件中的原因

c) hdfs-site.xml

打开 hdfs-site.xml 文件(位置 etc/hadoop/),改参数如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/Cellar/hadoop/3.1.0/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
       <value>file:/usr/local/Cellar/hadoop/3.1.0/tmp/dfs/data</value>
    </property>
</configuration>
           

变量dfs.replication指定了每个HDFS数据库的复制次数。 通常为3, 由于我们只有一台主机和一个伪分布式模式的DataNode,将此值修改为1。

dfs.namenode.name.dir表示本地磁盘目录,是存储fsimage文件的地方

dfs.datanode.data.dir表示本地磁盘目录,HDFS数据存放block的地方

d) mapred-site.xml

打开 mapred-site.xml 文件(位置 etc/hadoop/),改参数如下:

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

e) yarn-site.xml

打开 yarn-site.xml 文件(位置 etc/hadoop/),改参数如下:

<configuration> 
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
    <property> 
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> 
    </property> 
</configuration>
           

(5)运行

a) 进入Hadoop的目录,以mac系统为例目录为

/usr/local/Cellar/hadoop/3.1.0/libexec
           

b) 格式化文件系统:

$ bin/hdfs namenode -format
           

c) 启动NameNode和DataNode的守护进程:

$ sbin/start-dfs.sh
           

d) 启动ResourceManager和NodeManager的守护进程:

$ sbin/start-yarn.sh
           

e) 在浏览器中访问以下链接,测试是否正常:

NameNode - http://localhost:9870

ResourceManager - http://localhost:8088

6. Hadoop集群的节点

HDFS:

NameNode:负责协调集群中的数据存储,类似于目录,访问数据时先去访问namenode,获得需要访问的数据具体存储在哪几个datanode中,然后再去相应的datanode中取数据。

DataNode:存储被拆分的数据块

SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息

MapReduce:

JobTracker:协调数据计算任务,相当于作业管家,会把一个大的作业拆分成很多个小作业,分发到不同的机器上去执行。

TaskTracker:负责执行由JobTracker指派的任务